The matrix is banded and symmetric, and is positive definite. It's very similar to a Laplacian matrix, though it's slightly modified, signs are flipped and every value is divided by the same constant. I need to find the smallest two eigenvalues in MATLAB, without using the eig() function.
Since I know it's positive definite and symmetric, I coded Rayleigh Quotient Iteration with an initial guess for the smallest eigenvalue as 0. So, I have the smallest eigenvalue and it's respective eigenvector. However, I'm not sure what to do next.
I can't transform matrix to send the smallest eigenvalue to exactly 0, since the value for the smallest eigenvalue isn't exact. The matrix is also extremely large and sparse, so I'd like to avoid taking the inverse of the matrix since that would be expensive.
Any tips would be appreciated. Thanks!
i might be wrong, because i think my idea sounds really naive: let $\lambda_{M}$ be the largest eigenvalue of $M$. (It should be possible to get a good approximation for the greatest eigenvalue of any symmetric positive definite matrix at least by an iterative method) Let $C\geq \lambda_M$ be any constant (to compensate the fact that we have an approximation for the greatest eigenvalue only). Let $I$ be the identity matrix. Consider $N:=CI-M$ and let $\nu_M$ be the greatest eigenvalue of $N$. Let $P=N-I\nu_M$ and $\rho_M$ the greatest eigenvalue of $P$. Now $C-\rho_M$ should be the second smallest eigenvalue of $M$ and $C-\nu_M$ should be the smallest.