我的代码是
print numpy.linalg.eig([[1, 2, 3], [5, 4, 9], [63, 7, 5]])
输出
(array([21.61455381,-9.76720959,-1.84734422]),array([[ - 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.767209588804548; -1.8473442163236111; 21.61455380512816}
特征向量:
for Eigenvalue -9.767209588804548: [-0.1685660264358372; -0.5925071319066865; 1]
for Eigenvalue -1.8473442163236111: [0.06887346700751434; -1.5980532339710003; 1]
for Eigenvalue 21.61455380512816: [0.20062423644695662; 0.5678895584242702; 1]
这些价值显然不匹配。我哪里错了?
答案 0 :(得分:1)
他们匹配(有点......)。
这些特征向量确实彼此相同,但来自在线计算器的那些特征向量未被标准化(尽管它们可能应该是为了方便起见)。矩阵的特征向量可以通过任何标量(数字)进行缩放,并且仍然是特征向量,因此这不是不正确的,但是惯例通常是使它们保持标准化,因为它对于其他操作更方便。使用MATLAB(独立源)进行快速检查表明,匹配的特征值与numpy返回的特征值完全匹配。
你会注意到numpy向量满足norm(eigenvector)=1
的属性。如果你要对在线计算器中的向量进行标准化,那么
eigenvector <- eigenvector/norm(eigenvector)
你会发现它们匹配。
答案 1 :(得分:0)
实际上,本征向量是正确的,但是表示有些混乱。如果eig
的输出是
(array([[1,2,3]),array([[1,2,3],[4,6,-5],[1,-3,0]]))
并不是说特征向量是[1、2、3],[4、6,-5]和[1,-3、0]。而是矩阵中的行,其列是特征向量:
[1 2 3]
[4 6 -5]
[1 -3 0]
因此,在此虚构示例中,特征向量将为[1,4,1],[2,6,-3]和[3,-5,0],对应于特征值1、2和3,分别。请注意,我是将这些数字组成的,因此它们在数学上对任何矩阵都没有意义。