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?