Get eigenvectors of non-normal, defective matrices in julia

Dear community,

Given a non-normal defective matrix, how can I get all eigenvectors of this matrix? An obvious way would be to use the jordan normal form. I wonder if somebody already calculated the jordan normal form for a (not necessarily normal) matrix in julia (or has some nice package doing that)? Is there a neat way to derive from the decompositions already available in julia (like SVD)? I think I could manage to code it by myself, but most likely not in an optimal way. It would also be unnecessary to reinvent the wheel.
If this is complicated: Can I get the eigenvectors also from another decomposition (like Schur)?



If you have a non-normal matrix that is diagonalizable, you can just use eigen.

Do you mean that you have a defective matrix (not just non-normal), and want the generalized eigenvectors (“Jordan vectors”) in addition to the ordinary eigenvectors?

The basic issue is that trying to compute the Jordan form for a defective matrix is numerically unstable — even tiny perturbations will take a defective matrix and make it diagonalizable. In general, finding an unknown Jordan form is known as “Wilkinson’s problem” and there are lots of papers about it.

If you have a matrix that is close to defective and you know the Jordan structure (the eigenvalue multiplicity) you are looking for (typically because you introduced it intentionally), however, there are accurate ways to compute the Jordan form of the “closest” defective matrix. Some of them indeed use the SVD. Recently, we looked at this problem in my own group because we had a huge sparse matrix that was close to defective (by design) and wanted the Jordan vector for the 2x2 Jordan block, so we developed a sparse algorithm. See this paper and references therein for an overview of approaches, e.g. this paper for the SVD-based approach.


Hi Steven,

Thanks for your answer. Indeed, the matrix is defective. Do you have a good reference to the Wilkinson’s problem as well? Is there at least a numerically costly solution to that?



The classic reference is Golub and Wilkinson (1976).

Why do you want the Jordan form? Usually if you have defective matrices, you want to use some other factorization.

1 Like

You are right, it does not need to be the Jordan form, any factorization which yields some eigenvectors will do.

Why do you need eigenvectors at all? (They can be deceptive for near-defective matrices.) What are you ultimately trying to do?


Ultimately, these eigenvectors will reveal the nature of a fascinating and weird quantum phenomenon (however, the Matrix is not the Hamiltonian, this is why it can be defective). Right now these eigenvectors were found by chance, but I hoped to systematize this calculation in a proper way. Therefore, it is not enough to know the eigenvalues. In the long perspective, I hoped to learn about the system by studying the geometric properties of the eigenvectors.

Once two eigenvectors become nearly parallel (nearly defective/degenerate, i.e. near “exceptional points” in physics parlance), they can give a very deceptive picture of what is happening in your system. (Trefethen has a book about this.) It is probably more informative to look at an orthonormal basis for the invariant subspace spanned by nearly degenerate eigenvectors, which can be computed stably as described in the Golub & Wilkinson article. (Our scalable Jordan chains paper finds one deterministic basis for this invariant subspace, chosen to correspond to the Jordan chain of a nearby defective matrix.)