Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.
7074 Discussions

Extended Eigensolver Routines: Strange eigenvectors

Not_Y_
Beginner
328 Views

Hello,

I am currently trying to solve the eigenproblem Av = λv where A is a complex hermitian matrix using the MKL feast implementation. For testing purposes I constructed the following example (using C++):

#include <mkl.h>
#include <iostream>
#include <vector>
#include <complex>

int main() {
	using namespace std;

	int fpm[128]{ };
	::feastinit(fpm);
	
/* A = 
0	2-i	1
2+i	0	0
1	0	0
*/

	vector<complex<double>> entries = { complex<double>(2, -1), 1, complex<double>(2, +1), 1 };
	vector<int> cols = { 2, 3, 1, 1 };
	vector<int> rows = { 1, 3, 4, 5 };

	char uplo = 'F';
	double eps = 0;
	int loop = 0;
	double emin = -4;
	double emax = 4;
	int m0 = 3;
	vector<complex<double>> eigenvectors(m0 * m0);
	vector<double> eigenvalues(m0);
	vector<double> res(m0);
	int mode = 0;
	int info = 0;
	
	zfeast_hcsrev(&uplo, &m0, reinterpret_cast<MKL_Complex16*>(&entries[0]), &rows[0], &cols[0],
				  fpm, &eps, &loop, &emin, &emax, &m0, &eigenvalues[0], reinterpret_cast<MKL_Complex16*>(&eigenvectors[0]), &mode, &res[0], &info);

}

The eigenvalues of the matrix are 0 and ±square root 6 ≈ ±2.44948.

MKL produces this exact eigenvalues. However, the eigenvectos are strange. For example, the corresponding eigenvector for +sqrt(6) is (already normalized):

1/sqrt(2), 1/sqrt(2) + i/(2*sqrt(3)), 1/(2*sqrt(3))

or alternatively

0.707106, 0.577350 + i*0.28867, 0.28867

However, MKL produces:

0.48890728596802574+i*0.51085190195141617
0.19063671173166902+i*0.61670439499553087
0.19959556369177356+i*0.20855441565187854

What's the matter with these? What am I doing wrong?

 

Thank you.

0 Kudos
0 Replies
Reply