I am having a problem getting the correct results when solving a generalized eigenvalue problem of the form Ax=yBx. In my small test application the A and B matrices are both 3x3 real symmetric matrices. The dfeast_sygv solver returns only two eigenvalues between -10 and 10 of -1.313409 and 1.842060, both of which are wrong. I have also tested it using dfeast_scsrgv and get the same incorrect results. My test code is attached.
The correct eigenvalues for my text case are -1.18725, -0.28274 and 1.711014. I have verified these using Matlab and also in Excel using the Matrix.xla routines. I have also checked that the equation Ax=yBx is satisfied using the returned eigenvalues and eigenvectors.
Interestingly, if I zero all the non-diagonal terms of the B matrix then dfeast_sygv returns the correct eigenvalues of -1.650985, 0.4497689 and 6.284550. This shows that the problem only occurs when there are non-zero terms away from the diagonal of the B matrix.
Am I doing something that the Feast solver isn't meant for? I am using MKL v2017.2 with the latest 2017.2 Intel Fortran compiler in VS2015.
On reading the documentation further I can see that the Feast solver is only meant for positive definite matrices, and seeing as my test problem returns some negative eigenvalues I am probably violating its capabilities.
I have switched to using a Lapack mkl routine and am getting good results with that, but is it possible to use the Feast solver somehow to solve indefinite matrices?
Thank you for your interest in Extended Eigensolver. I'm afraid there has been some misunderstanding here. Extended Eigensolver is designed for eigenvalue problems with real eigenvalues, so only B matrix must be positive definite(not B-1A as you suggested) and both matrices must be Hermitian. Output eigenvalues of the problem can be negative. In your example matrix B is not positive definite that can be checked by solving eigenvalue problem Bx=lx.
If you indeed want to solve eigenvalue problem with complex eigenvalues, can I ask in what kind of application do you plan to use it?
Thank you in advance,
Hi Irina, thanks for that clarification. Yes, my B matrix has negative eigenvalues and so that explains why it is not working with the Feast solver.
My application is in structural engineering and it calculates the buckling strength of a structural member such as a beam or column. In this application the A and B matrices are the member's elastic and geometric stiffness matrices respectively.
In my first post the example matrices were just simplified samples, but I have now attached actual A and B matrices that show what I am dealing with.
Thank you, Peter!
Couple more questions. Do you usually know in which interval to search eigenvalues or there are several max or min eigenvalues that are required to find? Is the size 40 is a typical size for your problem? If so, did you tried using MKL LAPACK functionality?
Yes, I can limit my search to an emin - emax interval. In this application the matrices can get up to size 1000. I have been using a Lapack routine successfully and so there is no urgency, but I would like to eventually switch over to the Feast solver if it can do it because I already use the Feast solver in another application that has much larger matrices that are always positive definite. Peter