『Python数値計算ノート』ではアフィリエイトプログラムを利用して商品を紹介しています。

二次形式

≪【前の記事】ケイリー・ハミルトンの定理

二次形式

任意の $n$ 次元ベクトル $\boldsymbol{x}$ と $n\times{n}$ の正方行列 $A$ について、$\boldsymbol{x}$ と $A\boldsymbol{x}$ の内積、すなわち
\[(\boldsymbol{x}, A\boldsymbol{x})=\boldsymbol{x}^{T}A\boldsymbol{x}\tag{1}\]を二次形式といいます。内積なので、式 (1) はもちろんスカラーですが、上の表記だけ見ても式の形をイメージしにくいと思うので、$\boldsymbol{x}$ と $A$ がそれぞれ $2$ 次元ベクトルと $2\times{2}$ のときに、二次形式がどのような形になるのか見てみましょう。
\[\boldsymbol{x}=\begin{bmatrix}x_{1}\\x_{2}\end{bmatrix},\quad
A=\begin{bmatrix}a_{11}&a_{12}\\a_{21}&a_{22}\end{bmatrix}\tag{2}\]とおいて、二次形式 $\boldsymbol{x}^{T}A\boldsymbol{x}$ を計算してみると、
\[\begin{align*}\boldsymbol{x}^{T}A\boldsymbol{x}&=
\begin{bmatrix}x_{1}&x_{2}\end{bmatrix}
\begin{bmatrix}a_{11}&a_{12}\\a_{21}&a_{22}\end{bmatrix}
\begin{bmatrix}x_{1}\\x_{2}\end{bmatrix}\\[6pt]
&=a_{11}\,x_{1}^{2}+(a_{12}+a_{21})\,x_{1}x_{2}+a_{22}\,x_{2}^{2}\end{align*}\tag{3}\]となります。要するに二次式(quadratic expression)なのですが、一次の項は含まれておらず、すべて二次の項だけで構成されています。このような特別な形の二次式のことを二次形式(quadratic form)とよびます。
 
ところで、(3) をよく見ると、(3) を (1) の形で表すときの行列 $A$ の要素 $a_{12}$ と $a_{21}$ のとり方には任意性があることがわかります。たとえば、
\[A=\begin{bmatrix}a_{11}&a_{12}-1\\a_{21}+1&a_{22}\end{bmatrix}\]であっても、
\[A=\begin{bmatrix}a_{11}&0\\a_{12}+a_{21}&a_{22}\end{bmatrix}\]であっても、二次形式 $\boldsymbol{x}^{T}A\boldsymbol{x}$ は (3) になります。とはいえ、一般的に二次形式を行列で表すときには、行列 $A$ は対称行列で表します。つまり、
\[\begin{bmatrix}a_{11}&(a_{12}++a_{21})/2\\(a_{12}+a_{21})/2&a_{22}\end{bmatrix}\tag{4}\]とします。すぐ後で説明するように、二次形式を対称行列で表すと、$A$ が対角化可能な行列となるので、二次形式を楽に標準形(きれいな形の二次形式)に変換できるからです。

具体例をみてみます。二次形式
\[f(x,y)=7x^2+8xy+y^2\tag{5}\]を考えます。この式を $\boldsymbol{x}^{T}A\boldsymbol{x}$ の形に表すとき、$A$ の要素 $a_{12}$ と $a_{21}$ は $xy$ の係数 $8$ を半々に分けて、
\[A=\begin{bmatrix}7&4\\4&1\end{bmatrix}\tag{6}\]とします。すなわち、
\[f(x,y)=\begin{bmatrix}x&y\end{bmatrix}\begin{bmatrix}7&4\\4&1\end{bmatrix}
\begin{bmatrix}x\\y\end{bmatrix}\tag{7}\]となります。念のためにSymPyで検算しておきましょう。

# sympy quadratic form

# In[1]

import sympy as sp

sp.var('x y X Y')

# 対称行列A
A = sp.Matrix([[7, 4],
               [4, 1]])

# ベクトルx
x_vector = sp.Matrix([x, y])

# 二次形式
f = x_vector.T * A * x_vector
f = sp.simplify(f[0])

print(f)
# 7*x**2 + 8*x*y + y**2

二次形式の標準形

異なる変数同士のクロスタームを含まない、いわゆる「きれいな」二次形式のことを二次形式の標準形とよびます。たとえば、
\[\begin{align*}f(x,y)&=x^2+y^2\\[6pt]f(x,y,z)&=x^2+y^2+z^2\end{align*}\tag{8}\]などの二次形式は $xy,\ yz,\ xz$ などの項を一つも含んでいないので標準形です。そして、任意の二次形式は適当な変数変換によって標準形で表せることが知られています。その証明において、先ほど述べたように、$\boldsymbol{x}^{T}A\boldsymbol{x}$ の $A$ を対称行列にしておいたことが効いてきます。エルミート行列の記事で学んだように、対称行列 $A$ は、直交行列 $P$ と主対角線上に固有値を並べた対角行列 $D$ によって、$A=PDP^{T}$ と表せます。したがって、二次形式は
\[\boldsymbol{x}^{T}A\boldsymbol{x}=\boldsymbol{x}^{T}PDP^{T}\boldsymbol{x}\tag{9}\]のように書けます。$y=P^{T}\boldsymbol{x}$ のように変数変換すると、
\[\begin{align*}\boldsymbol{x}^{T}A\boldsymbol{x}&=\boldsymbol{y}^{T}D\boldsymbol{y}\\[6pt]&=\begin{bmatrix}y_1&y_2\end{bmatrix}\begin{bmatrix}d_1&0\\0&d_2\end{bmatrix}\begin{bmatrix}y_1\\y_2\end{bmatrix}\\[6pt]&=d_{1}y_{1}^2+d_{2}y_{2}^2\end{align*}\tag{10}\]となって、標準形が得られます。このような多項式の変数変換が固有値と固有ベクトルを求める問題に帰着するのは興味深いですね。

さきほど扱った二次形式 $f(x,y)=7x^2+8xy+y^2$ を標準化してみましょう。$f(x,y)$ を $\boldsymbol{x}^{T}A\boldsymbol{x}$ の形に表したときの行列 $A$ は
\[A=\begin{bmatrix}7&4\\4&1\end{bmatrix}\tag{6}\]でした。まず、$A$ の固有値 $\lambda$ を求めましょう。
\[\mathrm{det}(A-\lambda I)=(7-\lambda)(1-\lambda)\tag{11}\]なので、$\mathrm{det}(A-\lambda I)=0$ より $\lambda=-1,\ 9$ を得ます。$\lambda=-1$ に対応する固有空間は
\[\begin{align*}W_{-1}&=\left\lbrace\begin{bmatrix}x\\y\end{bmatrix}\left\lvert\:\begin{bmatrix}7&4\\4&1\end{bmatrix}\right.\begin{bmatrix}x\\y\end{bmatrix}=-\begin{bmatrix}x\\y\end{bmatrix}\right\rbrace\\[6pt]&=\left\lbrace\begin{bmatrix}x\\y\end{bmatrix}\left\lvert\:\begin{bmatrix}8&4\\4&2\end{bmatrix}\right.\begin{bmatrix}x\\y\end{bmatrix}=\begin{bmatrix}0\\0\end{bmatrix}\right\rbrace\\[6pt]&=\left\lbrace\left.\begin{bmatrix}x\\y\end{bmatrix}\:\right\rvert\:2x+y=0\right\rbrace\\[6pt]&=\left\langle\begin{bmatrix}1\\-2\end{bmatrix}\right\rangle\end{align*}\tag{12}\]同様の手順で $\lambda=9$ の固有空間を求めると、
\[W_{9}=\left\langle\begin{bmatrix}2\\1\end{bmatrix}\right\rangle\tag{13}\]となります。$\lambda=-1,\:9$ の固有ベクトルをそれぞれ正規化すると(大きさを $1$ に揃えると)
\[\boldsymbol{p}_{-1}=\frac{1}{\sqrt{5}}\begin{bmatrix}1\\-2\end{bmatrix},\quad
\boldsymbol{p}_{9}=\frac{1}{\sqrt{5}}\begin{bmatrix}2\\1\end{bmatrix}\tag{14}\]となります。これを並べて直交行列
\[P=\frac{1}{\sqrt{5}}\begin{bmatrix}1&2\\-2&1\end{bmatrix}\tag{15}\]を得ます。対角行列は固有値を主対角線上に並べて、
\[D=\begin{bmatrix}-1&0\\0&9\end{bmatrix}\tag{16}\]となります($PDP^{T}$ を計算して $A$ に一致することを確認しておいてください)。次は変数変換です。
\[\begin{align*}\boldsymbol{y}&=\begin{bmatrix}X\\Y\end{bmatrix}=P^{T}\boldsymbol{x}\\[6pt]&=\frac{1}{\sqrt{5}}\begin{bmatrix}1&2\\-2&1\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix}\\[6pt]&=\frac{1}{\sqrt{5}}\begin{bmatrix}x+2y\\-2x+y\end{bmatrix}\end{align*}\tag{17}\]とおくと、
\[\begin{align*}\boldsymbol{x}^{T}A\boldsymbol{x}&=\boldsymbol{x}^{T}PDP^{T}\boldsymbol{x}=\boldsymbol{y}^{T}D\boldsymbol{y}\\[6pt]&=\begin{bmatrix}X&Y\end{bmatrix}\begin{bmatrix}-1&0\\0&9\end{bmatrix}\begin{bmatrix}X\\Y\end{bmatrix}\\[6pt]&=-X^2+9Y^2\end{align*}\tag{18}\]のようになって、標準化できました。

Σで表した二次形式

二次形式は総和記号Σを使って表すこともできます。$2$ 変数の場合、
\[\boldsymbol{x}^{T}A\boldsymbol{x}=\sum_{j=1}^{2}\sum_{i=1}^{2}a_{ij}x_{i}x_{j}\tag{19}\]のように書けます。実際に右辺を計算して
\[a_{11}\,x_{1}^{2}+(a_{12}+a_{21})\,x_{1}x_{2}+a_{22}\,x_{2}^{2}\tag{20}\]となることを確認してください。$n$ 変数の場合も同様に
\[\boldsymbol{x}^{T}A\boldsymbol{x}=\sum_{j=1}^{n}\sum_{i=1}^{n}a_{ij}x_{i}x_{j}\tag{21}\]となります。総和形式で表された二次形式は、このあと説明する二次形式の微分を計算するときに便利です。

プログラミングのための線形代数

中古価格
¥2,296から
(2019/10/24 15:45時点)

二次形式の微分(勾配)

二次形式
\[\boldsymbol{x}^{T}A\boldsymbol{x}=\sum_{j=1}^{n}\sum_{i=1}^{n}a_{ij}x_{i}x_{j}\tag{21}\]をベクトル $\boldsymbol{x}$ で微分してみましょう。すなわち、二次形式の勾配
\[\nabla(\boldsymbol{x}^{T}A\boldsymbol{x})
=\begin{bmatrix}\frac{\partial}{\partial x_1}\\
\frac{\partial}{\partial x_2}\\
\vdots\\\frac{\partial}{\partial x_n}\end{bmatrix}
\boldsymbol{x}^{T}A\boldsymbol{x}\tag{22}\]を計算します。ただし、今は $A$ は対称行列とは限らないものとします。$k$ 番目の成分に着目すると、積の微分公式を使って
\[\frac{\partial}{\partial x_{k}}\boldsymbol{x}^{T}A\boldsymbol{x}
=\sum_{j=1}^{n}\sum_{i=1}^{n}a_{ij} \left(\frac{\partial x_{i}}{\partial x_{k}}\right)x_{j}
+\sum_{j=1}^{n}\sum_{i=1}^{n}a_{ij}x_{i}\left(\frac{\partial x_{j}}{\partial x_{k}}\right)\tag{23}\]となります。このとき、第一項の $j$ に関する総和の内側
\[\sum_{i=1}^{n}a_{ij}\left(\frac{\partial x_{i}}{\partial x_{k}}\right)x_{j}
=a_{0j}\left(\frac{\partial x_{0}}{\partial x_{k}}\right)x_{j}
+a_{1j}\left(\frac{\partial x_{1}}{\partial x_{k}}\right)x_{j}
+\cdots+a_{kj}\left(\frac{\partial x_{k}}{\partial x_{k}}\right)x_{j}
+\cdots\tag{24}\]は、$x_k$ を $x_k$ で微分する $k$ 番目の項だけが残るので、
\[\sum_{j=1}^{n}\sum_{i=1}^{n}a_{ij}\left(\frac{\partial x_{i}}{\partial x_{k}}\right)x_{j}=\sum_{j=1}^{n}a_{kj}x_{j}\tag{25}\]となります。これは $A\boldsymbol{x}$ の $k$ 番目の要素です。同様に考えると、第二項も
\[\sum_{j=1}^{n}\sum_{i=1}^{n}a_{ij}x_{i}\left(\frac{\partial x_{j}}{\partial x_{k}}\right)=\sum_{i=1}^{n}a_{ik}x_{i}\tag{26}\]のようになります。これは $A^T\boldsymbol{x}$ の $k$ 番目の要素です。したがって、一般的な二次形式の微分は
\[\nabla(\boldsymbol{x}^{T}A\boldsymbol{x})=(A+A^{T})\boldsymbol{x}\tag{27}\]となります。さらに $A$ が対称行列ならば、$A=A^T$ なので
\[\nabla(\boldsymbol{x}^{T}A\boldsymbol{x})=2A\boldsymbol{x}\tag{28}\]となります。次回記事では、二次形式を複素数空間まで拡張したエルミート形式を定義して、エルミート行列の固有値との関係性について調べます。

コメント