在
f
=
x
T
A
x
f=\boldsymbol{x}^\text{T}\boldsymbol{Ax}
f=xTAx中,若
A
=
(
a
i
j
)
n
×
n
\boldsymbol{A}=(a_{ij})_{n\times n}
A=(aij)n×n不是对称阵,可以通过构造元素为
a
i
j
′
=
a
i
j
+
a
j
i
2
,
1
≤
i
,
j
≤
n
a_{ij}'=\frac{a_{ij}+a_{ji}}{2},1\leq i,j\leq n
aij′=2aij+aji,1≤i,j≤n
的矩阵
A
′
=
(
a
i
j
′
)
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′,因而
f
f
f的二次型表达式
f
=
x
T
A
′
x
.
f=\boldsymbol{x}^\text{T}\boldsymbol{A}'\boldsymbol{x}.
f=xTA′x.
对非对称矩阵表示的
n
n
n元齐二次式,可以用下列定义的函数重构二次型的矩阵。
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
=
x
2
+
4
x
y
+
4
y
2
+
2
x
z
+
z
2
+
4
y
z
f=x^2+4xy+4y^2+2xz+z^2+4yz
f=x2+4xy+4y2+2xz+z2+4yz的二次型矩阵
A
\boldsymbol{A}
A。
解:
f
=
x
2
+
4
x
y
+
4
y
2
+
2
x
z
+
z
2
+
4
y
z
=
(
x
,
y
,
z
)
(
1
4
2
0
4
4
0
0
1
)
(
x
y
z
)
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)
100440241
xyz
。令
A
=
(
1
4
2
0
4
4
0
0
1
)
\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
=
x
2
+
4
x
y
+
4
y
2
+
2
x
z
+
z
2
+
4
y
z
=
(
x
,
y
,
z
)
(
1
2
1
2
4
1
1
2
1
)
(
x
y
z
)
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)
121242111
xyz
。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
代码诚可贵,原理价更高。若为AI学,读正版书好。