MathGroup Archive 2001

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

Search the Archive

Re: matrix diffential equations

  • To: mathgroup at smc.vnet.net
  • Subject: [mg27547] Re: [mg27510] matrix diffential equations
  • From: "Mark Harder" <harderm at ucs.orst.edu>
  • Date: Wed, 7 Mar 2001 04:07:44 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

Martin,
    There are many basic things wrong here.
    First, I agree with you re. the error messages from Mathematica (Mta)--
they could be a lot more helpful if they referred to the function and/or
statement# that generated them.  As a result, it is absolutely vital that
you divide your code into pieces in order to diagnose a messy problem like
this.
    So lets begin with the first 2 statements that set up the problem.  Note
that you define a function, A[t_] with set delayed, but you don't end the
line with ";" or at least enclose it in "(   ..  )".  Thus, Mta interprets
the function definition as spilling over into the y= statment on the next
line, & it thinks (I don't know why) that the linefeed between the lines is
a multiplication.  Try to run just the first 3 lines of your code, & the
error message will say something about your trying to redefine Times[], &
this is puzzling, since you don't *think* you did that.  So, generally, If
you suspect you have a problem with a function you have defined, a good
practice is to use the ? command.  Using your version of the first 2 lines :

In[758]:= ?A

"Global`A"
A[t_] := {{1, 1, 1}, {1, 1, 1}, {1, 1, 1}}*t*y := Array[ytmp, {3, 3}]

As you can see, you have * operations on the lhs of a set delayed which
means you are trying to re-define them.

    Next, in your definition of eqns, you write y as a *function* , which is
proper syntax for diff. eqns. , however using Array in this case is not
really what you want:
In[764]:=
y := Array[ytmp, {3, 3}];
y[u]

Out[765]=
{{ytmp[1, 1], ytmp[1, 2], ytmp[1, 3]}, {ytmp[2, 1], ytmp[2, 2],
      ytmp[2, 3]}, {ytmp[3, 1], ytmp[3, 2], ytmp[3, 3]}}[u]

which produces problems later on, when I tried to use this in the
differential eqn. solver.

A better way might be:
Clear[Y, y, u, t, y11, v, f]
(*  better solution of Jens - Peer Kuska's  *)
fSymbol[f_String, i_Integer, j_Integer] :=
  ToExpression[f <> ToString[i] <> ToString[j] ]
Y[t_] := Table[fSymbol["y", i, j][t], {i, 3}, {j, 3} ]

Now,
In[1094]:=
Y[u]
Out[1094]=
{{y11[u], y12[u], y13[u]}, {y21[u], y22[u], y23[u]}, {y31[u], y32[u],
y33[u]}}
&
In[1095]:=
Y'[u]
Out[1095]=
{{y11'[u], y12'[u], y13'[u]}, {y21'[u], y22'[u], y23'[u]}, {y31'[u],
y32'[u], y33'[u]}}

The equations can be written as
In[1096]:=
eqns = Flatten[{MapThread[Equal, {Y'[u], A[u] . Y[u]}, 2], MapThread[Equal,
{Y[s], A[s]}, 2]}]

Out[1096]=
{y11'[u] == u y11[u] + u y21[u] + u y31[u], y12'[u] == u y12[u] + u y22[u] +
u y32[u],

  y13'[u] == u y13[u] + u y23[u] + u y33[u], y21'[u] == u y11[u] + u y21[u]
+ u y31[u],

  y22'[u] == u y12[u] + u y22[u] + u y32[u], y23'[u] == u y13[u] + u y23[u]
+ u y33[u],

  y31'[u] == u y11[u] + u y21[u] + u y31[u], y32'[u] == u y12[u] + u y22[u]
+ u y32[u],

  y33'[u] == u y13[u] + u y23[u] + u y33[u], y11[s] == s, y12[s] == s,
y13[s] == s, y21[s] == s,

  y22[s] == s, y23[s] == s, y31[s] == s, y32[s] == s, y33[s] == s}

This is assuming that the independent variable of the functions is a scalar,
of course. And this leads to problems solving the ODE's.  DSolve won't
evaluate or produce any errors, so I am guessing it can't solve this:
In[1136]:=
DSolve[eqns, Flatten[Y[u] ], u]

Out[1136]=
DSolve[{y11'[u] == u y11[u] + u y21[u] + u y31[u], y12'[u] == u y12[u] + u
y22[u] + u y32[u],

   y13'[u] == u y13[u] + u y23[u] + u y33[u], y21'[u] == u y11[u] + u y21[u]
+ u y31[u],

   y22'[u] == u y12[u] + u y22[u] + u y32[u], y23'[u] == u y13[u] + u y23[u]
+ u y33[u],

   y31'[u] == u y11[u] + u y21[u] + u y31[u], y32'[u] == u y12[u] + u y22[u]
+ u y32[u],

   y33'[u] == u y13[u] + u y23[u] + u y33[u], y11[s] == s, y12[s] == s,
y13[s] == s, y21[s] == s,

   y22[s] == s, y23[s] == s, y31[s] == s, y32[s] == s, y33[s] == s},

  {y11[u], y12[u], y13[u], y21[u], y22[u], y23[u], y31[u], y32[u], y33[u]},
u]


 NDSolve produces a set of interpolating functions which don't evaluate to
anything :

In[1139]:=
sol = NDSolve[eqns /. s -> 0, Flatten[Y[u] ], {u, 0, 1}]
Out[1139]=
{{y11[u] -> InterpolatingFunction[][u], y12[u] ->
InterpolatingFunction[][u],

   y13[u] -> InterpolatingFunction[][u], y21[u] ->
InterpolatingFunction[][u],

   y22[u] -> InterpolatingFunction[][u], y23[u] ->
InterpolatingFunction[][u],

   y31[u] -> InterpolatingFunction[][u], y32[u] ->
InterpolatingFunction[][u],

   y33[u] -> InterpolatingFunction[][u]}}

In[1138]:=
Y[.5]
Out[1138]=
{{y11[0.5], y12[0.5], y13[0.5]}, {y21[0.5], y22[0.5], y23[0.5]}, {y31[0.5],
y32[0.5], y33[0.5]}}

I don't understand why these equations can't be solved, and I am not really
sure what you intended to do (Note that you have to give NDSolve numeric
limits and initial conditions, hence the numeric assignments where you had
symbols.)  I will leave the rest to you.  Maybe one of the other members can
shed some light on this.
-mark harder

-----Original Message-----
From: Martin Richter <mrMICE.fi at cbs.dk>
To: mathgroup at smc.vnet.net
Subject: [mg27547] [mg27510] matrix diffential equations


>Hi,
>
>Simple way to crash Mathematica is by writing
>y := Array[y, {3, 3}]
>Even Quit Kernel doesn't stop Mathematica, and I have experience
application
>error and crashes (both in Mathematica dll and Mathematica.exe for simple
>programs) and in so cases Mathematica has to be closed from the Task
Manager
>(Windows 2000). Regarding Mathematica exception coding, I'm not impressed,
>just IMHO.
>
>Just have to buss it out :-(
>
>My question is the following: Is there a simple way to define matrix
>diffential equation in Mathematica, I have tried something like:
>A[t_]:= {{1,1,1},{1,1,1},{1,1,1}}*t
>y := Array[ytmp, {3, 3}]
>eqns = {y'[u] == A[u]. y[u], y[s] == A[s]}
>NDSolveqns, y, {u, s, t}]
>
>But this is not the way.
>
>TIA
>Martin
>
>
>----------------------------------------------
>Please remove the PET to reply by email
>
>
>



  • Prev by Date: Re: NSolve problem
  • Next by Date: RE: NSolve problem
  • Previous by thread: Re: Re: matrix diffential equations
  • Next by thread: Large number of equations with large number of unknowns