Re: Need help plotting multiple NDSolve solutions
- To: mathgroup@smc.vnet.net
- Subject: [mg10750] Re: Need help plotting multiple NDSolve solutions
- From: Allan Hayes <hay@haystack.demon.co.uk>
- Date: Mon, 2 Feb 1998 00:44:46 -0500
- References: <6a1q24$q4n@smc.vnet.net> <6as96t$f8j@smc.vnet.net>
Norbert Scherm wrote:
>
> Van Graves wrote:
> >
> > Hi, I'm a new Mathematica user and would like to plot a "family" of
> > solutions for a set of simultaneous differential equations using
> > multiple sets of initial conditions. I couldn't find an example in any
> > of the online documentation or on the Wolfram web site. Can anyone
> > give me an example of how to do this?
>
> Fortunately, these days I dealt with a similar problem (varying
> parameters of the ODE).
>
> -----------------------------------------------------------
>
> dfeld={(*
> 0.001,
> 0.1,
> 0.2,
> 0.3,*)
> 0.4,
> 0.5,
> 0.6,
> 0.7,
> 0.8,
> 0.9(*,
> 1.0,
> 1.5,
> 2.0,
> 3.0,
> 4.0,
> 5.0*)};
>
> Clear[y,x,d,Te];
>
> For[i=1,i<=Dimensions[dfeld][[1]],i++,
> Print[Dimensions[dfeld][[1]]-i];
> d=dfeld[[i]];
> Te=2.0*Pi*1.75;
> result=
> NDSolve[
> {x''[t]+2*d*x'[t]+x[t]==1.0,
> x'[0]==0,
> x[0]==0
> },x,{t,0,Te}];
> y[i]=(x/.result)[[1]];
> g[i]=Plot[Evaluate[x[t]/.result],{t,0.0,Te},DisplayFunction->Identity];
> ];
> Show[
> Table[ g[i],{i,Dimensions[dfeld][[1]]} ],
> DisplayFunction->$DisplayFunction
> ]
>
> -----------------------------------------------------------
>
> Instead of the parameter `d=dfeld[[i]]' you have to vary the initials
> in each iteration of the loop.
>
> I hope this helps...
>
> (Norbert)
Another way?
Once the solutions are obtained the ParametricPlot (and Plot) can deal
with lists of functions.
In[1]:=
Apply[
NDSolve[{c'[t] == Cos[t],s'[t]== Sin[t],
s[0] ==#1, c[0] ==#2},{c[t],s[t]},{t,0,6}
]&,
{{0,.5},{.3,-.5}},
1
]
Out[1]=
{{{c[t] -> InterpolatingFunction[{{0., 6.}}, <>][t],
s[t] -> InterpolatingFunction[{{0., 6.}}, <>][t]}},
{{c[t] -> InterpolatingFunction[{{0., 6.}}, <>][t],
s[t] -> InterpolatingFunction[{{0., 6.}}, <>][t]}}}
In[2]:=
{c[t],s[t]}/.Flatten[%,1]
Out[98]=
{{InterpolatingFunction[{{0., 6.}}, <>][t],
InterpolatingFunction[{{0., 6.}}, <>][t]},
{InterpolatingFunction[{{0., 6.}}, <>][t],
InterpolatingFunction[{{0., 6.}}, <>][t]}}
In[3]:=
ParametricPlot[Evaluate[%],{t,0,6}]
--
Allan Hayes
Training and Consulting
Leicester, UK
hay@haystack.demon.co.uk
http://www.haystack.demon.co.uk
voice: +44 (0)116 271 4198
fax: +44 (0)116 271 8642