I need to compute the 5 lowest real eigenvalues and corresponding eigenvectors for a generalized eigenvalue problem A*u=lambda*B*u. Both A and B are real symmetric matrices. A is positive definite but B is not positive definite.
I can use dggev but dggev computes ALL the eigenvalues and eigenvectors assuming A and B are not symmetric, which I think it is not efficient because (a) I need onl 5 eignevalues/eigenvectors and (b) my matrices ARE symmetric.
Since B is not positive definite, I cannot use sygvx.
I want to use MKL!
What can I do?
Hi Ever B.,
You can solve the problem mu*A*u=B*u and then find lambda=1/mu. sygvx is applicable for this problem. Of course, you'll have to find 5 biggest eigenvalues. Of course, possibility of mu to be equal to 0 should be considred separately.
Solving the adjunct problem as Victor suggested sounds like a great idea, but I cannot get it to work. I use this call:
[fortran]call dsygvx(1, 'V', 'A', 'U', n, B, n, A, n, vl, vu, 1, n, abstol, m, Lambda, Z, n, work, lwork, iwork, ifail, info)[/fortran]
Notice I reversed A and B to solve the adjunt problem. I am sure the matrix B is +definite, which is confirmed by info not giving a lack of +definiteness error. The smalles test problem I can devise has n=64 but I want to use this for N>10,000. I do 1/Lambda to get the eigenvalues of the original problem. I get 63 converged, of which one is infinite, 61 give the same large unreasonable value, and only one, #63, has a resonable but not correct value. I have to say that I have solved the original problem for the 5 lowest eigenvalues with an iterative algorithm that I coded myself but it is not efficient. I want to use MKL. What can I try now? Is there any iterative algorithm in MKL?