MathGroup Archive 2008

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

Search the Archive

Re: Finding only final values in NDSolve

  • To: mathgroup at smc.vnet.net
  • Subject: [mg91249] Re: Finding only final values in NDSolve
  • From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
  • Date: Mon, 11 Aug 2008 06:07:34 -0400 (EDT)
  • Organization: The Open University, Milton Keynes, UK
  • References: <g7lvmq$fdj$1@smc.vnet.net>

zakseidov2 at gmail.com wrote:

> 1. I use NDSolve for integration from some t0 to some tf, but I'm
> interested only in FINAL VALUES y(tf),y'(tf).
>  How to do it (I mean: avoiding InterpolatingFunction and saving all
> intermediate values)?

As long as one uses NDSolve, one will always get an 
InterpolatingFunction object (if the process is successful, of course), 
because NDSolve builds an InterpolatingFunction to represent a function 
that solve numerically the differential equation(s).

If you do not want these interpolating functions, you must use some 
other methods/approaches to get your integration done.

> 2. I use WorkingPrecision -> 32(or larger). Final values y(tf),y'(tf)
> are of lesser Precision than 32D so i can't use them directly for
> further integrations. I do some manupulations to take more artificial
> digits...
> But what's the best way for doing it automatically not manually?

Coercing Mathematica to use subsequently fixed-size arbitrary-precision 
arithmetic can be achieve with a construct such as

     Block[{$MinPrecision = $MaxPrecision = 30}, ...]

For instance,

In[1]:= sol =
   NDSolve[{y''[x] + Sin[y[x]] y[x] == 0, y[0] == 1, y'[0] == 0},
    y, {x, 0, 30}, WorkingPrecision -> 30];

In[2]:= Block[{$MinPrecision = $MaxPrecision = 30},
  {y[1], y'[1]} /. sol[[1]]
  ]
Precision /@ %

Out[2]= {0.624400364233472054920976458678, \
-0.668045563872908903982164732251}

Out[3]= {30., 30.}

In[4]:= {y[1], y'[1]} /. sol[[1]]
Precision /@ %

Out[4]= {0.62440036423347205492097645868, \
-0.668045563872908903982164732}

Out[5]= {29.3405, 27.1661}

In[6]:= {y[1.`30], y'[1.`30]} /. sol[[1]]
Precision /@ %

Out[6]= {0.62440036423347205492097645868, \
-0.668045563872908903982164732}

Out[7]= {29.1601, 26.9857}

> 3. In other words: I need only values of y(t), y'(t) in fixed t_i with
> fixed interval d.
> How to do it using NDSolve economically without InterpolatingFunction
> (which I guess takes a lot of time if MaxSteps -> 10^8(or larger))?

You cannot avoid InterpolatingFunction when using NDSolve.

If you do not want these interpolating functions, you must use some 
other methods/approaches to get your integration done.

Hope this helps,
-- Jean-Marc


  • Prev by Date: Re: Simulating a Mouseover event in EventHandler
  • Next by Date: Re: Suggestions for selling a copy of Mathematica V6 wanted
  • Previous by thread: Finding only final values in NDSolve
  • Next by thread: Re: Finding only final values in NDSolve