為尋求正交變換
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的標(biāo)準(zhǔn)形為
f
=
y
T
Λ
y
f=\boldsymbol{y}^\text{T}\boldsymbol{\Lambda y}
f=yTΛy,其中
Λ
\boldsymbol{\Lambda}
Λ為一對角陣,只需要調(diào)用numpy.linalg的eigh函數(shù)(用法見博文《對稱矩陣的對角化》),即可算得。
例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?,計(jì)算正交變換
y
=
P
T
x
\boldsymbol{y}=\boldsymbol{P}^\text{T}\boldsymbol{x}
y=PTx,及對角陣
Λ
\boldsymbol{\Lambda}
Λ,使得
f
f
f的標(biāo)準(zhǔn)形為
f
=
y
T
Λ
y
f=\boldsymbol{y}^\text{T}\boldsymbol{\Lambda y}
f=yTΛy。
import numpy as np #導(dǎo)入numpy
np.set_printoptions(precision=4, suppress=True) #設(shè)置輸出精度
A=np.array([[0,-2,2], #設(shè)置齊二次式
[0,0,2],
[0,0,0]])
symmetrization(A) #對稱化
v,P=np.linalg.eigh(A) #計(jì)算正交陣P及標(biāo)準(zhǔn)形系數(shù)
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?的各項(xiàng)系數(shù)初始化矩陣A,第6行調(diào)用函數(shù)symmetrization(A)(見博文《齊二次式二次型矩陣計(jì)算》)對稱化A。第8行調(diào)用numpy.linalg的eigh函數(shù)計(jì)算A的特征值v及正交矩陣P。運(yùn)行程序,輸出
[-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的標(biāo)準(zhǔn)形矩陣
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=
??200?010?001?
?。即二次型
f
f
f的標(biāo)準(zhǔn)形為
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,只需調(diào)用numpy.linalg的
eigvalsh(A)
\text{eigvalsh(A)}
eigvalsh(A)
該函數(shù)的參數(shù)A表示對稱陣
A
\boldsymbol{A}
A,返回
A
\boldsymbol{A}
A的
n
n
n個特征值(包含重根,按升序排列)。若所有特征值全部都是正實(shí)數(shù),則
f
f
f是正定的。若所有特征值是負(fù)實(shí)數(shù),則
f
f
f為負(fù)定的。若特征值中含有0、若干負(fù)實(shí)數(shù)、若干個正實(shí)數(shù),則
f
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 #導(dǎo)入numpy
A=np.array([[-5,4,4], #初始化A
[0,-6,0],
[0,0,-4]])
[symmetrization(A)] #對稱化A
v=np.linalg.eigvalsh(A) #計(jì)算A的特征值
print(v)
利用代碼中的注釋信息,不難理解程序代碼。運(yùn)行程序,輸出文章來源:http://www.zghlxwxcb.cn/news/detail-419159.html
[-8. -5. -2.]
由于三個特征值均為負(fù)實(shí)數(shù),故二次型
f
f
f是負(fù)定的。
寫博不易,敬請支持:
如果閱讀本文于您有所獲,敬請點(diǎn)贊、評論、收藏,謝謝大家的支持!文章來源地址http://www.zghlxwxcb.cn/news/detail-419159.html
到了這里,關(guān)于線性代數(shù)Python計(jì)算:二次型的標(biāo)準(zhǔn)形計(jì)算的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!