MathGroup Archive 2006

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

Search the Archive

Re: Getting the value of the independent var from the dep.var using NDSolve

  • To: mathgroup at smc.vnet.net
  • Subject: [mg63715] Re: Getting the value of the independent var from the dep.var using NDSolve
  • From: rknapp at wolfram.com
  • Date: Wed, 11 Jan 2006 06:49:37 -0500 (EST)
  • References: <dptd4r$be$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

pradeep suresh wrote:
> Hi all,
> i have a specific problem of finding the point at which the dependent
> variable takes on a particular value in teh solution of a differential
> equation.
> e.g. for simplicity
> we have the equation y'[t]==t, and the initial cond. y[0]==0.y is the
> dep. variable and t is the independent variable.
> i want to find out the 't' at which y[t]==p(p is known, say 8)
> and since i am already using NDSolve to solve this and other equations
> i'd like to achieve this working around NDSolve,
> could anyone suggets a solution to this problem??
> thanks a ton!
> Pradeep

The tidiest way to do this is with the EventLocator method in NDSolve.

For your example:

p = 8;
sol = NDSolve[{y'[t] == t, y[0] ==  0}, y, {t, 0, 10},
 Method -> {"EventLocator", "Event" -> y[t] - p, "EventAction" :>
(ptime = t)}];
ptime

returns 4.

The event is just a function that has a root when the condition you
want occurs.
The event action is an expression that is evaluated with the values
when the event
occurs. Note that it is given with RuleDelayed (:>) so that it does not
get evaluated
until the event occurs.

There are several examples of this method in the advanced documentation
for NDSolve:
http://documents.wolfram.com/mathematica/Built-inFunctions/AdvancedDocumentation/DifferentialEquations/NDSolve/ODEIntegrationMethods/ControllerMethods/EventLocation.html

If you think the event may occur several times, then you can use Reap
and Sow as suggeested in another response.
For example:

In[4]:=
p = 8.;
Reap[sol = NDSolve[{y''[t] + y[t] == 0, y[0]== 10, y'[0]
==0},y,{t,0,100},
      Method->{"EventLocator", "Event"->y[t] - p,
"EventAction":>Sow[t]}]]

Out[5]=
{{{y->InterpolatingFunction[{{0.,100.}},<>]}},{{0.643501,5.63968,6.92669,\
11.9229,13.2099,18.2061,

19.4931,24.4892,25.7762,30.7724,32.0594,37.0556,38.3426,43.3388,44.6258,49.\
622,50.909,55.9052,57.1922,62.1884,63.4754,68.4715,69.7585,74.7547,76.0417,
      81.0379,82.3249,87.3211,88.6081,93.6043,94.8913,99.8875}}}

gives all the times at which the event occurs.


  • Prev by Date: Re: Annoying spacing in Default.nb
  • Next by Date: Re: NDSolve::ndsz question
  • Previous by thread: Re: Getting the value of the independent var from the dep.var using NDSolve
  • Next by thread: Re: Getting the value of the independent var from the dep.var using NDSolve