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".