我的代码是
print numpy.linalg.eig([[1, 2, 3], [5, 4, 9], [63, 7, 5]])
输出是
(阵列([21.61455381,-9.76720959,-1.84734422]),阵列([-0.17186028,-0.14352001,0.03651047], [-0.48646994,-0.50447076,-0.8471429], [-0.85662772,0.8514172,0.53010931]]))
我正在使用一个在线特征向量计算器来验证http://www.arndt-bruenner.de/mathe/scripts/engl_eigenwert2.htm 答案如下:
实特征值:{-9.76720958880448;-1.847344216323611;21.61455380512816}
特征向量:
对于特征值-9.76720958880448: [-0.1685660264358372;-0.5925071319066865;1]
对于特征值-1.847344216323611: [0.06887346700751434;1.5980532339710003;1]
2861455116特征值: [0.20062423644695662;0.5678895584242702;1]
值显然不匹配。我哪里出错了?在
实际上,特征向量是正确的,但是表示有点混乱。如果
eig
的输出是这并不是说特征向量是[1,2,3],[4,6,-5]和[1,-3,0]。相反,这些是矩阵中的行,其列是特征向量:
所以在这个虚构的例子中,特征向量是[1,4,1],[2,6,-3]和[3,-5,0],分别对应于特征值1、2和3。注意,这些数字是我编出来的,所以它们在数学上对任何矩阵都没有意义。在
它们确实匹配(有点…)。在
这些特征向量确实彼此相同,但是来自在线计算器的特征向量并不是标准化的(尽管为了方便起见,它们可能应该是标准化的)。矩阵的特征向量可以用任何标量(一个数)来标度,并且仍然是特征向量,因此这是正确的,但是通常的惯例是使它们规范化,因为这样更方便其他操作。用MATLAB(独立源)进行快速检验,结果表明,本征值与numpy返回的特征值完全匹配。在
您将注意到numpy向量满足
norm(eigenvector)=1
的属性。如果你要规范化来自在线计算器的向量你会发现它们是匹配的。在
相关问题 更多 >
编程相关推荐