Re: Coding for Mathematica
- To: mathgroup at smc.vnet.net
- Subject: [mg100597] Re: [mg100555] Coding for Mathematica
- From: Murray Eisenberg <murray at math.umass.edu>
- Date: Tue, 9 Jun 2009 03:53:31 -0400 (EDT)
- Organization: Mathematics & Statistics, Univ. of Mass./Amherst
- References: <200906080604.CAA19997@smc.vnet.net>
- Reply-to: murray at math.umass.edu
One could write an essay about Mathematica programming styles based upon the example of Newton's Method. (Indeed, I've done essentially that in one conference paper and in some materials for classes in years past.) Please, no offense intended in saying this: your programming style does betray somebody coming to Mathematica with, perhaps, too much exposure to classical programming languages where the only option was to take a one-step-at-a-time procedural approach. In the example at hand, there's no reason to manufacture a loop explicitly as you did. Instead, you could do the following, which exploits Mathematica's NestList functional programming approach: f[x_] := x^2 - 2 g[x_] = x - f[x]/f'[x]; iterates = NestList[g, 1., 9]; formatNumber[t_]:=NumberForm[t,10] Transpose[{Range[10], formatNumber /@ iterates}] // TableForm This may look longer than what you have below, but I purposely set it up so that it could readily be adapted so as to make a function that does the whole thing as a "chunk". And so as to separate out the formatting aspect from the computational aspect. (I didn't include anything about plotting the original function f, since that does not seem directly related to what you asked.) One thing in your procedural code is not going to do what you expect, namely, to display each iterate to 10 decimal digits. Instead of N[#,10], which still by default displays to only 6 digits, you need NumberForm[#,10], which changes the number of displayed digits to what the 2nd argument specifies. Actually, Newton's method converges so rapidly that you won't see any difference in the iterates after the first 5, even if you asked to display 15 or 16 decimal digits. Now to answer what you explicitly asked: Yes, the result of evaluating each of the Input cells In[3] through In[5] will be to print a two-column table with second column the successive iterates. FAQneeds wrote: > Im a first time user of Mathematica. So im trying to put in a command > related to Newton's Method. I would just like to know if once im done > typing this command in am i suppose to see the results immediately > or do i have go to something in the program to see the results of my > command. Here is the Code please can anyone tell me what im doing wrong > i will be really grateful: > > In[1] :=(*your name,06/06/09*) > In[2] :=(*Newton's Method*) > In[3] := f[x_] := x^2 - 2 > In[4] := x[1] = 1.0 > In[5] := For[n = 1, n < 10, n++, > {x[n + 1] = x[n] - f[x[n]]/f'[x[n]]; > Print[n + 1, " ", N[x[n + 1], 10]];}] > In[6] := Plot[f[x], {x, 0, 2}] > -- Murray Eisenberg murray at math.umass.edu Mathematics & Statistics Dept. Lederle Graduate Research Tower phone 413 549-1020 (H) University of Massachusetts 413 545-2859 (W) 710 North Pleasant Street fax 413 545-1801 Amherst, MA 01003-9305
- References:
- Coding for Mathematica
- From: FAQneeds <thegodfather7769@aol.com>
- Coding for Mathematica