       Re: Re: an easy one?

• To: mathgroup at smc.vnet.net
• Subject: [mg88901] Re: Re: an easy one?
• From: Murray Eisenberg <murray at math.umass.edu>
• Date: Wed, 21 May 2008 14:47:23 -0400 (EDT)
• Organization: Mathematics & Statistics, Univ. of Mass./Amherst
• References: <g0tr2f\$mn5\$1@smc.vnet.net> <200805201054.GAA05152@smc.vnet.net>

```Two comments about the proffered code

NestWhileList[#+(2-#^2)/(2#)&,1.,Abs[#^2-2]>10^-6&]

for applying Newton's method to approximate Sqrt...

(1) For the function f[x_]:=x^2-2, the formula for Newton's method
simplifies to the well-known "Hero's method", which is what's shown in
the examples of the Mathematica 6 tutorial ApplyingFunctionsRepeatedly:

NestWhileList[(# + 2/#)/2 &, 1., Abs[#^2 - 2] > 10^-15 &]

In general, for Sqrt[c], the function is (# + c/#)/2&, the average of
the current approximation and c divided by the current approximation.
And that's now "intuitively obvious" as a good iterative approximation
method even if you've never heard about derivatives:  if x is an
approximation to Sqrt[c], then both the two numbers x and c/x are
approximations to Sqrt[c], so average them to get a better approximation.

(2) Although it makes essentially no difference here, in general it's a
very bad idea when iteratively approximating a root r of f[x]==0 to use
as a stopping criteria that f[#] < epsilon.  The trouble is that the
function f may be rather flat near an actual root r, and so the current
approximation x may well satisfy the condition f[x]<epsilon yet be "far"
from r.

In general, a safer stopping criterion is to test the closeness of two
successive approximations to one another (perhaps in conjunction with
the f[#]<epsilon criterion).  With Hero's method, for example:

NestWhileList[(# + 2/#)/2 &, 1., Abs[#1 - #2] > 10^-15 &, 2]

dh wrote:
> Hi Francisco,
>
> as you do not give an explicite example, I make one up: calculation of
>
> Sqrt using Newtons method: xnew= xold+ f[xold]/f'[xold] starting w ith
>
> 1.. Where f[x]= x^2-2 and we want an error <10^-6:
>
> NestWhileList[#+(2-#^2)/(2#)&,1.,Abs[#^2-2]>10^-6&]
>
> hope this helps, Daniel
>
>
>
> Francisco Gutierrez wrote:
>
>> I have a code (for clustering) that works well with FixedPointList.
>
>>   It takes the following form:
>
>>   FixedPointList[veamos[dataset,#]&, prototipos,10]
>
>>
>
>>   where veamos is a function that acts on the dataset and prototipos,
>
>>   and prototipos is also a list of lists (for example {{5,5},{10,10}} )
>
>>
>
>>   But of course using FixedPointList is imperfect. I want to use NestWhileList instead, with a criterion of termination acting on prototipos (i=2Ee., if the absolute value of the substraction of the penultimate prototipos and the last prototipos is less than a certain amount, say 0.01, then stop).
>
>>
>
>>   But I haven=B4t been able.
>
>>   Can somebody help me?
>
>>   Thanks
>
>>   Francisco Guti=E9rrez
>
>
>
>
>
>

--
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

```

• Prev by Date: Re: DumpSave of packages - now it works
• Next by Date: Re: Cannot NSolve a system of equations
• Previous by thread: Re: an easy one?
• Next by thread: Re: Mathematica 6: No more memory available problem with