Re: FindRoot
- To: mathgroup at smc.vnet.net
- Subject: [mg70469] Re: FindRoot
- From: dimmechan at yahoo.com
- Date: Tue, 17 Oct 2006 02:58:43 -0400 (EDT)
- References: <20061014184518.29029.qmail@web30201.mail.mud.yahoo.com> <egvaks$rk5$1@smc.vnet.net>
Thanks to Chriss and Andrzej for their responses. Andrzej Kozlowski wrote: > 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.