哈喽,鉴于上一篇博文出现问题,此处特地开一篇,我也是一脸蒙蔽。
很多博文只会求得矩阵特征分解的特征值和特征向量,而从没有进行验证,验证方法两个
1 A*v=lam*v lam是特征值
2 det(A-lam*I)=0 I是单位阵
我随机产生的矩阵求特征值发现有复数产生,为了方便,网上找了不是复数的矩阵。
错误方法复现
>>> A
array([[-1, 1, 0],
[-4, 3, 0],
[ 1, 0, 2]])
lamba,va=np.linalg.eig(A)
#the first validation
>>> np.dot(A,va)
array([[ 0. , 0.40824829, 0.40824829],
[ 0. , 0.81649658, 0.81649658],
[ 2. , -0.40824829, -0.40824829]])
>>> np.dot(np.diag(lamba),va)
array([[ 0. , 0.81649658, 0.81649658],
[ 0. , 0.81649658, 0.81649658],
[ 1. , -0.40824829, -0.40824829]])
#服不服?这是错的
#the second validation
>>> np.linalg.det(A-np.diag(lamba))
-2.0
#崩溃不
且不说上面有个特征值是重复的。
原因是加转置就正确了,公式是公式,实际操作就是不