Intel® Integrated Performance Primitives
Community support and discussions relating to developing high-performance vision, signal, security, and storage applications.

## left and right eigenvector Beginner
131 Views

Hi,

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,

My example:

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.

Example:

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

3 Replies Moderator
131 Views

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. Beginner
131 Views

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? Employee
131 Views

Hi Steffen.

I've checked your issue with matlab. You are absolutely right, there is error in IPP func.

>> A=[2 -2 ;1 5]

A =

2    -2
1     5

>> [V D] = eig(A)

V =

-0.8944    0.7071
0.4472   -0.7071

D =

3     0
0     4

>> [VL D] = eig(A')

VL =

-0.7071   -0.4472
-0.7071   -0.8944

D =

3     0
0     4

>>

It looks like that IPP left and right vectors are just swapped. This issue wil be fixed in next release. 