spectra
spectra copied to clipboard
Calculate eigenvalues in multiple steps?
I am trying to find the largest K
eigenvalues of a real symmetric matrix, where K
is unknown, but is such that their sum is greater than some value. I am using SymEigsSolver
.
Is there some way to calculate the largest N
eigenvalues, and then if necessary calculate the next M
largest, without starting 'from scratch' and calculating the first N + M
?
Ideally, I would like to efficiently calculate as few as possible in order to satisfy some arbitrary condition on those currently calculated.
This is related to what I call a sequential PCA: http://ieeexplore.ieee.org/abstract/document/8258403/.
The idea is actually very simple: for a matrix A
, if you have computed the largest k
eigenvalues Dk
and eigenvectors Gk
, then the (k+1)
-th eigenvalue is the largest eigenvalue of A - Gk * Dk * Gk'
. In this way you can compute the eigenvalues sequentially until your termination condition is met.
The tricky part is how to properly define the matrix operator, and how to "warm start" from previous calculations.
Hello, any news on this front? It would be nice to be able to reuse the Ritz base from the previous iteration.