线性代数Python计算:二次型的标准形计算

在这里插入图片描述
为寻求正交变换 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=5x126x224x32+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)

利用代码中的注释信息,不难理解程序代码。运行程序,输出

[-8. -5. -2.]

由于三个特征值均为负实数,故二次型 f f f是负定的。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
代码诚可贵,原理价更高。若为AI学,读正版书好

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值