MathGroup Archive 2011

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Terminate NDSolve by a condition

  • To: mathgroup at smc.vnet.net
  • Subject: [mg123614] Re: Terminate NDSolve by a condition
  • From: Sam Takoy <sam.takoy at yahoo.com>
  • Date: Tue, 13 Dec 2011 05:41:13 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <201112121142.GAA12764@smc.vnet.net> <alpine.LRH.2.00.1112120545180.24437@wopr.wolfram.com>
  • Reply-to: Sam Takoy <sam.takoy at yahoo.com>

Thank you.


________________________________
 From: Oliver Ruebenkoenig <ruebenko at wolfram.com>
To: Sam Takoy <sam.takoy at yahoo.com> 
Cc: mathgroup at smc.vnet.net 
Sent: Monday, December 12, 2011 6:46 AM
Subject: [mg123614] Re: Terminate NDSolve by a condition
 


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


  • Prev by Date: Re: Terminate NDSolve by a condition
  • Next by Date: Re: Findminimum too slow for iterative reweighted least squares
  • Previous by thread: Re: Terminate NDSolve by a condition
  • Next by thread: Re: Terminate NDSolve by a condition