对于以下矩阵,我尝试分别从 Numpy 和 Wolfram Alpha 获取特征值和特征向量。特征值相同,但特征向量不同。
Numpy 的结果:
In [36]: aa
Out[36]:
array([[10, 14],
[14, 20]])
In [37]: eigvals, eigvectors = np.linalg.eig(aa)
In [38]: eigvals
Out[38]: array([ 0.13393125, 29.86606875])
In [39]: eigvectors
Out[39]:
array([[-0.81741556, -0.57604844],
[ 0.57604844, -0.81741556]])
Wlfram Alpha 的结果(提示符:
((10, 14), (14, 20)), solve the eigenvalues and eigenvectors
):
如您所见,两个软件的特征值相同,但特征向量不同。特征向量不应该也一样吗?有人可以澄清吗?谢谢!
特征向量可以按比例放大或缩小,因为它们的大小无关紧要。
显示特征向量的首选方式是作为单位向量,这是 numpy 产生的。首选的原因是,如果作为列的特征向量矩阵是标准正交的,它会使源矩阵更容易对角化。
X = | -√(1/2 + 5√221/442) -√(1/2 - 5√221/442) | = | -0.8174 -0.5760 |
| √(1/2 - 5√221/442) -√(1/2 + 5√221/442) | | 0.5760 -0.8174 |
wolfram 的结果为每个特征向量选择了不同的缩放比例,最后一个元素为 1。
X = | √221/14 - 5/14 -√221/14 - 5/14 | = | 0.7047 -1.4190 |
| 1 1 | | 1.0000 1.0000 |
两个结果都是正确的,因为都可以对角化原矩阵。你可以检查这个
D = inv(X) * | 10 14 | * X = | 15 - √221 0 | = |0.1339 0.0000 |
| 14 20 | | 0 15 + √221 | |0.0000 29.8660 |
这是一个对角矩阵,其特征值在对角线元素中。
似乎 wolfram 做了一个符号操作,对于 2×2 矩阵
A = | A11 A12 |
| A21 A22 |
通过求解方程组并将最后一个坐标设置为 1 来象征性地产生特征向量。
X = | (D+A11+2*A12-A22)/(D-A11+2*A21+A22) (D-A11-2*A12+A22)/(D+A11-2*A21-A22) |
| 1 1 |
与
D = √(4*A12*A21 + (A11-A22)^2) > 0