Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.
6622 Discussions

Generalized eigenvalue problem with non-definite symmetric matrix


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?

0 Kudos
2 Replies

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?