I'M trying to use the ippmEigenValuesVectorsLeft_m_64f and ippmEigenValuesVectorsRight_m_64f functions.
I think there is a bug (or I missunderstand) the defintion:
A*z=λ*z for the right eigenvectors z,
zH*A=λ*zH for the left eigenvectors z,
A(2x2) = 2, -2, 1, 5
ippmEigenValuesVectorsLeft_m_64f gives λ1=3, λ2=4
and eigenvectors(2x2) = -0,89, 0.71, 0.44, -0.71
ippmEigenValuesVectorsRight_m_64f gives λ1=3, λ2=4
and eigenvectors(2x2) = -0,71, -0.44, -0.71, -0.89
The test of the definition fails. It seems that the result of ippmEigenValuesVectorsLeft_m_64f are the right eigenvectors. The result of ippmEigenValuesVectorsRight_m_64f I does not match do any defintion.
z1 = -0.89, 0.44
A*z1=-2.69, 1.34 and 3*z1=-2.69, 1.34 -> defintion of right eigenvectors but result of left eigenvectors
yes, at the first glance it looks like a bug. I would recommend you to try mkl's implementation of EigenSolvers. MKL's implementation much more stable (I mean eignesolvers only in that case ) and optimize for medium and big problems.
I tried LAPACKE_dgeev. It works mostly. But for example.A(2,2) = 1,2, -2, 5. gives two (same) eigenvalues 3,3., but only one eigenvector. Is this the correct behaviour?
I've checked your issue with matlab. You are absolutely right, there is error in IPP func.
>> A=[2 -2 ;1 5]
>> [V D] = eig(A)
>> [VL D] = eig(A')
It looks like that IPP left and right vectors are just swapped. This issue wil be fixed in next release.