Using eigs with singular matrix

19 次查看(过去 30 天)
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?

采纳的回答

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

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Linear Algebra 的更多信息

产品


版本

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by