MathGroup Archive 2010

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

Search the Archive

Re: Modification of Variable in NDSolve

  • To: mathgroup at smc.vnet.net
  • Subject: [mg108078] Re: Modification of Variable in NDSolve
  • From: "Christoph Lhotka" <christoph.lhotka at univie.ac.at>
  • Date: Mon, 8 Mar 2010 06:10:40 -0500 (EST)
  • References: <hmiikh$3r6$1@smc.vnet.net> <hmlese$jmc$1@smc.vnet.net>

Hello,

I would use the low level functions, NDSolve`ProcessEquations,
NDSolve`Iterate and

"NDSolve`Reinitialize"

to modify the variables in NDSolve (it is ment for exactly that purpose,
to reset the initial conditions to a new value).

unfortunatly the event location method seems not to work with this
approach. so one has to write his own code to detect the event (by looking
at state@"SolutionVector" for example.

Look up the Advance documentation in NDSolve on this topic. For sure you
will find a solution, which is fast and reliable.

Christoph


On So, 7.03.2010, 11:10, DrMajorBob wrote:
> I'm not sure why you're dividing into intervals (explained in a previous
> post??), but here's a code that loops:
>
> Clear[findCrossing]
> findCrossing[{low_, high_, a1Low_, b1Low_, f1Low_}] :=
>   Module[{t1, aa, bb, ff, at, bt, ft},
>    {t1, {aa, bb, ff}, {at, bt, ft}} =
>     Block[{a, b, f, sol, crossings, cross},
>      {{sol}, {crossings}} =
>       Reap[NDSolve[{a'[t] == dA, b'[t] == dB, f'[t] == dF,
>          a[low] == a1Low, b[low] == b1Low, f[low] == f1Low}, {a, b,
>          f}, {t, low, high},
>         Method -> {"EventLocator", "Event" -> f[t] - 5,
>           "Direction" -> 1, "EventAction" :> Sow[t]}]];
>      {a, b, f} = {a, b, f} /. sol;
>      {cross = First@crossings, {a, b, f}, {a@cross, b@cross, f@c



  • Prev by Date: Automating a finite element procedure
  • Next by Date: Re: Putting a Plot inside a Graphics function with other drawings
  • Previous by thread: Re: Re: Modification of Variable in NDSolve
  • Next by thread: Display selected region of a table of polygons