So I have been using Mathematica as a tool to discretise large linear systems of PDEs and cast them as algebraic eigenvalue problems involving very large sparse matrices. These are usually complex and non-hermitian.
When the system is small enough, I can use EigenSystem[{A,B}]
to get the whole spectrum. But when the system becomes very big I would usually export the resulting matrices and use some other dedicated solver like SLEPc
and MUMPS
.
I was wondering if there would be a way to skip this step and do everything within Mathematica. The systems I am dealing with are very big and so it is impractical to solve for the whole spectrum. So, one important feature I am after, is the possibility to specify a target eigenvalue around which the spectrum is computed.
In practice, this can be achieved by using the Arnoldi iterative methods. With SLEPc, I usually use the Shift-and-invert method.
Just to give your a clearer idea, here is a list and MatrixPlot
of the kind of matrices I usually deal with:
Below is a reproduction of all the information I could find on the subject in the documentation. I found no further link or tutorial.
It looks like the features I am after are either not fully released or well hidden. I would love to read any comment, suggestion you might have on that issue.
Eigensystem[m, 1, Method->{"Arnoldi", "Shift" -> μ}]
? $\endgroup$ – Carl Woll Aug 1 '17 at 15:42