
numpy.linalg包提供了函数
eigh(A)\text{eigh(A)}eigh(A)
计算并返回参数A表示的对称矩阵的特征值v和由特征向量经过标准正交化后构成正交矩阵P。其中返还的特征值数组v中元素按升序排列,P中的各列对应属于v中特征值的特征向量。
例1 用Python计算使得矩阵A=(22−225−4−2−45)\boldsymbol{A}=\begin{pmatrix}2&2&-2\\2&5&-4\\-2&-4&5\end{pmatrix}A=22−225−4−2−45与对角阵合同的正交矩阵P\boldsymbol{P}P。
import numpy as np #导入numpy
np.set_printoptions(precision=4, suppress=True) #设置输出精度
A=np.array([[2,2,-2], #设置矩阵A
[2,5,-4],
[-2,-4,5]])
v,P=np.linalg.eigh(A) #计算A的特征值和正交特征向量
print(v)
print(P)
print(np.matmul(np.matmul(P.T,A),P)) #验证A与对角阵合同
程序的第3~5行设置矩阵数据A。第6行调用numpy.linalg包的函数eigh,计算矩阵参数A的特征值v和正交特征向量组成的正交矩阵P。第7、8行分别输出v和P,第9行调用numpy的matmul函数计算矩阵的积PTAP\boldsymbol{P}^{\text{T}}\boldsymbol{AP}PTAP并输出。运行程序,输出
[ 1. 1. 10.]
[[-0.9314 -0.1464 -0.3333]
[ 0.1231 0.7351 -0.6667]
[-0.3426 0.6619 0.6667]]
[[ 1. -0. -0.]
[ 0. 1. 0.]
[-0. 0. 10.]]
第1行输出的是A\boldsymbol{A}A的3个特征值1,1,10。接下来输出的是正交特征向量构成的正交阵P\boldsymbol{P}P。最后输出验证了PTAP\boldsymbol{P}^{\text{T}}\boldsymbol{AP}PTAP确实为由特征值构成的对角阵(1000100010)\begin{pmatrix}1&0&0\\0&1&0\\0&0&10\end{pmatrix}1000100010。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
代码诚可贵,原理价更高。若为AI学,读正版书好。
这篇博客介绍了如何利用numpy.linalg.eigh函数计算对称矩阵的特征值和正交特征向量。通过实例展示了如何设置矩阵A,并演示了如何获取特征值和正交矩阵P,以及验证A与对角阵合同的正交矩阵P的过程。文章强调了正确理解和应用线性代数函数在数值计算中的重要性。
3369

被折叠的 条评论
为什么被折叠?



