MathGroup Archive 2009

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

Search the Archive

Re: Solving Ordinary differential equations by NDSolve

  • To: mathgroup at smc.vnet.net
  • Subject: [mg104982] Re: [mg104962] Solving Ordinary differential equations by NDSolve
  • From: Bob Hanlon <hanlonr at cox.net>
  • Date: Sun, 15 Nov 2009 20:48:47 -0500 (EST)
  • Reply-to: hanlonr at cox.net

The code that I sent you runs on my system.

Your latest code appears to have an error in the definition of V0, i.e., 

V0 = V0 = 5*10 - 3 

rather than 

V0 = 5*10^- 3


Bob Hanlon

---- Matteo <matteo.diplomacy at gmail.com> wrote: 

=============
So..you suggest to modify in this way my code:

d = 2*10 - 2;
A = d^2 Pi/4;
Po = 5*101325;
Pa = 1*101325;
rho = 1000;
V0 = 5*10 - 3;
gamma = 114/100;
sol = V /. 
   NDSolve[{V'[t] == A Sqrt[2 (Po (V0/V[t])^gamma - Pa)/rho], 
      V[0] == V0}, {V}, {t, 0, 9}, MaxSteps -> 1000000, 
     AccuracyGoal -> 10, PrecisionGoal -> 10][[1]];
v[t_] := Chop[sol[t]]
Plot[v[t]*1000, {t, 0, 9}, PlotRange -> All]
Grid[Table[{t, v[t]}, {t, 0, 9, 1}]]

Does it run on you machine?
I get this error message: 

DSolve::mxst: Maximum number of 1000000 steps reached at the point t == 0.0789357392769894`.

I tried to set up MaxStep -> 10^7 but the new error is


DSolve::mxst: Maximum number of 1000000 steps reached at the point t == 0.11680804227781108`.


I had the problem to have imaginary part for variables that I know it must be real.
I would solve my trouble definitively by this example-problem.



Bob Hanlon ha scritto:
> It makes no sense to enter Pi to two decimal places. In general, enter all constants exactly and let the subsequent processes define the overall precision.
>
> d = 2*10^-2;
> A = d^2 Pi/4;
> Po = 5*101325;
> Pa = 1*101325;
> rho = 1000;
> V0 = 5*10^-3;
> gamma = 114/100;
>
> sol = V /. NDSolve[{
>       V'[t] == A Sqrt[2 (Po (V0/V[t])^gamma - Pa)/rho],
>       V[0] == V0}, {V}, {t, 0, 9},
>      MaxSteps -> 1000000,
>      AccuracyGoal -> 10,
>      PrecisionGoal -> 10][[1]];
>
> Use Chop to eliminate the numeric noise (imaginary values smaller than your accuracy and precision).
>
> v[t_] := Chop[sol[t]]
>
> Plot[v[t]*1000, {t, 0, 9},
>  PlotRange -> All]
>
> Grid[Table[{t, v[t]}, {t, 0, 9, 1}]]
>
>
> Bob Hanlon
>
> ---- Allamarein <matteo.diplomacy at gmail.com> wrote: 
>
> =============
> I'd solve this ODE:
>
> V'[t] == A Sqrt[2 (Po (V0/V[t])^gamma - Pa)/rho
> IC: V[0] == V0
>
> I wrote this code:
>
> d = 2*10^-2 ;
> A = d^2  3.14/4;
> Po = 5 *101325;
> Pa = 1*101325 ;
> rho = 1000 ;
> V0 = 5*10^-3 ;
> gamma = 1.14;
> sol = NDSolve[{
>     V'[t] == A Sqrt[2 (Po (V0/V[t])^gamma - Pa)/ rho],
>     V[0] == V0},
>    {V}, {t, 0, 9},
>    MaxSteps -> 1000000, AccuracyGoal -> 10, PrecisionGoal -> 10];
> v[t_] := V[t] /. sol[[1]];
> Plot[Evaluate[V[t] /. sol]*1000, {t, 0, 9}, PlotRange -> All]
> Grid[Table[{t, v[t]}, {t, 0, 9, 1}]]
>
> If it can be useful, I can underline units of these variables:
> d [m]
> P0, Pa [Pa]
> rho [kg/m^3]
> V [m^3]
> gamma [--]
> t [sec]
>
> Running this code, V has got comlex part. This is impossible, because
> it's a volume.
> I should re-write my ODE in order NDSolve can digest better or I can
> set an option in my code where I suggest " V must be positive and
> real"?
>
>
>   

--

Bob Hanlon



  • Prev by Date: Re: Solving Ordinary differential equations by NDSolve
  • Next by Date: Re: Re: Re: Wrong limit?
  • Previous by thread: Re: Re: Solving Ordinary differential equations
  • Next by thread: Fyi, Listing of Mathematica 7 functions (1869 functions)