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.