在similar question之后,与NumPy中已知的工作解决方案相比,我在Armadillo中遇到了重现相同特征值分解的问题。下面是示例代码:
cx_mat R
R << (+4.498e+00 + 0.000e+00 * 1i) << (+9.472e-01 - 3.194e+00 * 1i) << (-3.650e-01 - 2.374e-01 * 1i) << (+2.044e+00 - 1.742e+00 * 1i) << endr
<< (+9.472e-01 + 3.194e+00 * 1i) << (+2.467e+00 + 0.000e+00 * 1i) << (+9.169e-02 - 3.091e-01 * 1i) << (+1.668e+00 + 1.085e+00 * 1i) << endr
<< (-3.650e-01 + 2.374e-01 * 1i) << (+9.169e-02 + 3.091e-01 * 1i) << (+4.215e-02 + 0.000e+00 * 1i) << (-7.394e-02 + 2.493e-01 * 1i) << endr
<< (+2.044e+00 + 1.742e+00 * 1i) << (+1.668e+00 - 1.085e+00 * 1i) << (-7.394e-02 - 2.493e-01 * 1i) << (+1.604e+00 + 0.000e+00 * 1i) << endr;
cout << R << endl;
cx_vec sigmai;
cx_mat vi;
eig_gen(sigmai, vi, R);
cout << abs(sigmai) << endl;
cout << sigmai << endl;
cout << vi << endl;
对我来说,结果是:
(+4.498e+00,+0.000e+00) (+9.472e-01,-3.194e+00) (-3.650e-01,-2.374e-01) (+2.044e+00,-1.742e+00)
(+9.472e-01,+3.194e+00) (+2.467e+00,+0.000e+00) (+9.169e-02,-3.091e-01) (+1.668e+00,+1.085e+00)
(-3.650e-01,+2.374e-01) (+9.169e-02,+3.091e-01) (+4.215e-02,+0.000e+00) (-7.394e-02,+2.493e-01)
(+2.044e+00,+1.742e+00) (+1.668e+00,-1.085e+00) (-7.394e-02,-2.493e-01) (+1.604e+00,+0.000e+00)
8.6114e+00
7.9193e-04
5.1075e-04
1.2430e-05
(+8.611e+00,+6.461e-16)
(-7.919e-04,-2.056e-16)
(+5.107e-04,+2.945e-16)
(+1.243e-05,+1.975e-19)
(+7.227e-01,+0.000e+00) (-8.313e-02,+2.617e-01) (-4.869e-01,+4.050e-01) (+3.047e-02,+1.466e-02)
(+1.522e-01,+5.132e-01) (+7.915e-01,+0.000e+00) (+2.233e-01,+1.582e-01) (-3.507e-02,+1.047e-01)
(-5.864e-02,+3.814e-02) (+3.060e-02,+9.116e-02) (+8.535e-03,-1.240e-02) (+9.928e-01,+0.000e+00)
(+3.285e-01,+2.799e-01) (-4.454e-01,+3.009e-01) (+7.237e-01,+0.000e+00) (-1.148e-02,-3.005e-02)
然后,在Python中运行相同的计算(使用NumPy)显示
R = np.matrix([ \
[ 4.498+0.j, 0.947-3.194j, -0.365-0.237j , 2.044-1.742j], \
[ 0.947+3.194j , 2.467+0.j , 0.092-0.309j, 1.668+1.085j], \
[-0.365+0.237j, 0.092+0.309j , 0.042+0.j , -0.074+0.249j], \
[ 2.044+1.742j , 1.668-1.085j, -0.074-0.249j , 1.604+0.j ] \
])
print(R)
print()
sigmai, vi = lin.eig(R)
print(np.abs(sigmai))
print()
print(sigmai)
print()
print(vi)
print()
[[ 4.498+0.j 0.947-3.194j -0.365-0.237j 2.044-1.742j]
[ 0.947+3.194j 2.467+0.j 0.092-0.309j 1.668+1.085j]
[-0.365+0.237j 0.092+0.309j 0.042+0.j -0.074+0.249j]
[ 2.044+1.742j 1.668-1.085j -0.074-0.249j 1.604+0.j ]]
[8.611e+00 9.758e-04 6.199e-04 2.093e-05]
[ 8.611e+00+2.121e-16j -9.758e-04-6.774e-17j 6.199e-04+2.675e-16j
2.093e-05-1.656e-17j]
[[ 0.723+0.j -0.095+0.237j -0.379+0.478j 0.203-0.001j]
[ 0.152+0.513j 0.726+0.j 0.342+0.081j 0.248-0.026j]
[-0.059+0.038j -0.447-0.005j 0.342-0.076j 0.82 +0.j ]
[ 0.328+0.28j -0.397+0.223j 0.618+0.j -0.462+0.103j]]
我试着检查不同的比例因子是否在起作用,因为它是一个特征向量——唉,从我所看到的,没有相关性。有趣的是,只有第一个发现的特征向量/值是相同的。此外,只有实数的值出现在相同的位置
使用以下代码进行测试后:
输出向量均为零(或接近零)。这个方法正确,我一定是把数学查错了
相关问题 更多 >
编程相关推荐