I am diagonalizing a sparse matrix of size $153600\times 153600$ via eigsh
function. I did not set the tolerance to specific value, so it would be the default value about $2\times 10^{-16}$. However, if I run the same code 3 times, the difference between eigenvalues are much bigger (about $6 \times 10^{-8}$) than this!
The eigenvalues for 3 trials are shown in the below figure. The real eigenvalue is $10^{-3}$ times the displayed one.
Question 1. Why the tolerance is not satisfied?
Question 2. How can I improve tolerance? Does it work if I just set the tol
value smaller than machine epsilon? (I am worried that numpy module does not support high precision computation than machine epsilon.)
Question 3. The documentation for eigsh
states that the iterative algorithm stops when eigenvalues reach within the tolerance limit. However, I think eigenvectors have a larger discrepancy for each trials than eigenvalues. Can I control the errors for eigenvectors?