I have two matrices, A and B, for which I want to solve the generalized eigenvalue problem Ax=lambda* Bx. In fact I only need the smallest non-zero eigenvalue. The properties of the matrices:
A is symmetric, singular with known nullity (but no a-priori known kernel), sparse
B is symmetric, singular, positive semi-definite with known kernel, sparse, even the linearly independent part is ill-conditioned
The smallest non-zero eigenvalue (due to ill-conditioning) would numerically result something like 1e-15. However, I know that the eigenvalue I am interested in is not near the round-off plateau. If I knew this value approximately, I could use
lambda = eigs(A, B, k, guess);
where k is the number of eigenvalues I request and guess is close to the smallest non-zero eigenvalue I am looking for.
Since I have no information about the guess, currently I convert A and B to full matrices and call eig on it:
lambda = eig(full(A), full(B));
However, this is very slow. Any ideas?