Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.
Announcements
This community is designed for sharing of public information. Please do not share Intel or third-party confidential information here.
6587 Discussions

Extended Eigensolver Routines: Strange eigenvectors

Beginner
118 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 Replies