numpy.linalg.eig没有找到明显的特征向量

numpy.linalg.eig does not find obvious eigen vector

我有一个矩阵 A 如下:

A
Out[34]: 
array([[1, 1, 1, 1, 0, 0, 0, 0],
       [1, 1, 1, 1, 0, 0, 0, 0],
       [1, 1, 1, 1, 0, 0, 0, 0],
       [1, 1, 1, 1, 0, 0, 0, 0],
       [0, 0, 0, 0, 1, 1, 1, 1],
       [0, 0, 0, 0, 1, 1, 1, 1],
       [0, 0, 0, 0, 1, 1, 1, 1],
       [0, 0, 0, 0, 1, 1, 1, 1]])

我想求特征值和特征向量。

考虑一个向量 x 如下:

x
Out[35]: array([4, 4, 4, 4, 0, 0, 0, 0])

这是一个特征向量,如下所示:

np.matmul(A, x) == 4 * x
Out[36]: array([ True,  True,  True,  True,  True,  True,  True,  True])
(np.matmul(A, x) == 4 * x).all()
Out[37]: True

但是,当我使用 np.linalg.eig 计算特征向量时,它不包括 x(或 x 的缩放向量)。

l, v = np.linalg.eig(A)

l
Out[40]: array([0., 4., 0., 0., 0., 4., 0., 0.])


v
Out[41]: 
array([[-8.66025404e-01,  5.00000000e-01, -2.77555756e-17,
        -2.77555756e-17,  0.00000000e+00,  0.00000000e+00,
         0.00000000e+00,  0.00000000e+00],
       [ 2.88675135e-01,  5.00000000e-01, -5.77350269e-01,
        -5.77350269e-01,  0.00000000e+00,  0.00000000e+00,
         0.00000000e+00,  0.00000000e+00],
       [ 2.88675135e-01,  5.00000000e-01,  7.88675135e-01,
        -2.11324865e-01,  0.00000000e+00,  0.00000000e+00,
         0.00000000e+00,  0.00000000e+00],
       [ 2.88675135e-01,  5.00000000e-01, -2.11324865e-01,
         7.88675135e-01,  0.00000000e+00,  0.00000000e+00,
         0.00000000e+00,  0.00000000e+00],
       [ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
         0.00000000e+00, -8.66025404e-01,  5.00000000e-01,
        -2.77555756e-17, -2.77555756e-17],
       [ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
         0.00000000e+00,  2.88675135e-01,  5.00000000e-01,
        -5.77350269e-01, -5.77350269e-01],
       [ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
         0.00000000e+00,  2.88675135e-01,  5.00000000e-01,
         7.88675135e-01, -2.11324865e-01],
       [ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
         0.00000000e+00,  2.88675135e-01,  5.00000000e-01,
        -2.11324865e-01,  7.88675135e-01]])

虽然包含特征值 4,但缺少特征向量。我错过了什么吗?

解决方法正确。如果你检查,

import numpy as np

A = np.array([[1, 1, 1, 1, 0, 0, 0, 0],
       [1, 1, 1, 1, 0, 0, 0, 0],
       [1, 1, 1, 1, 0, 0, 0, 0],
       [1, 1, 1, 1, 0, 0, 0, 0],
       [0, 0, 0, 0, 1, 1, 1, 1],
       [0, 0, 0, 0, 1, 1, 1, 1],
       [0, 0, 0, 0, 1, 1, 1, 1],
       [0, 0, 0, 0, 1, 1, 1, 1]])

l, v = np.linalg.eig(A)

print(v[:, 1])

给出 [0.5 0.5 0.5 0.5 0. 0. 0. 0. ] 这是特征向量,它是您正在寻找的向量的标量倍数。该函数给出了归一化向量,这就是为什么它都是 0.5 而不是 4。但是,它们在这种情况下是等价的。