MathOverflow is a question and answer site for professional mathematicians. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top


I'm looking for a way to get the negative eigenspace of a large (sparse) symmetric matrix. This matrix is basically a discretized version of the operator $-\Delta + V$, $V$ negative, on some domain $[-L,L]$ with Dirichlet BC, so its spectrum consists of a few negative eigenvalues (which I want to find), and a lot of positive ones (whose distribution is roughly known).

The way I currently do it is to use the shift-invert mode of ARPACK (so Lanczos), with a negative shift and 'LM' mode (lowest magnitude). This requires me to choose a good shift: too large a shift might miss negative eigenvalues, and too small a shift leads to slow convergence. The 'LA' mode (lowest algebraic) is just not an option, it's too slow/imprecise.

Is there any better method out there?

share|cite|improve this question
LM = largest magnitude, not lowest. Not that that's likely to be your problem...just thought I'd mention it for future readers. – Jeff Aug 24 '12 at 21:30
Did you ever find a solution? I'm having a similar problem now. – Jeff Aug 24 '12 at 21:32
Unfortunately, no. I just used a well-chosen shift. – Antoine Levitt Oct 19 '12 at 22:00

If you are interested in software for doing this problem quickly, you might consider the SLEPc package which includes various sparse and parallel eigenvalue algorithms. It is quite difficult to get set up but once you do you will be able to experiment with different methods easily.

share|cite|improve this answer
I'd rather not switch environment. At the moment I'm using python with numpy/scipy. SLEPc does advise in its user manual jacobi-davidson methods, which are apparently better for finding interior eigenvalues. Pysparse provides python bindings for this, I'll try and find out if that works better. – Antoine Levitt Nov 17 '11 at 15:24

The chebyshev-davidson method is very likely the method of choice for this type of problems. Since you are interested in the negative eigenvalues, and the eigenvalues are known to be inside [-L, L], you can input the bounds [0, L] to the chebyshev filters at each davidson iteration step, so that eigenvalues in [0, L] will be mapped into [-1, 1] for damping, while the eigenvalues you are interested in will be magnified (since they are mapped outside [-1, 1]) and converged quickly. The method is an accelerated version of Lanczos, with an advantage that it requires much smaller memory than krylov methods (memory efficiency is important when the number of eigenvalues to be computed is large).

share|cite|improve this answer

Arpack with which = 'SR'?

share|cite|improve this answer
That's basically SA (when the matrix is symmetric). It's extremely slow, presumably because the positive spectrum is so large (largest eigenvalues are proportional to the inverse square of the stepsize of the grid), and it messes up the convergence. – Antoine Levitt Nov 17 '11 at 13:41

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.