# Smallest non-zero eigenvalue for a generalized eigenvalue problem

11 Ansichten (letzte 30 Tage)
Zoltán Csáti am 27 Apr. 2018
Beantwortet: Andrew Knyazev am 12 Aug. 2018
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?
##### 0 Kommentare-2 ältere Kommentare anzeigen-2 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

### Akzeptierte Antwort

Andrew Knyazev am 12 Aug. 2018
Since both matrices A and B are singular, it is not an easy problem numerically. Even eig(full(A), full(B)) may give you wrong answers. EIGS in the call eigs(A, B, k, guess) is not probably going to work, since it relies on computing the inverse of the matrix A - guess B, which is singular in your case.
If the kernel of B is a subset of the kernel of A, and the difference in dimensions is not too large, you may want to try https://www.mathworks.com/matlabcentral/fileexchange/48-lobpcg-m with the constraint blockVectorY being the set of vectors spanning the known kernel of B. LOBPCG gives you k smallest, no matter zeros, or not, however, so you may need to choose k large enough to get to where you need. The value of k in LOBPCG is the number of the linearly independent initial approximate eigenvectors. If k is too large, relative to the matrix size, it will not work well...
##### 0 Kommentare-2 ältere Kommentare anzeigen-2 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

### Kategorien

Mehr zu Linear Algebra finden Sie in Help Center und File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by