RE: Re: NSolve with varying parameter
- To: mathgroup at smc.vnet.net
- Subject: [mg18837] RE: [mg18719] Re: [mg18692] NSolve with varying parameter
- From: "Ersek, Ted R" <ErsekTR at navair.navy.mil>
- Date: Thu, 22 Jul 1999 08:19:45 -0400
- Sender: owner-wri-mathgroup at wolfram.com
Carl Woll wrote a fabulous solution on how to get InterpolatingFunctions
that solve a system of equations. See [mg18719] Re: [mg18692] NSolve with
varying parameter
(17 July, 1999).
I noticed Carl's solution can be simplified a bit (see below).
I will use the same example Carl used, but slightly change some notation.
Suppose we wanted to solve the equations:
t^2==x[t]^2 + y[t]^2
y[t]==x[t]^2
In many applications the variables are a function of time. So I think it's
easier to grasp when we use (t) instead of (a). Notice I have (x, y)
depending on (t) from the very beginning.
- The way I solve it below (f, g) are only functions of (t).
- The Diff Eqs and BCs are shown at Out[4] below.
----------------------------------
In[1]:=
f[t_] := x[t]^2 + y[t]^2 - t^2;
g[t_] := y[t] - x[t]^2;
eqs={f'[t]==0, g'[t]==0, f[1]==0, g[1]==0}
Out[4]=
{-2*t + 2*x[t]*x'[t] + 2*y[t]*y'[t] == 0,
-2*x[t]*x'[t] + y'[t] == 0,
-1 + x[1]^2 + y[1]^2 == 0,
-x[1]^2 + y[1] == 0}
In[6]:=
soln=NDSolve[eqs,{x,y},{t,0,1}]
Out[6]=
{{x->InterpolatingFunction[{{0.,1.}},<>],
y->InterpolatingFunction[{{0.,1.}},<>]},
{x->InterpolatingFunction[{{0.,1.}},<>],
y->InterpolatingFunction[{{0.,1.}},<>]},
{x->InterpolatingFunction[{{0.,1.}},<>],
y->InterpolatingFunction[{{0.,1.}},<>]},
{x->InterpolatingFunction[{{0.,1.}},<>],
y->InterpolatingFunction[{{0.,1.}},<>]}}
---------------------------------------------
Below I provide non-trivial code to make nice plots of
the real and imaginary parts of x[t] and y[y] for the
first of four solutions.
In[7]:=
x1=x/.soln[[1]];
y1=y/.soln[[1]];
Block[{$DisplayFunction=Identity},
p1=Plot[Re[x1[t]],{t,0,1},PlotLabel->"Real Part of x"];
p2=Plot[Im[x1[t]],{t,0,1},PlotLabel->"Imaginary Part of x"];
p3=Plot[Re[y1[t]],{t,0,1},PlotLabel->"Real Part of y"];
p4=Plot[Im[y1[t]],{t,0,1},PlotLabel->"Imaginary Part of y"];
];
Show[GraphicsArray[{{p1,p2},{p3,p4}},
GraphicsSpacing -> 0.2,ImageSize->{550,380}]];
(* Graphics Not Shown *)
------------------
Regards,
Ted Ersek
ersektr at navair.navy.mil