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.

enter image description here

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?


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.