Re: FindRoot

• To: mathgroup at smc.vnet.net
• Subject: [mg70432] Re: [mg70356] FindRoot
• From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
• Date: Mon, 16 Oct 2006 02:34:50 -0400 (EDT)
• References: <20061014184518.29029.qmail@web30201.mail.mud.yahoo.com>

```O.K, it seems I missed your point, which I now think concerned the
difference between StepMonitor and EvaluationMonitor (whereas I
originally thought you were concerned with the difference between
using Sow-Reap and Print).
In general EvaluationMonitor will produce more values than
StepMonitor, because it records each time the specified numerical
function is evaluated. Sometimes to make one step in an iterative
procedure you need to evaluate the function several times at
different points (the standard example is when you need to compute a
numerical derivative using finite differences) and all these
computations will be part of one step (so will not be recorded by
StepMonitor) but will be recored by EvaluationMonitor.

Andrzej

On 15 Oct 2006, at 03:45, dimitris anagnostou wrote:

> Dear Andrzej,
>
> I really appreciate your response.
>
> By " what exactly the following command gives?" I mean
> from mathematical point of view what the command
>
> Reap[FindRoot[Cos[x] == x, {x, 5}, EvaluationMonitor :> Sow[x]]]
> gives.
>
> For example this gives a list of the steps taken
>
> Reap[FindRoot[Cos[x] == x, {x, 5}, StepMonitor :> Sow[x]]]
>
>
> Andrzej Kozlowski <akoz at mimuw.edu.pl> wrote:
> (tm) Pro*
>
> On 14 Oct 2006, at 16:06, dimmechan at yahoo.com wrote:
>
> > Hello.
> >
> > Let me deal with something elementary but yet confusing for me.
> >
> > Consider the equation cos(x)=x.
> >
> > FindRoot[Cos[x] == x, {x, 5}]
> > {x -> 0.7390851332151607}
> >
> > This prints the value of x every time a step is taken.
> >
> > FindRoot[Cos[x] == x, {x, 5}, StepMonitor :> Print[x]]
> >
> > This gives a list of the steps taken.
> >
> > Reap[FindRoot[Cos[x] == x, {x, 5}, StepMonitor :> Sow[x]]]
> > {{x -> 0.7390851332151607}, {{-1., -0.02837830412204312,
> > 1.0296174587519653, 0.7525886779802748, 0.7391248287000711,
> > 0.7390851335630761, 0.7390851332151607}}}
> >
> > This counts the steps.
> >
> > Block[{st = 0}, {FindRoot[Cos[x] == x, {x, 5}, StepMonitor :> st++],
> > st}]
> > {{x -> 0.7390851332151607}, 7}
> >
> > I want to know what exactly the following command gives.
> >
> > Reap[FindRoot[Cos[x] == x, {x, 5}, EvaluationMonitor :> Sow[x]]]
> > {{x -> 0.7390851332151607}, {{5., -54.99999999999999, -1.,
> > 8.716216958779569,
> > -0.02837830412204312, 1.0296174587519653, 0.7525886779802748,
> > 0.7391248287000711, 0.7390851335630761, 0.7390851332151607}}}
> >
> > In versions earlier than 5.0 you could use the following command
> >
> > FindRoot[Print[x]; Cos[x] == x, {x, 5}]
> >
> > Why it cannot be used now?
> >
> > Thanks in advance for any help.
> >
>
>
> If you want you can still do it in the old way:
>
> First evaluate:
>
> Developer`SetSystemOptions["EvaluateNumericalFunctionArgument" ->
> False];
>
> and then
>
> FindRoot[(Print[x]; Cos[x]) == x, {x, 5}]
> will work.
> But note the parentheses! It won't work without them.
> However, the approach using Sow and Reap is vastly more useful since
> you can't manipulate data returned by Print statements (well, at
> least not without changing the value of \$Output and some extra
> programming). I am not sure what kind of answer you expected to your
> question " what exactly the following command gives". It gives
> exactly the same list of values (of successive approximations to the
> root of the equation tried by FindRoot) as your Print method gives,
> but in a much more convenient form. Does this answer your question?
>
> Andrzej Kozlowski
>
>
>
> All-new Yahoo! Mail - Fire up a more powerful email and get things
> done faster.

```

• Prev by Date: Re: a fault in the Factor[] function for polynomials?
• Next by Date: Re: Question from a biologist
• Previous by thread: Re: FindRoot
• Next by thread: Re: FindRoot