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:
- FindRoot
- From: dimmechan@yahoo.com
- FindRoot