特征值与特征向量

北战南征 提交于 2019-12-06 07:11:40

 特征值分解

如果一个向量v是方阵A的特征向量,可以表示成如下形式:

 

 其中λ称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。

需要注意的是:只有方阵才能进行特征分解。

特征值分解是将一个矩阵分解成下面的形式:

其中Q是这个矩阵A的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值。

特征值的性质

设n阶矩阵A=(aij) 的特征值为λ1,λ2,...λn

  • λ1+λ2+...+λn = a11+ a22+…+ann,trail(A)=特征值的和;
  • λ1λ2… λn =|A|,特征值的乘积=A的行列式;
  • 如果A是实对称矩阵,则特征向量两两正交,任意两个向量的叉积(np.cross)等于第三个特征向量;
  • 如果A是实对称矩阵,则特征向量构成的矩阵Q有:Q的转置等于Q的逆,即 Q.T = np.linalg.inv(Q);
  • 如果A是实对称矩阵,则特征向量构成的矩阵Q单位正交阵,即np.dot(Q, Q.T) = E;

代码实现

python:

# 方阵A 此处为实对称矩阵
dataA = np.array([[0.00178, -0.00296, 0.000427],
                  [-0.00296, 0.00704, -0.00093],
                  [0.00043, -0.00093, 0.000197]])
# 求特征值和特征向量
# eigVectors矩阵的每一列为一个特征向量,且每两个特征向量的叉积等于第三个特征向量
eigVals, eigVectors = np.linalg.eig(dataA)

# eigVectors[:, 0] = np.cross(eigVectors[:, 1], eigVectors[:, 2])

# 定义特征值的对角阵
smat = np.zeros((3, 3))
smat = np.diag(eigVals)

# 根据特征值和特征向量重新计算A = QΣQ(-1)
result = np.dot(eigVectors, np.dot(smat, np.linalg.inv(eigVectors)))
print(result)
print(dataA)
# 对比两个矩阵值是否相同
print(np.allclose(dataA, result))

# eigVectors.T = eigVectors.inv()
print(np.allclose(eigVectors.T, np.linalg.inv(eigVectors)))

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!