数学内核库和LAPACK之间的结果不同

时间:2018-04-18 04:39:12

标签: python numpy linear-algebra intel-mkl

我编写了将矩阵对角化的代码,如下所示

[[0,-2,-2,0]

[-2,0,0,-2]

[-2,0,0,-2]

[0,-2,-2,0]]

我的带有数学内核库(MKL)的C代码会产生以下结果:

Eigenvalue : -4 0   0   4   

Eigenvector Matrix :
0.5 0.5 -0.5 0.5    
0.5 -0.5    -0.5    -0.5    
0.5 0.5 0.5 -0.5    
0.5 -0.5    0.5 0.5 

用python编写的相同代码使用numpy显示以下结果:

Eigenvalue : -4 0   0 4 

Eigenvector Matrix :
0.5 0.707107    0           -0.5    
0.5 0           0.707107    0.5 
0.5 0           -0.707107   0.5 
0.5 -0.707107   0           -0.5    

简而言之,我观察到相同的特征值集,但mkl和numpy之间的特征向量不同。 Mathematica支持python的结果,但mkl结果也满足正交性,并通过特征值对角矩阵的相似变换重建原始矩阵。

我使用的mkl中的对角化例程如下:

LAPACKE_dsyev(LAPACK_COL_MAJOR,'V','U',dim,&evec[0],dim,&eval[0]);

在python中,我使用了

eigval,eigvec = np.linalg.eigh(H)

有什么问题?

0 个答案:

没有答案