栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

线性代数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=−2x1​x2​+2x1​x3​+2x2​x3​,计算正交变换 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=−2x1​x2​+2x1​x3​+2x2​x3​的各项系数初始化矩阵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&1end{pmatrix} PTAP=⎝⎛​−200​010​001​⎠⎞​。即二次型 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​+4x1​x2​+4x1​x3​的正定性。

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是负定的。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/980077.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号