我试图计算一个3x3厄米矩阵的特征值和特征向量。这是我用的matlab代码
coh = [0.327064707875252 + 0.00000000000000i -0.00770057737827301 + 0.0178948268294334i -0.00368526462214552 - 0.00615056270163515i
-0.00770057737827302 - 0.0178948268294334i 0.0122797042131420 + 0.00000000000000i -0.000822583499745789 + 0.000295265015599135i
-0.00368526462214553 + 0.00615056270163516i -0.000822583499745789 - 0.000295265015599135i 0.00526291178539395 + 0.00000000000000i];
[V,D]=eig(coh);
V =
0.9979 + 0.0000i 0.0229 - 0.0580i 0.0141 + 0.0140i
-0.0243 - 0.0565i 0.9937 + 0.0000i 0.0936 + 0.0093i
-0.0114 + 0.0192i -0.0929 + 0.0104i 0.9954 + 0.0000i
% It should be real valued eigenvalue??
D =
0.3284 - 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
0.0000 + 0.0000i 0.0111 - 0.0000i 0.0000 + 0.0000i
0.0000 + 0.0000i 0.0000 + 0.0000i 0.0050 + 0.0000i
我在文献中使用matlab中的eig()函数,它说“当A是实的、对称的或复Hermitian时,满足Av=λv的e值是实的。”
为了将结果与python进行比较,我使用np.linalg.eigh公司(). 你知道吗
import numpy as np
import scipy
coh = np.array([[ 0.32706471+0.j, -0.00770058+0.01789483j,-0.00368526-0.00615056j],
[-0.00770058-0.01789483j, 0.0122797 +0.j,-0.00082258+0.00029527j],
[-0.00368526+0.00615056j, -0.00082258-0.00029527j,0.00526291+0.j]])
eigenh = np.linalg.eigh(coh)
特征值和特征值的结果 python中的向量是
%eigenvalue
0.00504925
0.0111318
0.328426
%eigenvector
(-0.01992713254631731+0.0j) (0.0623407637085597+0.0j) (-0.9978559708538679-0.0j)
(-0.07298515890572027+0.05929161455059334j) (0.3655270698873978+0.9239915820830416j) (0.02429370804648004+0.05654205684315627j)
(-0.706622215529945+0.7010318287578136j) (-0.043891589739820214-0.08256315733761976j) (0.011369094995309527-0.01915767907577206j)
matlab“eig()”和python之间有很大的区别np.linalg.eigh公司()". 我认为这不是一个正常化的问题。因为,当我对对称矩阵(不是hermitian实值)使用相同的函数时,结果是完全相同的。你知道吗
补充意见
当我检查coh矩阵(上面给出的原始输入)是否是hermitian时,matlab返回逻辑0。你知道吗
ishermitian(coh)
ans =
logical
0
但是,当我将输入矩阵四舍五入16时,matlab返回逻辑1。 *16的舍入值越高,则返回逻辑0。你知道吗
coh2 = round(coh,16)
ishermitian(coh2)
ans =
logical
1
即使我用四舍五入的输入矩阵得到实值特征值,特征向量仍然不同于python
[V2,D2]=eig(coh2);
V2 =
0.0141 + 0.0140i 0.0293 - 0.0550i 0.5093 + 0.8581i
0.0936 + 0.0093i 0.9874 + 0.1110i 0.0362 - 0.0497i
0.9954 + 0.0000i -0.0935 + 0.0000i -0.0223 + 0.0000i
D2 =
0.0050 0 0
0 0.0111 0
0 0 0.3284
如果你写
imag(D)
,你会看到本征值的虚部在1e-18的顺序。在舍入误差0以内(与特征值的大小相比)。但是因为MATLAB不知道特征值应该是实数,所以它把它们作为复数给你。你知道吗如果你知道特征值应该是实值的,只需要取它们的实部:
关于编辑后的问题:
矩阵
coh
几乎是厄米特矩阵,但并不完全是厄米特矩阵。例如,您可以这样检查:返回1.9e-15。这是一个大于
eps
的数量级,这是MATLAB不认为它是Hermitian的原因。你知道吗Python代码中输入的矩阵略有不同。如果我将这些值复制到MATLAB中,我会看到:
此代码返回0。同时
ishermitian(coh2)
返回true
。你知道吗最后,比较
coh
和coh2
的本征值,我们发现了数量级1e-8的差异:相关问题 更多 >
编程相关推荐