PDA

View Full Version : [Mathematica] Ordered matrix multiplication


guerom00
Sep30-10, 04:42 AM
Hello everyone,

I have a list, let's call it L1, of length N. Each element of this list is a square matrix.
I would like to :
1/ Apply MatrixExp[] to each element of L1 (I know how to do that)
2/ Multiply each element of the subsequent list _in an ordred fashion_ i.e. from element N to element 1. In this order (!) because none of the matrices commute.

To recap, I have

L1={L1[[1]],L1[[2]],...,L1[[N]]}

and want the matrix M equal to

M=MatrixExp[L1[[N]]].MatrixExp[L1[[N-1]]]...MatrixExp[L1[[1]]]

What would be a nice "one liner" which does that ?
Thanks in advance :)

Simon_Tyler
Sep30-10, 06:31 AM
This isn't elegant...
First create an example list of 5 random 2x2 matrices
(working symbolically would be very slow)
In[1]:= l[i_][__]:=-Random[]
In[2]:= L[i_]:=Array[l[i],{2,2}]
In[3]:= LL=Array[L,5];

Now combine them together the way you wanted:
In[4]:= MatrixExp[Dot@@(MatrixExp/@Reverse[LL])]
Out[4]= {{1.12427,-0.100453},{-0.206832,1.17472}}

Note that for very many large matrices, you might want to use a different solution that does not have to store each element in MatrixExp/@Reverse[LL].

guerom00
Sep30-10, 06:54 AM
Thanks for your message :)
Yeah, I ended up doing more or less what you suggested. I wrote M=L1//MatrixExp/@#&//Reverse//Dot@@#&.
That was the Dot part I wasn't sure about : I thought for some reason that Dot[] accepted only two arguments. But no... It nicely "threads" over any number of arguments :)