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