MATLAB: Using eigs with singular matrix

eigenvalueseigenvectorseigsMATLAB

I want to calculate the eigenvector corresponding to the 0 eigenvalue of a large, sparse singular matrix. However, if I try eigs(A,1,'smallestabs'), MATLAB has an issue due to it being singular. For smaller matrices, eig works fine, but I need something that will owrk with larger matrices. Is there any way I can get eigs to work with this?

Best Answer

The 'smallestabs' option in eigs depends on solving several linear systems with the matrix A that's being passed in. If A is singular, that's not possible.
The best option is probably to instead pass in a very small sigma: eigs(A, 1, sigma). For example, you could set sigma=1e-2, this depends on A. Now eigs will compute the eigenvalue closest to sigma by solving several linear systems with the matrix A - sigma*speye(size(A)). You might need to adjust sigma:
  • Increase sigma if an error or warning about the matrix being close to singular is displayed.
  • Decrease sigma if the returned eigenvalue is too far away from zero (some small round-off error is to be expected).
To decrease the risk of having to call eigs again with a different sigma, you could compute several eigenvalues and choose the one closest to zero.
On a different not, instead of changing the way you're calling eigs, since you're looking for the eigenvalue zero you could also call svds with the 'smallest' option, because a singular vector with singular value zero is also an eigenvector with eigenvalue zero.