Using eigs with singular matrix

42 views (last 30 days)
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?

Accepted Answer

Christine Tobler
Christine Tobler on 5 Feb 2020
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.

More Answers (0)

Categories

Find more on Linear Algebra in Help Center and File Exchange

Products


Release

R2017b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!