In a quantum physics calculation, I have to deal with a matrix that has a lot of eigenvalues really close to each other ($10^{-6}$ relative difference for example) and I can't manage to obtain accurate enough eigenvectors and eigenvalues. Indeed, I would like to reach machine precision and I get only $10^{-9}$ with zheev
from LAPACK both with MKL and ATLAS.
This implies that it is due to LAPACK itself and that it is possible to achieve better precision with other methods. I know that it is totally possible with my matrix since I achieve the expected precision with numpy.linalg.eigh
but I can't tell what is different between my use of LAPACK and what is done in numpy.
(I explain the comparison between the two there but my question here is different).
I wonder if there is an algorithm that is known to be efficient for really close eigenvalues. The restrictions are that I don't use really big matrices (less than 100 lines for now) that are Hermitian and I know that the eigenvalues are all comprised between 0 and 2 (both included).
I have to compute all eigenvalues and vectors with the maximum precision.