在f=xTAxf=\boldsymbol{x}^\text{T}\boldsymbol{Ax}f=xTAx中,若A=(aij)n×n\boldsymbol{A}=(a_{ij})_{n\times n}A=(aij)n×n不是对称阵,可以通过构造元素为
aij′=aij+aji2,1≤i,j≤na_{ij}'=\frac{a_{ij}+a_{ji}}{2},1\leq i,j\leq naij′=2aij+aji,1≤i,j≤n
的矩阵A′=(aij′)n×n\boldsymbol{A}'=(a_{ij}')_{n\times n}A′=(aij′)n×n,A′T=A′\boldsymbol{A}'^{\text{T}}=\boldsymbol{A}'A′T=A′,因而fff的二次型表达式
f=xTA′x.f=\boldsymbol{x}^\text{T}\boldsymbol{A}'\boldsymbol{x}.f=xTA′x.
对非对称矩阵表示的nnn元齐二次式,可以用下列定义的函数重构二次型的矩阵。
def symmetrization(A): #将矩阵A对称化
n,_=A.shape #读取阶数
for i in range(n): #对每一行
for j in range(i+1,n): #每一个非主对角元素
A[i,j]=(A[i,j]+A[j,i])/2 #A[i,j]
A[j,i]=A[i,j] #A[j,i]
第1~6行定义的symmetrization函数,对称化其参数A表示待的矩阵。第2行读取A的阶数n。第3~6行嵌套的二重for循环完成A的对称化操作:外层循环扫描A的每一行,内层循环对当前的第i行中位于主对角线以上的每一个元素A[i,j](j>i)赋值为关于主对角线对称的两个元素的算术平均值(A[i,j]+A[j,i])/2(第5行),然后用改变后的A[i,j]改写对称元素A[j,i](第6行)。循环结束,A被对称化。
例1 用Python计算齐二次式f=x2+4xy+4y2+2xz+z2+4yzf=x^2+4xy+4y^2+2xz+z^2+4yzf=x2+4xy+4y2+2xz+z2+4yz的二次型矩阵A\boldsymbol{A}A。
解:f=x2+4xy+4y2+2xz+z2+4yz=(x,y,z)(142044001)(xyz)f=x^2+4xy+4y^2+2xz+z^2+4yz=(x,y,z)\begin{pmatrix}1&4&2\\0&4&4\\0&0&1\end{pmatrix}\begin{pmatrix}x\\y\\z\end{pmatrix}f=x2+4xy+4y2+2xz+z2+4yz=(x,y,z)100440241xyz。令A=(142044001)\boldsymbol{A}=\begin{pmatrix}1&4&2\\0&4&4\\0&0&1\end{pmatrix}A=100440241,对称化A\boldsymbol{A}A即得解本例,见下列代码。
import numpy as np #导入numpy
from utility import symmetrization #导入symmetrization
A=np.array([[1,4,2], #设置初始矩阵A
[0,4,4],
[0,0,1]])
symmetrization(A) #对称化A
print(A)
结合代码中的注释信息很容易理解程序。运行程序,输出
[[1 2 1]
[2 4 2]
[1 2 1]]
即f=x2+4xy+4y2+2xz+z2+4yz=(x,y,z)(121241121)(xyz)f=x^2+4xy+4y^2+2xz+z^2+4yz=(x,y,z)\begin{pmatrix}1&2&1\\2&4&1\\1&2&1\end{pmatrix}\begin{pmatrix}x\\y\\z\end{pmatrix}f=x2+4xy+4y2+2xz+z2+4yz=(x,y,z)121242111xyz。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
代码诚可贵,原理价更高。若为AI学,读正版书好。