First some context:
In the search for efficient eigensolvers for inner eigenvalues of hermitian matrices, I came across the following papers:
[1512.08135] A Thick-Restart Lanczos algorithm with polynomial filtering for Hermitian eigenvalue problems (paper describing method)
[1802.05215] The Eigenvalues Slicing Library (EVSL): Algorithms, Implementation, and Software (paper introducing a package that implements said method)
The goal of the method is to use Lanczos to find inner eigenvalues, while avoiding performing shift-and-invert, and thus avoid to perform matrix factorizations. For a given hermitian matrix A
, this is achieved by searching for eigenvalues of f(A)
where f
is a Chebyshev polynomial filter, that approaches a lorentzian centered around the target value for the wanted eigenvalues. In this way, the method only relies on multiplications of A
with vectors!
Now, the authors of the papers point out that when doing the Lanczos recursion, it is essential to performed deflation/locking, i.e. once a eigenvalue converges, it must be projected out from the matrix A
.
Now for my question:
Is there any julia package that performs this deflation step? If that were the case, we could get this new method in Julia by just implementing the polynomial filtering part (some preliminary work can be found at GitHub - pablosanjose/FilteredMatrices.jl).
As far as I am aware, KrylovKit.jl implements a Thick-Restarded, but with no deflation. As for ArnoldiMethod.jl I do not know.
Also, what is the diference between a implicitly restarded and a thick restarded Lanczos?
Thank you for your help!