I have programmed a two-sided Lanczos eigensolver for non-symmetric problems where after some certain iterations a reduced non-symmetric tridiagonal eigenvalue problem is solved. However, I experience some strange problems related to this tridiagonal eigenvalue problem, namely,
+ if I use the qz solver available in MATLAB(which I guess is using INTEL MKL routines), I am getting too many negative and imaginary eigenvalues as a result. Even if I use the routines of Intel MKL in C++ by calling the 'qz' related routines, I find the values that MATLAB finds so the results are not correct, unfortunately.
+ If I use the ddgev routine from the direct Fortran 77 interface, I am getting these negative eigenvalues or imaginary pairs in the list, however find some zeros at the end of the spectrum. And the non-zero eigenvalues are the right ones, that I should find by comparing them with a reference solution of mine.
So my question is what is the reason of this important difference that qz related algorithm is screwing up all the computation but ddgev can do the jobs except that it finds some zero values?
P.S. And also by default MATLAB also computes non-symmetric generalized eigenvalue problems(or standdard ones), I guess, with the qz method since it does not find the right eigenvalues for this non-symmetric tridiagonal problem. I can provide the non-symmetric tridiagonal matrix for your tries as well if you would like to take a look closely.
When you used the QZ routines of Intel MKL in C++, which routine did you exactly call? Was it dhgeqz? Did you use the LAPACKE interface or the FORTRAN interface?
I presume you actually wanted to say dggev, instead of ddgev, which gave you the correct non-zero eigenvalues?
It will definitely helpful if you can provide your sample matrices for us to reproduce the problem. And please also show how dhgeqz and dggev are called in your code.