【发布时间】:2021-06-05 15:14:39
【问题描述】:
谈话很便宜,这是代码。
#!/usr/bin/env python
# coding=utf-8
from numpy import linalg as nlin
from numpy import dot,array
def check_eig(matrix):
eigen_values,eigen_vector_matrix=nlin.eig(test_matrix)
print('list of eigen values:','\n',eigen_values)
print('matrix of eigen vectors:','\n',eigen_vector_matrix)
for i in range(len(eigen_values)):
print('='*5)
print('current eigen value:',eigen_values[i])
print('current eigen vector:',eigen_vector_matrix[:,i])
print(dot(matrix,eigen_vector_matrix[:,i])==dot(eigen_values[i],eigen_vector_matrix[:,i]))
print('-'*5)
pass
if __name__=='__main__':
test_matrix=array([[2,4,7,3],[3,4,1,9],[2,3,6,1],[5,5,10,11]])
check_eig(test_matrix)
pass
输出是:
list of eigen values:
[19.53900138+0.j -0.67342882+0.j 2.06721372+2.80827583j
2.06721372-2.80827583j]
matrix of eigen vectors:
[[ 0.33504457+0.j -0.94360845+0.j -0.1790607 -0.21350827j
-0.1790607 +0.21350827j]
[ 0.51694078+0.j 0.23884601+0.j 0.79630803+0.j
0.79630803-0.j ]
[ 0.21990713+0.j 0.14936312+0.j -0.33955605-0.22141925j
-0.33955605+0.22141925j]
[ 0.75641141+0.j 0.17391471+0.j -0.07359501+0.34424407j
-0.07359501-0.34424407j]]
=====
current eigen value: (19.53900137643081+0j)
current eigen vector: [0.33504457+0.j 0.51694078+0.j 0.21990713+0.j 0.75641141+0.j]
[False False False False]
-----
=====
current eigen value: (-0.6734288183538105+0j)
current eigen vector: [-0.94360845+0.j 0.23884601+0.j 0.14936312+0.j 0.17391471+0.j]
[False False False False]
-----
=====
current eigen value: (2.06721372096151+2.808275832055751j)
current eigen vector: [-0.1790607 -0.21350827j 0.79630803+0.j -0.33955605-0.22141925j
-0.07359501+0.34424407j]
[False False False False]
-----
=====
current eigen value: (2.06721372096151-2.808275832055751j)
current eigen vector: [-0.1790607 +0.21350827j 0.79630803-0.j -0.33955605+0.22141925j
-0.07359501-0.34424407j]
[False False False False]
-----
这很奇怪;谁能告诉我为什么numpy.linalg.eig中的方法不满足基本方程“矩阵点特征向量=特征值点特征向量”?
【问题讨论】: