Bug in matrix operation using MatrixExp?
- To: mathgroup at smc.vnet.net
 - Subject: [mg29218] Bug in matrix operation using MatrixExp?
 - From: "SANCHEZ DE LEON, Guillermo" <gsl at fab.enusa.es>
 - Date: Tue, 5 Jun 2001 04:21:49 -0400 (EDT)
 - Sender: owner-wri-mathgroup at wolfram.com
 
I have tested the Mathematica function: MatrixExp. I think that this function has a
bug. Here is an example (I avoid the outputs because they are to long):
The below function evaluate MatrixExp[A1 t] but using Laplace Transform
(n=dimension (nxn), it is a square matrix):
ExpMatrixLT[n_,A1_]:= 
  Module[{B,R,P},B=s IdentityMatrix[n]- A1 ;R=Inverse[B];P= Apart[R];
    InverseLaplaceTransform[ P,s,t]]
In this example I define A as follow:
model1 ={{-3.`,1,1},{2,-1,0},{0.3`,0,-2}};
Now I evaluate the exponetial matrix using the Mathematica: MatrixExp[A t] , with A
= model1
MatrixExp[model1 t];
(*I test the solution for t= 0, it should be a Identity matrix*)
Chop[%/.t->  0,10^-6] (*Solution fine*)
(*I test the solution for t= 1*)
%%/.t-> 1
{{0.19698899325524824`,0.22096628734547427`,
    0.13291291316188164`},{0.44193257469094854`,0.6125055556911189`,
    0.17610674836718532`},{0.03987387394856449`,0.02641601225507779`,
    0.1537951580499446`}}
Now I apply  the same computation but using ExpMatrixLT[n,A1]
ExpMatrixLT[3,model1 ];
Chop[%/.t->10^-6] (*Solution fine*)
%%/.t -> 1
{{0.19698899325524835`,0.22096628734547444`,
    0.13291291316188178`},{0.4419325746909489`,0.6125055556911194`,
    0.1761067483671854`},{0.03987387394856454`,0.02641601225507781`,
    0.15379515804994467`}} (*Solution fine, it the same that I obteined
using ExpMatrix*)
But when the matrix dimension increase the problems start
In this example it is define A1 as follow:
model2 = {{-34.9897, 0.347, 8.32, 0.0347, 0.000019, 0.092, 0.00019, 0, 
        0.00038, 
     0.0693, 0, 0.000493, 0.0693, 0, 0.0000821}, {0.245, -0.347, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 
     0, 0, 0}, {10.5, 0, -8.32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
    {1.63, 0, 0, -0.0347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0.0735, 0, 0, 
        0, -0.000019, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0}, {0.367, 0, 0, 0, 0, -0.09893, 0, 0, 0, 0, 0,
0, 
        0, 0, 0}, 
    {0, 0, 0, 0, 0, 0.00693, -0.00019, 0, 0, 0, 0, 0, 0, 0, 0}, 
    {2.94, 0, 0, 0, 0, 0, 0, -0.099, 0, 0, 0, 0, 0, 0, 0}, {0.0122, 0, 0, 0,
        0, 0, 0, 0, 
     -0.00038, 0, 0, 0, 0, 0, 0}, {2.04, 0, 0, 0, 0, 0, 0, 0, 0, -0.1386, 
        0.0173, 0, 0, 0, 0}, 
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0693, -0.0173, 0, 0, 0, 0}, {0, 0, 0, 0,
0, 
        0, 0, 0, 0, 0, 0, 
     -0.000493, 0, 0, 0}, {1.63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.1386, 
        0.0173, 0}, 
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0693, -0.02308, 0}, 
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00578, -0.0000821}};
MatrixExp[model2 t];
%/.t->  0 (*Wrong solution*)
%%/.t-> 1(*Wrong solution*)
but with ExpMatrixLT the computation is slower but the solution look likes
OK.
ExpMatrixLT[15,model2 ];
Chop[%/.t->0,10^-6] (*solution OK*)
%%/.t-> 1 (*solution OK*)
I will appreciate comments. Am I in a mistake or MatrixExp work wrong in
these case?. Thanks