# How can I perform joint Schur decomposition or joint spectral decomposition?

I have a collection of matrices $A_1,\ldots,A_n$, and I want to do joint Schur decomposition on them (they all have the same unitary matrices in their decomposition). I couldn't find any implementation of this (I was looking for Python, but I would be happy to find anything at the moment). The closest I found was an implementation that works for two matrices ($n=2$) for Python. Anyone is familiar with how to do that or has a Python/other implementation?

Also, is there more stable algorithms to do joint decomposition to identify the eigenvalues of $n$ matrices simultaneously?

EDIT: My matrices are diagonalizable, so a joint spectral decomposition into eigenvectors and eigenvalues (when the eigenvectors are all the same) would be fine as well.

• I'm wondering whey you see a need for a special algorithm. If any matrix has unique eigenvalues, then just decompose it: its eigenbasis will be an eigenbasis for all other simultaneously diagonalizable matrices. For EVs with multiplicity, iterate recursively by decomposing additional matrices on the eigenspaces. What is the problem with this approach? – whuber Oct 10 '11 at 17:25
• this is useful because the matrices have noisy elements in them. – decomposable Oct 11 '11 at 1:31
• So your idea is that, because of the noise, it may be beneficial to look at all the matrices together to come up with the "best" estimates of the eigenvalues of each matrix? Are you also interested in the true unitary matrices? Any information on the type of noise, on the distribution of the matrices? How would you evaluate performance? For example, are you interested percent error in the eigenvalue estimates, or absolute error. Trying to get some information together so we can write down a precise objective function... if that's what you're after. – DavidR Oct 11 '11 at 17:42

In some very special cases there is an exact joint diagonalization for a set of matrices. For example, if you have $N$ rank $1$ matrices of dimension $N\times N$ you can do that.