Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.
Announcements
FPGA community forums and blogs on community.intel.com are migrating to the new Altera Community and are read-only. For urgent support needs during this transition, please visit the FPGA Design Resources page or contact an Altera Authorized Distributor.

left and right eigenvector

steffenroeber
Beginner
670 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

0 Kudos
3 Replies
Gennady_F_Intel
Moderator
670 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.

0 Kudos
steffenroeber
Beginner
670 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?

0 Kudos
Andrey_B_Intel
Employee
670 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.

 

0 Kudos
Reply