为寻求正交变换
y
=
P
T
x
\boldsymbol{y}=\boldsymbol{P}^\text{T}\boldsymbol{x}
y=PTx,使得二次型
f
=
x
T
A
x
f=\boldsymbol{x}^\text{T}\boldsymbol{Ax}
f=xTAx的标准形为
f
=
y
T
Λ
y
f=\boldsymbol{y}^\text{T}\boldsymbol{\Lambda y}
f=yTΛy,其中
Λ
\boldsymbol{\Lambda}
Λ为一对角阵,只需要调用numpy.linalg的eigh函数(用法见博文《对称矩阵的对角化》),即可算得。
例1 用Python对二次型
f
=
−
2
x
1
x
2
+
2
x
1
x
3
+
2
x
2
x
3
f=-2x_1x_2+2x_1x_3+2x_2x_3
f=−2x1x2+2x1x3+2x2x3,计算正交变换
y
=
P
T
x
\boldsymbol{y}=\boldsymbol{P}^\text{T}\boldsymbol{x}
y=PTx,及对角阵
Λ
\boldsymbol{\Lambda}
Λ,使得
f
f
f的标准形为
f
=
y
T
Λ
y
f=\boldsymbol{y}^\text{T}\boldsymbol{\Lambda y}
f=yTΛy。
import numpy as np #导入numpy
np.set_printoptions(precision=4, suppress=True) #设置输出精度
A=np.array([[0,-2,2], #设置齐二次式
[0,0,2],
[0,0,0]])
symmetrization(A) #对称化
v,P=np.linalg.eigh(A) #计算正交阵P及标准形系数
print(v)
print(P)
print(np.matmul(np.matmul(P.T,A),P))
程序的第3~5行就 f = − 2 x 1 x 2 + 2 x 1 x 3 + 2 x 2 x 3 f=-2x_1x_2+2x_1x_3+2x_2x_3 f=−2x1x2+2x1x3+2x2x3的各项系数初始化矩阵A,第6行调用函数symmetrization(A)(见博文《齐二次式二次型矩阵计算》)对称化A。第8行调用numpy.linalg的eigh函数计算A的特征值v及正交矩阵P。运行程序,输出
[-2. 1. 1.]
[[-0.5774 -0.4225 0.6987]
[-0.5774 0.8163 0.0166]
[ 0.5774 0.3938 0.7152]]
[[-2. 0. 0.]
[ 0. 1. 0.]
[ 0. 0. 1.]]
第1行显示
A
\boldsymbol{A}
A的3个特征值-2,1,1。接下来的3行显示正交阵
P
\boldsymbol{P}
P,最后3行显示的是
f
f
f的标准形矩阵
P
T
A
P
=
(
−
2
0
0
0
1
0
0
0
1
)
\boldsymbol{P}^\text{T}\boldsymbol{AP}=\begin{pmatrix}-2&0&0\\0&1&0\\0&0&1\end{pmatrix}
PTAP=
−200010001
。即二次型
f
f
f的标准形为
f
=
−
2
y
1
2
+
y
2
2
+
y
3
2
f=-2y_1^2+y_2^2+y_3^2
f=−2y12+y22+y32。
为判断
n
n
n元齐二次式
f
f
f表示的二次型是否为正定,若二次型矩阵为
A
\boldsymbol{A}
A,只需调用numpy.linalg的
eigvalsh(A)
\text{eigvalsh(A)}
eigvalsh(A)
该函数的参数A表示对称阵
A
\boldsymbol{A}
A,返回
A
\boldsymbol{A}
A的
n
n
n个特征值(包含重根,按升序排列)。若所有特征值全部都是正实数,则
f
f
f是正定的。若所有特征值是负实数,则
f
f
f为负定的。若特征值中含有0、若干负实数、若干个正实数,则
f
f
f既非正定亦非负定。
例2 用Python判断齐二次式
f
=
−
5
x
1
2
−
6
x
2
2
−
4
x
3
2
+
4
x
1
x
2
+
4
x
1
x
3
f=-5x_1^2-6x_2^2-4x_3^2+4x_1x_2+4x_1x_3
f=−5x12−6x22−4x32+4x1x2+4x1x3的正定性。
import numpy as np #导入numpy
A=np.array([[-5,4,4], #初始化A
[0,-6,0],
[0,0,-4]])
[symmetrization(A)] #对称化A
v=np.linalg.eigvalsh(A) #计算A的特征值
print(v)
利用代码中的注释信息,不难理解程序代码。运行程序,输出文章来源:https://www.toymoban.com/news/detail-419159.html
[-8. -5. -2.]
由于三个特征值均为负实数,故二次型
f
f
f是负定的。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!文章来源地址https://www.toymoban.com/news/detail-419159.html
到了这里,关于线性代数Python计算:二次型的标准形计算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!