I need to find the smallest eigenvalue and the corresponding eigenvector of a sparse matrix $M$ whose dimension is $\approx 10^4$.

Within Matlab enviroment, I use the command

[Evec, Eval]= eigs(M,1,'sa');

The eigenvalue I obtain, $\lambda_0$, is very reasonable, but I suspect that the corresponding eigenvector, $\vec{v}_0$, is wrong. I also suspect that this possibly wrong eigenvector comes from the fact that matrix $M$ is such that the lower part of its spectrum is quasi-degenerate, i.e. $$ \lambda_0 \approx \lambda_1\approx\lambda_2\approx \dots $$ Notice that the spectrum is quasi degenerate and not degenerate, meaning that, in any case, one has that $\lambda_0<\lambda_1<\lambda_2<\dots$.

1) Are my suspects reasonable?

2) Is this a well-known problem in Computational Science?

3) Is there a way to circumvent it, i.e. to obtain the exact eigenvector $\vec{v}_0$ associated to the smallest eigenvale $\lambda_0$ of a matrix $M$ whose lower part of the spectrum is quasi-degenerate?

Additional info: matrix $M$ represents a quantum Hamiltonian. It is symmetric but neither positive definite nor negative definite. Nevertheless, I am interested just in the lower part of its spectrum, i.e to the most negative eigenvalues.

  • 4
    $\begingroup$ Have you computed the relative difference between $Ax$ and $\lambda x$ for the returned eigenvalue $\lambda$ and eigenvector $x$? If it's small, then that $x$ is effectively an eigenvector of $A$ associated with that eigenvalue $\lambda$. When you've got multiple nearly equal eigenvalues the returned eigenvalues should span an eigenspace of dimension equal to the number of times that eigenvalue is effectively repeated. $\endgroup$ Feb 9, 2019 at 4:22
  • 1
    $\begingroup$ @BrianBorchers, thanks for your comment. The point is that, rigorously, my matrix is not degenerate, i.e., the lowest eigenvalue is unique and therefore the eigenvector should be unique as well. My fear is indeed that, due to the quasi-degeneracy of the smallest eigenvalues, the algorithm retrieves not the actual eigenvector but a fake eigenvector which belongs to the fake multidimensional eigenspace. As I said, the eigenspace should be one-dimensional. $\endgroup$
    – AndreaPaco
    Feb 9, 2019 at 10:39
  • 1
    $\begingroup$ I would do what @BrianBorchers suggests first. It might be that the vector you're finding is indeed an eigenvector if the discrete Hamiltonian. $\endgroup$
    – nicoguaro
    Feb 9, 2019 at 12:05
  • 3
    $\begingroup$ AndreaPaco; you could verify that and check the eigs calculation by doing what I suggested. The method used by eigs isn't well suited to carefully separating nearly equal eigenvalues- you might try using the LAPACK based eig() function instead to see if it can separate the eigenvalues and give you the result you want. $\endgroup$ Feb 9, 2019 at 15:00

1 Answer 1


As a first comment, I would mention that you are indeed discretizing, although not spatially, your differential equation. That happens when you choose your base, you could pick more or less elements and different kind of basis.

Regarding, your question I doubled checked Matlab's documentation and it seems to be using Lanczos algorithm. So, I would first increase the size of your Krylov subspace and see if this improves your eigenvector. Then, I would try with the number of iterations and tolerance.

This is what is suggested in the documentation:

If eigs fails to converge for a given matrix, increase the number of Lanczos basis vectors by increasing the value of 'SubspaceDimension'. As secondary options, adjusting the maximum number of iterations, 'MaxIterations', and the convergence tolerance, 'Tolerance', also can help with convergence behavior.

  • $\begingroup$ Thanks for your answer. Can you please give me a reasonable number for 'SubspaceDimension'? I don't have any ideas about it. $\approx$10 or $\approx$100 or $\approx$1000? $\endgroup$
    – AndreaPaco
    Feb 9, 2019 at 10:47
  • $\begingroup$ Moreover: which is the role of the starting Lanczos vector? I mean: should it be similar to what the output will be? I ask this question because i perform the diagonalization of several matrices $M(\alpha_j)$ where $\alpha_j$ is a real parameter which $M$ depends on. So the idea could be: use the output (i.e. the first eigenvector) of the diagonalization of matrix $M(\alpha_j)$ as input (i.e. starting Lanczos vector) for the diagonalization of the following matrix $M(\alpha_{j+1})$. Is it reasonable or is it nonsense? $\endgroup$
    – AndreaPaco
    Feb 9, 2019 at 11:16
  • $\begingroup$ @AndreaPaco, that would also help. The method is iterative so the closer your first estimate is the better. $\endgroup$
    – nicoguaro
    Feb 9, 2019 at 12:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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