Re: Getting the value of the independent var from the dep.var using NDSolve
- To: mathgroup at smc.vnet.net
- Subject: [mg64085] Re: Getting the value of the independent var from the dep.var using NDSolve
- From: marks at wolfram.com
- Date: Wed, 1 Feb 2006 04:34:16 -0500 (EST)
- References: <dptd4r$be$1@smc.vnet.net><dqsohb$bui$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
An event is located when a change in sign in the event function is detected. For the function Sin[x] - 1, the sign is practically always negative and the chance of hitting zero is infinitessimal. You can construct an appropriate event function by looking for a turning point by considering: D[Sin[x] - 1, x] Then it is possible to use the Direction option to restrict the detection to points corresponding to a maximum: In[1]:= NDSolve[{y'[x] == Cos[x], y[0] == 0}, y, {x, 0, 20}, Method -> {EventLocator, "Event" -> Cos[x], "EventAction" :> Sow[x], "Direction" -> -1}] // Reap Out[1]= {{{y -> InterpolatingFunction[{{0., 20.}}, <>]}}, > {{1.5708, 7.85398, 14.1372}}} Mark Sofroniou, Research and Development, Wolfram Research. Borut Levart wrote: > Commenting on the last comment, I would like to say: > - what a nice differential-equation platform NDSolve is, > - and that the above example fails to find the peaks of Sin[x]: > > NDSolve[ > { > y'[x] == Cos[x], > y[0] == 0}, y, {x, 0, 20}, > Method -> { > "EventLocator", > "Event" -> y[x] - 1, > "EventAction" :> Sow[x] > } > ] // Reap > > Why is that? > I guess the solver steps over the event, which in turn is not noticed. > But could any algorithm not miss that?