2
$\begingroup$

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!

$\endgroup$
0
$\begingroup$

Matlab has eigs to give the largest or smallest few eigenvalues of a matrix. See the documentation. The sm option takes the matrix inverse, but the sa option does not, which might be more efficient in your case.

$\endgroup$
0
$\begingroup$

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.

$\endgroup$

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.