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 SLEPcand 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:

list of matrices


Below is a reproduction of all the information I could find on the subject in the documentation. I found no further link or tutorial.

part of the documentation for function EigenSystem

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.

  • $\begingroup$ Look in the "Options" section of that page, under "Method": further suboptions are shown for each of the methods vailable. Perhaps that might help you. $\endgroup$ – MarcoB Aug 1 '17 at 13:39
  • $\begingroup$ I don't think Mathematica's implementation of Arnoldi is yet capable of handling pencils, more so that the matrices are "complex and non-hermitian". $\endgroup$ – J. M.'s ennui Aug 1 '17 at 14:50
  • 1
    $\begingroup$ Something like Eigensystem[m, 1, Method->{"Arnoldi", "Shift" -> μ}]? $\endgroup$ – Carl Woll Aug 1 '17 at 15:42
  • $\begingroup$ @CarlWoll I just saw that possibility following MarcoB's comment (thx). This is only a shift right ? There is no "invert". $\endgroup$ – jrekier Aug 1 '17 at 18:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.