numpy.linalg包提供了函数
eigh(A)
\text{eigh(A)}
eigh(A)
计算并返回参数A表示的对称矩阵的特征值v和由特征向量经过标准正交化后构成正交矩阵P。其中返还的特征值数组v中元素按升序排列,P中的各列对应属于v中特征值的特征向量。
例1 用Python计算使得矩阵
A
=
(
2
2
−
2
2
5
−
4
−
2
−
4
5
)
\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函数计算矩阵的积 P T A P \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。最后输出验证了
P
T
A
P
\boldsymbol{P}^{\text{T}}\boldsymbol{AP}
PTAP确实为由特征值构成的对角阵
(
1
0
0
0
1
0
0
0
10
)
\begin{pmatrix}1&0&0\\0&1&0\\0&0&10\end{pmatrix}
1000100010
。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
代码诚可贵,原理价更高。若为AI学,读正版书好。