matrix exponntial



Generally, maxima functions map or "thread" over lists or
matrices.  For example, let f be the function that squares.
(C1) display2d : false;
(D1) FALSE
(C2) f(x) := x^2;
(D2) f(x):=x^2

/* Apply f to the list [1,2,3] */

(C3) f([1,2,3]);


/* The result is [1^2, 2^2, 3^3]; we say f maps over the list.*/

(D3) [1,4,9]


/* The same holds for matrices. */

(C4) m : matrix([a,b],[c,d]);
(D4) MATRIX([a,b],[C,D])
(C5) f(m);
(D5) MATRIX([a^2,b^2],[C^2,D^2])

/* Notice that the result is *not* m^2.  To evaluate m^2, use the
dot operator. */

(C6) m.m;
(D6) MATRIX([b*C+a^2,b*D+a*b],[C*D+a*C,D^2+b*C])

/* All this applies to the exponential function as well */

(C8) exp(m);
(D8) MATRIX([%E^a,%E^b],[%E^C,%E^D])

/* The function exp is mapped over the elements of the matrix
m; this isn't *the* matrix exponential. */


To find *the* matrix exponential exp(m) = id + m + m^2/2! + m^3/3! + ...,
you need the spectral representation of m; thus you need the
eigenvalues and eigenvectors of m.  Maxima doesn't have a single
command for *the* matrix exponential (that I can find).  Using
Maxima's eigenvectors function, you could write your own.  If your
matrices are selfadjoint, the algorithm is fairly straightforward;
otherwise, see an advanced linear algebra book.

Hope this helps,

Barton Willis

P.S.  On the sourceforge maxima page, change "thanks to it's open" to
"thanks to its open".