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

## EigenValuesVectors - two matrices/complex values

Beginner
311 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.

4 Replies
Employee
311 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

Employee
311 Views

Hi Kamil,

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

regards, Igor.

Beginner
311 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:

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.

Employee
311 Views

Hi Kamil,

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

Best regards,
Alexander