我用numpy来计算循环矩阵的特征值和特征向量。以下是我的代码(j=1,2…6的Hji是预定义的):
>>> import numpy as np
>>> H = np.array([H1i, H2i, H3i, H4i, H5i, H6i])
>>> H
array([[ 0., 1., 0., 0., 0., 1.],
[ 1., 0., 1., 0., 0., 0.],
[ 0., 1., 0., 1., 0., 0.],
[ 0., 0., 1., 0., 1., 0.],
[ 0., 0., 0., 1., 0., 1.],
[ 1., 0., 0., 0., 1., 0.]])
>>> from numpy import linalg as LA
>>> w, v = LA.eig(H)
>>> w
array([-2., 2., 1., -1., -1., 1.])
>>> v
array([[ 0.40824829, -0.40824829, -0.57735027, 0.57732307, 0.06604706,
0.09791921],
[-0.40824829, -0.40824829, -0.28867513, -0.29351503, -0.5297411 ,
-0.4437968 ],
[ 0.40824829, -0.40824829, 0.28867513, -0.28380804, 0.46369403,
-0.54171601],
[-0.40824829, -0.40824829, 0.57735027, 0.57732307, 0.06604706,
-0.09791921],
[ 0.40824829, -0.40824829, 0.28867513, -0.29351503, -0.5297411 ,
0.4437968 ],
[-0.40824829, -0.40824829, -0.28867513, -0.28380804, 0.46369403,
0.54171601]])
特征值是正确的。但是,对于特征向量,我发现它们不是线性无关的
^{pr2}$你可以看到有非对角项(检查V[2,5]=-1.69601044e-01),这意味着它们不是线性独立向量。既然这是一个厄米矩阵,它的特征向量如何变得相互依赖?在
顺便说一下,我也用matlab来计算它,它返回正确的值
V =
0.4082 -0.2887 -0.5000 0.5000 0.2887 -0.4082
-0.4082 -0.2887 0.5000 0.5000 -0.2887 -0.4082
0.4082 0.5774 0 0 -0.5774 -0.4082
-0.4082 -0.2887 -0.5000 -0.5000 -0.2887 -0.4082
0.4082 -0.2887 0.5000 -0.5000 0.2887 -0.4082
-0.4082 0.5774 0 0 0.5774 -0.4082
D =
-2.0000 0 0 0 0 0
0 -1.0000 0 0 0 0
0 0 -1.0000 0 0 0
0 0 0 1.0000 0 0
0 0 0 0 1.0000 0
0 0 0 0 0 2.0000
^{cd1>}返回的结果完全可以。这可以从
注意,^{cd1>}的输出对应于^{cd3>}形式的输入矩阵的因子化,该形式保留了一般对角化矩阵。由于^{cd1>}将^{cd5>}视为没有特殊结构,因此返回的特征向量不应具有特殊结构,例如正交。(不要将正交性与线性独立混淆-^{cd6>}的列确实是线性独立的,因为可以通过非零
LA.det(v)
简单地验证)函数^{cd8>}知道输入矩阵是hermitian,返回一组更方便的特征向量,即正交的特征向量集。
对于厄米矩阵和对称矩阵,您应该使用另一个函数:
eigh
。在相关问题 更多 >
编程相关推荐