Re: Matrix differential equation
- To: mathgroup at smc.vnet.net
- Subject: [mg51035] Re: Matrix differential equation
- From: p-valko at tamu.edu (Peter Valko)
- Date: Sat, 2 Oct 2004 03:18:15 -0400 (EDT)
- References: <ciua6v$90v$1@smc.vnet.net> <cj0n8p$ldd$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
After exchanging several mails in the background I see what the
propblem is:
A = -{{1, 2, 3}, {4, 5 , 6}, {7, 8 , 9}};
K = -{{0, 10, 0}, {0, 0 , 0}, {0, 0 , 0}};
KT = Transpose[K];
and
matrixExpA = First[X /. NDSolve[X'[t] == 0.5*IdentityMatrix[3]+ X +
K.X + X.KT && X[0] == IdentityMatrix[3], X, {t, 0, 10}]]
does not work. The reason is, that Mathematica rearranges
0.5*IdentityMatrix[3]+ X + K.X + X.KT
before it realizes that X is a 3 by 3 matrix.
To avoid the problem, first I write
A = -{{1, 2, 3}, {4, 5 , 6}, {7, 8 , 9}};
K = -{{0, 10, 0}, {0, 0 , 0}, {0, 0 , 0}};
KT = Transpose[K];
then I write:
f[X_]:= 0.5*IdentityMatrix[3]+ X + K.X + X.KT /; Dimensions[X]=={3,3}
This way I have a right-hand-side that will evaluate only if Mathematica
already knows that X is a 3 by 3 matrix.
Now
matrixExpA = First[X /. NDSolve[X'[t] == f[X[t]] && X[0] ==
IdentityMatrix[3], X, {t, 0, 10}]]
works and provides an interpolating function. Finally,
matrixExpA[1.] evaluates to
{{311.319, -32.1828, 0.}, {-32.1828, 3.57742, 0.}, {0., 0., 3.57742}}
Regards
Peter
p-valko at tamu.edu (Peter Valko) wrote in message news:<cj0n8p$ldd$1 at smc.vnet.net>...
> I tried to reproduce the error message, but surprisingly, there was no
> error and the sample problem worked.
>
> The result is an
> InterpolatingFunction[{{0., 10.}}, <>]
> and I can calculate it at time zero or at time = 1.
>
> For instance
> matrixExpA[1]
> gives
> {{166.52, -16.4872, 0.}, {-16.4872, 1.64872, 0.}, {0., 0., 1.64872}}
>
>
> Therefore, I have to conclude, that you do not input exactly what you
> wish to input, or that something is not Cleared before you use it.
>
> I would suggest to print out
> k
> A
> K
> KT
> before using the command
>
> > matrixExpA =
> > X /. First[
> > NDSolve[X'[t] == 0.5*IdentityMatrix[3] +(X[t]) + K.X[t] + X[t].KT &&
> > X[0] == IdentityMatrix[3], X, {t, 0, 10}]]
>
>
> to make sure that they really have the value I think they have.
>
> Regards
> Peter
>
>
>
> "Marco Malvaldi" <M.Malvaldi at chem.rug.nl> wrote in message news:<ciua6v$90v$1 at smc.vnet.net>...
> > It is possible to numerically solve a general matrix differential equation
> > with Mathematica? From the example in Mathematica 5 tutorial, I found that
> > this problem can be solved:
> >
> > k = 10
> > A = -{{1, 2, 3}, {4, 5 , 6}, {7, 8 , 9}};
> > K = -{{0, k, 0}, {0, 0 , 0}, {0, 0 , 0}};
> > X0 = {{1, 0, 0}, {0, 1 , 0}, {0, 0 , 1}};
> > KT = Transpose[K]
> >
> > matrixExpA =
> > X /. First[
> > NDSolve[X'[t] == 0.5*IdentityMatrix[3] .(X[t]) + K.X[t] + X[t].KT &&
> > X[0] == IdentityMatrix[3], X, {t, 0, 10}]]
> >
> > Anyway, when I try to submit this problem:
> >
> > matrixExpA =
> > X /. First[
> > NDSolve[X'[t] == 0.5*IdentityMatrix[3] +(X[t]) + K.X[t] + X[t].KT &&
> > X[0] == IdentityMatrix[3], X, {t, 0, 10}]]
> >
> > the answer is:
> >
> > NDSolve::ndfdmc: Computed derivatives do not have dimensionality consistent
> > with the initial conditions.
> >
> > even if what I'm doing is to sum a 3x3 matrix to a system of 3X3 matrix.
> >
> > Regards
> > Marco Malvaldi