Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.

EigenValuesVectors - two matrices/complex values

Kamil_K_
Beginner
400 Views

Hello,

I really need to implement into C++ code calculation of EigenValues and EigenVectors using same algorithm as Matlab function:

    [V,D] = eig(A,B) produces a diagonal matrix D of generalized
    eigenvalues and a full matrix V whose columns are the corresponding
    eigenvectors so that A*V = B*V*D.

First of all, when I check at available constructors at Intel IPP documentation: https://software.intel.com/en-us/node/505270 I can't find any constructor that makes usage of complex numbers (I am interested in Ipp64fc).

Furthermore all constructors take only one matrix as an argument. Do you have any idea how can I get similar effect to Matlab eig(A,B) with usage of Intel IPP?

I am using Intel IPP 7.1.

 

 

0 Kudos
4 Replies
Jonghak_K_Intel
Employee
400 Views

Hi Kamil,

 

 Please refer this function and the example here https://software.intel.com/en-us/node/505271 for the imaginary part.

I'm afraid that IPP doesn't have an implementation to perform   [V,D] = eig(A,B) when A*V = B*V*D.

 

Thank you

0 Kudos
Igor_A_Intel
Employee
400 Views

Hi Kamil,

IPP has stopped support for ippMX domain in IPP 9.0 version. Have a look at MKL library, please.

regards, Igor.

0 Kudos
Kamil_K_
Beginner
400 Views

Thanks for answers. As you said I've resigned from using IPP in this matter and tried to switch to MKL. But still I can't find what I am looking for.

I have a Composer XE2013. And try to find eigen solver that will allow me to calculate generalized eigenvalues/eigenvectors and move eig(A,B) from Matlab to C++. I've tried to check all those algorithms from lapack95 lib but it seems all of them are using only one matrix.

https://software.intel.com/sites/products/documentation/doclib/mkl_sa/11/mkl_lapack_examples/index.htm#dsyev.htm

 All of those solves:

A*v(j) = lambda(j)*v(j)

Somewhere on mathworks I found this thread:

http://jp.mathworks.com/matlabcentral/answers/40050-generalized-eigenvalue-and-eigenvectors-differences-between-matlab-eig-a-b-and-mkl-lapack-dsygv

So it seems like someone succeeded in implementing partially what I need (but I want to use it for 4x4 matrices, not so large ones). But person in this topic wrote that he/she used "dsygv" algorithm but I can't find anything like that on the web.

Is there any option in MKL to do it for complex numbers?

   [V,D] = eig(A,B) produces a diagonal matrix D of generalized
    eigenvalues and a full matrix V whose columns are the corresponding
    eigenvectors so that A*V = B*V*D.

0 Kudos
Alexander_K_Intel3
400 Views

Hi Kamil,

Try using ?GGEV from MKL. CGGEV supports single complex, and ZGGEV - double complex.

Best regards,
Alexander
 

0 Kudos
Reply