MathGroup Archive 2006

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: FindRoot

  • To: mathgroup at smc.vnet.net
  • Subject: [mg70408] Re: [mg70356] FindRoot
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Sun, 15 Oct 2006 00:20:23 -0400 (EDT)
  • References: <200610140706.DAA07906@smc.vnet.net>

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


  • References:
  • Prev by Date: RE: path for package
  • Next by Date: Re: how to sum lists of unequal length?
  • Previous by thread: Re: FindRoot
  • Next by thread: Re: FindRoot