Re: Terminate NDSolve by a condition
- To: mathgroup at smc.vnet.net
- Subject: [mg123621] Re: Terminate NDSolve by a condition
- From: Oliver Ruebenkoenig <ruebenko at wolfram.com>
- Date: Tue, 13 Dec 2011 05:42:36 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <201112121142.GAA12764@smc.vnet.net>
On Mon, 12 Dec 2011, Sam Takoy wrote: > Hi, > > Suppose I'm solving a system of ODE's for x[t] and y[t] and I know > that there is a periodic solution, but beyond that I know nothing, not > even how long the period is. So I want to stop NDSolve when x repeats > a certain value. Here's an example: > > sol = NDSolve[{x'[t] == -Sin[t], y'[t] == Cos[t], x[0] == 1, y[0] == > 0}, {x, y}, {t, 0, 6}]; > ParametricPlot[Evaluate[{x[t], y[t]} /. sol], {t, 0, 6}] > > This solution goes from 0 to 6, but I want it to go from 0 until x(t) > = 1 again. > > What's the best way to accomplish this? > > Many thanks in advance, > > Sam > > Sam, how about tend = 100; sol = NDSolve[{x'[t] == -Sin[t], y'[t] == Cos[t], x[0] == 1, y[0] == 0}, {x, y}, {t, 0, tend}, Method -> {"EventLocator", "Event" -> y[t], "Direction" -> 1, "EventAction" :> {Throw[tend = t, "StopIntegration"]}}] tend Plot[Evaluate[{y[t], y'[t]} /. sol], {t, 0, tend}] Plot[Evaluate[{x[t], x'[t]} /. sol], {t, 0, tend}] ParametricPlot[Evaluate[{x[t], y[t]} /. sol], {t, 0, tend}] Documentation: tutorial/NDSolveEventLocator Hope this helps, Oliver
- References:
- Terminate NDSolve by a condition
- From: Sam Takoy <sam.takoy@yahoo.com>
- Terminate NDSolve by a condition