已知特征值与特征向量重构矩阵结果不符,求问题原因
特征值特征向量重构矩阵出错的排查与修正
问题出在你对特征向量的提取方式上:numpy的eig函数返回的特征向量矩阵v,每一列对应一个特征向量,而非每一行。你用v[0]和v[1]取的是矩阵的行,相当于把特征向量的方向搞反了,这才导致重构矩阵的非对角线元素符号错误。
修正方案1:调整特征向量提取方式
把原代码中提取特征向量的行改为提取列,再做外积计算:
import numpy as np from numpy.linalg import eig a = np.array([[1,2],[2,np.pi]]) w, v = eig(a) # 提取列向量作为对应特征值的特征向量 c0 = np.outer(v[:,0], v[:,0].T) c1 = np.outer(v[:,1], v[:,1].T) a_ = w[0]*c0 + w[1]*c1 print(a_)
修正方案2:利用对称矩阵特性简化重构
你的原矩阵是对称矩阵,对应的特征向量矩阵v是正交矩阵(满足v.T等于v的逆矩阵),可以直接用矩阵乘法完成重构,写法更简洁:
import numpy as np from numpy.linalg import eig a = np.array([[1,2],[2,np.pi]]) w, v = eig(a) # 对称矩阵重构公式:V @ diag(w) @ V.T a_ = v @ np.diag(w) @ v.T print(a_)
运行上述任意一种代码,得到的重构矩阵都会与原矩阵一致,解决符号错误问题。
内容的提问来源于stack exchange,提问作者Sabina Zaman
相关产品推荐
相关产品推荐

