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?