问题描述
我有一个双矩阵:
M =[ [1.0000e+00,-6.5919e-17,2.8284e-01],[ 0,1.0000e+00,2.8284e-01,-7.6328e-17],0],[-6.5919e-17,[ 2.8284e-01,-7.6328e-17,1.0000e+00]]
当我用 arma::eig_sym()
和 g++ -std=c++17 test.cpp -larmadillo
对其进行对角化时,我得到的特征向量为:
Arma EigVec :
5.0000e-01 -1.9854e-32 5.0000e-01 -5.3490e-01 4.6247e-01 1.9854e-32
-5.0000e-01 -7.3570e-17 5.0000e-01 -4.6247e-01 -5.3490e-01 7.3570e-17
0 7.0711e-01 0 0 0 7.0711e-01
0 -7.0711e-01 -5.5511e-17 5.5511e-17 1.1102e-16 7.0711e-01
5.0000e-01 -1.9854e-32 -5.0000e-01 -4.6247e-01 -5.3490e-01 1.9854e-32
-5.0000e-01 0 -5.0000e-01 -5.3490e-01 4.6247e-01 0
但是当我用 numpy.linalg.eigh
对其进行对角化时,我得到了不同的结果,尽管特征值是相同的。这是 numpy
输出:
Numpy EigVec =
+0.2483 +0.0000 +0.6621 +0.3467 +0.0000 +0.6163
+0.6621 +0.0000 +0.2483 +0.6163 +0.0000 +0.3467
+0.0000 +0.7071 +0.0000 +0.0000 +0.7071 +0.0000
+0.0000 +0.7071 +0.0000 +0.0000 +0.7071 +0.0000
+0.6621 +0.0000 +0.2483 +0.6163 +0.0000 +0.3467
+0.2483 +0.0000 +0.6621 +0.3467 +0.0000 +0.6163
非常感谢您对理解这种差异的任何帮助:)
PS:我使用的是 armadillo v10.2、numpy v1.20 和 python 3.8.5,这是我的代码:
import numpy as np
from numpy.linalg import eigh as LA
Re = [[1.0000e+00,1.0000e+00]]
H = np.array(Re)
_,H = LA(H)
print("Numpy EigVec = ")
for i in range(H.shape[0]):
for j in range(H.shape[0]):
print("{:+.4f}\t\t".format(H[i,j]),end="")
print()
#include <iostream>
#include <complex>
#include <armadillo>
#include <vector>
#define N 6
using namespace std ;
int main(){
vector<vector<double>> Re{
{1.0000e+00,2.8284e-01},{ 0,-7.6328e-17},0},{-6.5919e-17,{ 2.8284e-01,1.0000e+00}};
arma::Mat<double> H(N,N,arma::fill::zeros);
for(size_t i=0;i<N;i++){for(size_t j=0;j<N;j++){H(i,j)=Re[i][j];}}
arma::Col<double> e;
arma::eig_sym(e,H,H);
H.print("Arma EigVec : ") ;
return 0 ;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)