The best way to find the answer to this question was to experiment:
We calculated the Eigen values & vectors of two badly-conditioned matrices with MATLAB R2013b by using eig
command like eig(a,b,'qz')
. The ill-conditioned matrices were 342x342 in size.
Based on the explanations on the following link, MATLAB R2009a implemented LAPACK DGGEV for doing eig(a,b,'qz')
:
https://stackoverflow.com/questions/26808510/which-algorithm-do-dggev-or-dsygv-eigen-solvers-in-lapack-implement-is-it-qz
Therefore, we implemented DGGEV (and also DGGEVX) routines from LAPACK in our C++ code by using LAPACKE which is a "C" language wrapper for LAPACK developed by INTEL-MKL team.
The conclusion was that we got exactly the same Eigen values & vectors as MATLAB eig(a,b,'qz')
precisely.
Please note that if you use DGGEVX (expert version of DGGEV), you should turn the balancing off by using 'N'
for BALANC argument, to get exactly the same Eigen vectors as MATLAB 'qz'
algorithm.
We also checked the correctness of Eigen values & vectors by checking if they satisfy A*V-B*V*D=0
, and the coclusion was that Eigen values & vectors were correct, as the residual error was close enough to zero.