Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

2次形式と定値性

2次形式

変数の2次の項のみからなる式を 2次形式(quadratic form) と呼ぶ。nn変数x1,,xnx_1,\dots,x_nの2次形式は次のように書ける

f=a11x12+a22x22++annxn2+2a12x1x2+2a13x1x3++2an(n1)xnxn1f = a_{11} x_1^2+a_{22} x_2^2+\cdots+a_{n n} x_n^2+2 a_{12} x_1 x_2+2 a_{13} x_1 x_3+\cdots+2 a_{n(n-1)} x_n x_{n-1}\\

2次形式の別表記

これは次のように表すこともできる。

f=i=1nj=1naijxixjf = \sum_{i=1}^n \sum_{j=1}^n a_{i j} x_i x_j

ただし、aij=ajia_{ij} = a_{ji}とする。

例:n=2n=2の場合
f=a11x12+a22x22+2a12x1x2=a11x12+a12x1x2+a21x1x2+a22x22=i=12j=12aijxixj\begin{aligned} f &= a_{11} x_1^2 + a_{22} x_2^2 + 2 a_{12} x_1 x_2 \\ &= a_{11} x_1^2 + a_{12} x_1 x_2 + a_{21} x_1 x_2 + a_{22} x_2^2 \\ &= \sum_{i=1}^2 \sum_{j=1}^2 a_{i j} x_i x_j \end{aligned}

2次形式の行列表記

行列

A=(a11a1nan1ann),x=(x1xn)\boldsymbol{A}=\left(\begin{array}{ccc} a_{11} & \cdots & a_{1 n} \\ \vdots & \ddots & \vdots \\ a_{n 1} & \cdots & a_{n n} \end{array}\right), \quad \boldsymbol{x}=\left(\begin{array}{c} x_1 \\ \vdots \\ x_n \end{array}\right)

aij=ajia_{ij} = a_{ji}のとき、すなわちAAが対称行列のとき、2次形式は次のようなベクトルの内積として表せる

f=(x,Ax)f = ( \boldsymbol{x}, \boldsymbol{Ax} )

このときAAを2次形式ff係数行列 と呼ぶ。

f=((xy),(abbc)(xy))=((xy),(ax+bybx+cy))=x(ax+by)+y(bx+cy)=ax2+2bxy+cy2f =\left(\binom{x}{y},\left(\begin{array}{ll} a & b \\ b & c \end{array}\right)\binom{x}{y}\right) = \left(\binom{x}{y},\binom{a x+b y}{b x+c y}\right)=x(a x+b y)+y(b x+c y)=a x^2+2 b x y+c y^2

2次形式の係数は対称行列で表せる

2次形式の係数行列は対称行列で表すことができる。そのほうがシンプルになるし、対称行列で表せるという定理もある。

例えば

A=(0aa0),B=(021204140)A = \begin{pmatrix} 0 & a\\ -a & 0 \end{pmatrix} ,\quad B = \begin{pmatrix} 0 & 2 & -1\\ -2 & 0 & 4\\ 1 & -4 & 0 \end{pmatrix}

は反対称行列である。

ここで As=12(A+A)A_s = \frac{1}{2} (A + A^\top) は対称行列、Aa=12(AA)A_a = \frac{1}{2} (A - A^\top) は反対称行列となっている。

A=(a11a12a21a22)A = \begin{pmatrix} a_{11} & a_{12}\\ a_{21} & a_{22} \end{pmatrix}

とすると、その転置行列は

A=(a11a21a12a22)A^\top = \begin{pmatrix} a_{11} & a_{21}\\ a_{12} & a_{22} \end{pmatrix}

なので

A+A=(2a11a12+a21a21+a122a22)AA=(0a12a21a21a120)=(0a12a21(a12a21)0)\begin{aligned} A + A^\top &= \begin{pmatrix} 2 a_{11} & a_{12} + a_{21}\\ a_{21} + a_{12} & 2 a_{22} \end{pmatrix} \\ A - A^\top &= \begin{pmatrix} 0 & a_{12} - a_{21}\\ a_{21} - a_{12} & 0 \end{pmatrix} = \begin{pmatrix} 0 & a_{12} - a_{21}\\ - (a_{12} - a_{21}) & 0 \end{pmatrix} \end{aligned}

よって

(A+A)+(AA)=(2a11a12+a21a21+a122a22)+(0a12a21a21a120)=(2a112a122a212a22)(A + A^\top) + (A - A^\top) = \begin{pmatrix} 2 a_{11} & a_{12} + a_{21}\\ a_{21} + a_{12} & 2 a_{22} \end{pmatrix} + \begin{pmatrix} 0 & a_{12} - a_{21}\\ a_{21} - a_{12} & 0 \end{pmatrix} = \begin{pmatrix} 2 a_{11} & 2 a_{12}\\ 2 a_{21} & 2 a_{22} \end{pmatrix}
証明

1. (x,Ax)=0(x, A x) = 0ならばAAは反対称行列

xxを第ii要素が1で残りが0のベクトルとし、(x,Ax)=0(x, Ax) = 0に代入すると、aii=0a_{ii}=0となる。そのためAAの対角要素は0となることがわかる。

xxを第ii要素と第j (ji)j ~ (j \neq i)要素が1で残りが0のベクトルを代入すると、aii+aij+aji+ajj=0a_{ii} + a_{ij} + a_{ji} + a_{jj} = 0となるが、対角要素は0なのでaij+aji=0a_{ij}+a_{ji}=0すなわちaij=ajia_{ij} = -a_{ji}となり、AAは反対称行列となる。

2. AAが反対称行列なら(x,Ax)=0(x, A x) = 0

AAが反対称行列なら対角要素はゼロ(aii=0a_{ii} = 0)であるため、2次形式(x,Ax)(x, Ax)のうちxi2x_{i}^2の項はaiixi2=0a_{ii} x_{i}^2 = 0となる。

また非対角要素はaij=ajia_{ij} = -a_{ji}より、2次形式のうちxixjx_i x_jの項はaijxixj+ajixjxi=0a_{ij} x_i x_j + a_{ji} x_j x_i = 0 と打ち消し合って0になる。

以上から次の定理が導かれる

証明

反対称行列AaA_aを係数とする2次形式は0なので、

(x,Ax)=(x,(As+Aa)x)=(x,Asx)+(x,Aax)=(x,Asx)\begin{aligned} (x, Ax) &= (x, (A_s + A_a) x)\\ &= (x, A_s x) + (x, A_a x)\\ &= (x, A_s x) \\ \end{aligned}

関連する定理

転置と内積についての定理

証明
(x,Ay)=i,j=1najixiyj=j=1n(i=1najixi)yj=(Ax,y)\left(\boldsymbol{x}, \boldsymbol{A}^{\top} \boldsymbol{y}\right)=\sum_{i, j=1}^n a_{j i} x_i y_j=\sum_{j=1}^n\left(\sum_{i=1}^n a_{j i} x_i\right) y_j=(\boldsymbol{A} \boldsymbol{x}, \boldsymbol{y})

2次形式の標準形

対称行列の対角化

証明
AU=A(u1u2un)=(Au1Au2Aun)=(λ1u1λ2u2λnun)=(u1u2un)(λ1λ2λn)=U(λ1λ2λn)\begin{aligned} \boldsymbol{A} \boldsymbol{U} &= \boldsymbol{A} \begin{pmatrix} \boldsymbol{u}_1 & \boldsymbol{u}_2 & \cdots & \boldsymbol{u}_n \end{pmatrix} \\ &= \begin{pmatrix} \boldsymbol{A} \boldsymbol{u}_1 & \boldsymbol{A} \boldsymbol{u}_2 & \cdots & \boldsymbol{A} \boldsymbol{u}_n \end{pmatrix} \\ &= \begin{pmatrix} \lambda_1 \boldsymbol{u}_1 & \lambda_2 \boldsymbol{u}_2 & \cdots & \lambda_n \boldsymbol{u}_n \end{pmatrix} \\ &= \begin{pmatrix} \boldsymbol{u}_1 & \boldsymbol{u}_2 & \cdots & \boldsymbol{u}_n \end{pmatrix} \begin{pmatrix} \lambda_1 & & & \\ & \lambda_2 & & \\ & & \ddots & \\ & & & \lambda_n \end{pmatrix} \\ &= \boldsymbol{U} \begin{pmatrix} \lambda_1 & & & \\ & \lambda_2 & & \\ & & \ddots & \\ & & & \lambda_n \end{pmatrix} \end{aligned}

に左からUU^\topをかけると得られる

対称行列のスペクトル分解(固有値分解)

証明
AU=A(u1u2un)=(Au1Au2Aun)=(λ1u1λ2u2λnun)=(u1u2un)(λ1λ2λn)=U(λ1λ2λn)\begin{aligned} \boldsymbol{A} \boldsymbol{U} &= \boldsymbol{A} \begin{pmatrix} \boldsymbol{u}_1 & \boldsymbol{u}_2 & \cdots & \boldsymbol{u}_n \end{pmatrix} \\ &= \begin{pmatrix} \boldsymbol{A} \boldsymbol{u}_1 & \boldsymbol{A} \boldsymbol{u}_2 & \cdots & \boldsymbol{A} \boldsymbol{u}_n \end{pmatrix} \\ &= \begin{pmatrix} \lambda_1 \boldsymbol{u}_1 & \lambda_2 \boldsymbol{u}_2 & \cdots & \lambda_n \boldsymbol{u}_n \end{pmatrix} \\ &= \begin{pmatrix} \boldsymbol{u}_1 & \boldsymbol{u}_2 & \cdots & \boldsymbol{u}_n \end{pmatrix} \begin{pmatrix} \lambda_1 & & & \\ & \lambda_2 & & \\ & & \ddots & \\ & & & \lambda_n \end{pmatrix} \\ &= \boldsymbol{U} \begin{pmatrix} \lambda_1 & & & \\ & \lambda_2 & & \\ & & \ddots & \\ & & & \lambda_n \end{pmatrix} \end{aligned}

の両辺に右からU\boldsymbol{U}^{\top}をかけると得られる。

対称行列の分解の応用例:リッジ推定量が正則となる証明

XXnn次の実行列とする。実対称行列XXX^\top Xは非負値定符号行列であるため、

XX=PΓPX^\top X = P \Gamma P^\top

と分解可能。ここでPPは直交行列であり、Γ=diag(γ1,,γn)\Gamma = \mathrm{diag}(\gamma_1, \cdots, \gamma_n)XXX^\top Xの固有値(γ1γn0\gamma_1 \geq \cdots \geq \gamma_n \geq 0)を対角成分にもつ対角行列。

もしγn=0\gamma_n = 0ならXXX^\top Xの逆行列は存在せず、γn>0\gamma_n > 0なら逆行列は存在し、

(XX)1=(PΓP)1=PΓ1P((ABC)1=(C1B1A1)であり、Pは直交行列なのでP=P1)=Pdiag(1/γ1,,1/γn)P\begin{aligned} (X^\top X)^{-1} &= (P \Gamma P^\top)^{-1}\\ &= P \Gamma^{-1} P^\top \quad (\because (ABC)^{-1} = (C^{-1} B^{-1} A^{-1}) であり、 Pは直交行列なのでP^\top = P^{-1})\\ &= P \operatorname{diag}(1 / \gamma_1, \ldots, 1 / \gamma_n) P^\top \end{aligned}

となる。XXX^\top Xの最小固有値がγn0\gamma_n \to 0の場合、1/γn1/\gamma_n \to \inftyになり逆行列が計算できない。

一方、リッジ推定量のようにXX+λIX^\top X + \lambda Iとする(λR\lambda \in\mathbb{R})と、その逆行列は

(XX+λI)1=(PΓP+λI)1={P(Γ+λI)P}1=P(Γ+λI)1P=Pdiag[1/(γ1+λI),,1/(γn+λI)]P\begin{aligned} (X^\top X + \lambda I)^{-1} &= (P \Gamma P^\top + \lambda I)^{-1}\\ &= \{ P (\Gamma + \lambda I) P^\top \}^{-1}\\ &= P (\Gamma + \lambda I)^{-1} P^\top\\ &= P \operatorname{diag}[1 / (\gamma_1 + \lambda I), \ldots, 1 / (\gamma_n + \lambda I)] P^\top \end{aligned}

となる。こちらはγn0\gamma_n \to 0の場合であっても1/(γp+λI)1 / (\gamma_p + \lambda I)は無限大に発散することがないため、XX+λIX^\top X + \lambda Iは正則となる。

2次形式の標準形

固有ベクトルの行列UU と変数xxの線形結合を x=Ux\boldsymbol{x}' = \boldsymbol{U}^\top \boldsymbol{x} と書く。 これは左からU\boldsymbol{U}をかけてx=Ux\boldsymbol{x} = \boldsymbol{U} \boldsymbol{x}'と書くこともできる。

このとき、2次形式(x,Ax)(\boldsymbol{x}, \boldsymbol{A} \boldsymbol{x})は次のように変形できる

(x,Ax)=(Ux,AUx)=(x,UAUx)=(x,(λ1λn)x)=λ1x12+λ2x22++λnxn2\begin{aligned} (\boldsymbol{x}, \boldsymbol{A} \boldsymbol{x}) & =\left(\boldsymbol{U} \boldsymbol{x}^{\prime}, \boldsymbol{A} \boldsymbol{U} \boldsymbol{x}^{\prime}\right)=\left(\boldsymbol{x}^{\prime}, \boldsymbol{U}^{\top} \boldsymbol{A} \boldsymbol{U} \boldsymbol{x}^{\prime}\right)=\left(\boldsymbol{x}^{\prime},\left(\begin{array}{lll} \lambda_1 & & \\ & \ddots & \\ & & \lambda_n \end{array}\right) \boldsymbol{x}^{\prime}\right) \\ & =\lambda_1{x_1^{\prime}}^2+\lambda_2{x_2^{\prime}}^2+\cdots+\lambda_n x_n^{\prime 2} \end{aligned}

このような変数の2乗の線形結合を2次形式の 標準形 と呼ぶ

f=6x2+4xy+3y2f = 6 x^2 + 4xy + 3y^2

を標準形にしたいとする。ffはベクトルと行列を用いると次のように書き直すことができる。

f=((xy),(6223)(xy))f=\left(\binom{x}{y},\left(\begin{array}{ll} 6 & 2 \\ 2 & 3 \end{array}\right)\binom{x}{y}\right)

係数行列

A=(6223)A= \left(\begin{array}{ll} 6 & 2 \\ 2 & 3 \end{array}\right)

の固有値は

λIA=0    λ622λ3=0    (λ6)(λ3)4=0    λ29λ+184=0    λ29λ+14=0    (λ2)(λ7)=0\begin{aligned} & |\lambda I - A | = 0 \\ \iff & \left|\begin{array}{cc} \lambda - 6 & 2 \\ 2 & \lambda - 3 \end{array}\right| = 0 \\ \iff & (\lambda - 6)(\lambda - 3) - 4 = 0\\ \iff & \lambda^2 - 9 \lambda + 18 - 4 = 0\\ \iff & \lambda^2 - 9 \lambda + 14 = 0\\ \iff & (\lambda - 2)(\lambda - 7) = 0\\ \end{aligned}

より、λ=2,7\lambda = 2, 7となる。

f=(x,Ax)=λ1x2+λ2y2\begin{aligned} f = (\boldsymbol{x}, \boldsymbol{A} \boldsymbol{x}) & =\lambda_1 {x^{\prime}}^2 + \lambda_2{y^{\prime}}^2\\ \end{aligned}

より、ffの標準形は

f=2x2+7y2f = 2 {x^{\prime}}^2 + 7 {y^{\prime}}^2

標準形にすると何が嬉しいのか? - 標準形による主軸変換の導出

標準形はxyx'y'の項がなく2乗の項だけになっている。

例えば

2x2+7y2=12 {x^{\prime}}^2 + 7 {y^{\prime}}^2 = 1

があるとする。これを書き換えると

x2(1/2)2+y2(1/7)2=1\frac{x^{\prime 2}}{(1 / \sqrt{2})^2}+\frac{y^{\prime 2}}{(1 / \sqrt{7})^2}=1

となる。これは楕円の方程式と同じ形。ここから幾何学的な解釈が可能になる。

楕円の標準形方程式
x2a2+y2b2=1\frac{x^2}{a^2}+\frac{y^2}{b^2}=1
  • aa は 長軸半径(楕円の長い方の軸の半分)

  • bb は 短軸半径(楕円の短い方の軸の半分)

Source
import numpy as np
import matplotlib.pyplot as plt

# 楕円のパラメータ
a = 1 / np.sqrt(2)  # 長軸半径
b = 1 / np.sqrt(7)  # 短軸半径

# 楕円のプロット用データ生成
theta = np.linspace(0, 2 * np.pi, 300)
x = a * np.cos(theta)
y = b * np.sin(theta)

# 図の作成
fig, ax = plt.subplots(figsize=(4, 3))
ax.plot(x, y)

# 軸の設定
ax.axhline(0, color='black', linewidth=0.5)
ax.axvline(0, color='black', linewidth=0.5)
ax.set(
    xlabel="$x'$",
    ylabel="$y'$",
    title=r'Plot of $\frac{x^{\prime 2}}{(1 / \sqrt{2})^2}+\frac{y^{\prime 2}}{(1 / \sqrt{7})^2}=1$',
    aspect='equal'
)
ax.grid(True)

# 図を表示
plt.show()
<Figure size 400x300 with 1 Axes>

標準形にする前の形

6x2+4xy+3y2=16 x^2 + 4xy + 3y^2 = 1

も同様に楕円となっている。

Source
import numpy as np
import matplotlib.pyplot as plt

# グリッド範囲を設定
x_vals = np.linspace(-1, 1, 400)
y_vals = np.linspace(-1, 1, 400)
X, Y = np.meshgrid(x_vals, y_vals)

# 方程式 6x^2 + 4xy + 3y^2 = 1 の左辺
Z = 6 * X**2 + 4 * X * Y + 3 * Y**2 - 1

# 図の作成
fig, ax = plt.subplots(figsize=(3, 3))
ax.contour(X, Y, Z, levels=[0], colors='steelblue')  # 楕円を描画(等高線プロット)
ax.axhline(0, color='black', linewidth=0.5)
ax.axvline(0, color='black', linewidth=0.5)

# 軸の設定
ax.set(
    xlabel="$x$",
    ylabel="$y$",
    title=r"Plot of $6x^2 + 4xy + 3y^2 = 1$",
    aspect='equal'
)
ax.grid(True)

# 図を表示
plt.show()
<Figure size 300x300 with 1 Axes>

x=Uxx= Ux'xx'UUだけ回転させたもの。あるいはxxU1U^{-1}だけ回転させたものがxx'となっている。

UUは直交行列なので、回転と鏡映をあわせた写像広義回転 )である。

「合同」とは形が変わらないこと、つまり広義回転だけをすること。

xyxy座標系をUUだけ回転すると、長軸と短軸に一致する。

単位ベクトルe1,e2e_1,e_2U=(u1,u2)U = (u_1, u_2)で回転させると、Ue1=u1,Ue2=u2Ue_1 = u_1, Ue_2 = u_2なので、固有ベクトルu1,u2u_1,u_2は楕円の長軸と短軸(2つを合わせて 主軸 という)の方向ということ。

AAの固有ベクトルは、 楕円(x,Ax)=1(x, Ax) = 1の主軸方向である ということ。

Source
import matplotlib.pyplot as plt
import numpy as np

# 固有ベクトルの描画 --------------------------------------------
A = np.array([[6, 2],
              [2, 3]])
eigenvalues, eigenvectors = np.linalg.eig(A)

origin = np.array([0, 0]) # 原点
eigvec1 = eigenvectors[:, 0]  # 固有値 7 に対応する固有ベクトル
eigvec2 = eigenvectors[:, 1]  # 固有値 2 に対応する固有ベクトル

# 図の作成
fig, ax = plt.subplots(figsize=(4, 4))
ax.quiver(*origin, *eigvec1, color='r', angles='xy', scale_units='xy', scale=1, label="Eigenvector (λ=7)")
ax.quiver(*origin, *eigvec2, color='b', angles='xy', scale_units='xy', scale=1, label="Eigenvector (λ=2)")

# 楕円の描画 --------------------------------------------
# グリッド範囲を設定
x_vals = np.linspace(-1, 1, 400)
y_vals = np.linspace(-1, 1, 400)
X, Y = np.meshgrid(x_vals, y_vals)

# 方程式 6x^2 + 4xy + 3y^2 = 1 の左辺
Z = 6 * X**2 + 4 * X * Y + 3 * Y**2 - 1

# 図の作成
ax.contour(X, Y, Z, levels=[0], colors='steelblue')  # 楕円を描画(等高線プロット)

# plot全体の設定 --------------------------------------------------
ax.axhline(0, color='black', linewidth=0.5)
ax.axvline(0, color='black', linewidth=0.5)
ax.set(
    xlabel="$x$",
    ylabel="$y$",
    title="Eigenvectors of A",
    xlim=(-1, 1),
    ylim=(-1, 1),
    aspect='equal'
)
ax.legend()
ax.grid(True)

# 図を表示
plt.show()
<Figure size 400x400 with 1 Axes>

正定値と半正定値

固有値との関係

証明

2次形式(x,Ax)(x, Ax)は標準形

(x,Ax)=λ1x12++λnxn2(x, Ax) = \lambda_1{x_1^{\prime}}^2+\cdots+\lambda_n x_n^{\prime 2}

で表すことができる。

1. 固有値がすべて正 ⇒ (x,Ax)>0(x, Ax)>0

固有値λ1,,λn\lambda_1,\dots,\lambda_nがすべて正なら、任意のx0x' \neq \boldsymbol{0}に対しては(x,Ax)=λ1x12++λnxn2>0(x, Ax) = \lambda_1{x_1^{\prime}}^2+\cdots+\lambda_n x_n^{\prime 2}>0となる。 したがって任意のx=Ux0x = Ux' \neq 0に対して(x,Ax)>0(x, Ax)>0となる。

2. (x,Ax)>0(x, Ax)>0 ⇒ 固有値がすべて正

逆に任意のx0x \neq 0に対して2次形式の標準形

(x,Ax)=λ1x12++λnxn2(x, Ax) = \lambda_1{x_1^{\prime}}^2+\cdots+\lambda_n x_n^{\prime 2}

が成り立つなら、任意のx=Ux0x' = U^\top x \neq 0に対して(x,Ax)>0(x, Ax)>0となる。

ベクトルxx'のうち任意のii番目の要素が1なら、つまり

x1=x2==xi1=0,xi=1,xi+1=xi+2==xn=0x_1^{\prime}=x_2^{\prime}=\cdots=x_{i-1}^{\prime}=0, x_i^{\prime}=1, x_{i+1}^{\prime}=x_{i+2}^{\prime}=\cdots=x_n=0

とすると (x,Ax)=λi(x, Ax) = \lambda_i より λi>0\lambda_i>0である。

(「任意のx0x\neq 0に対して(x,Ax)>0(x, Ax)>0」という仮定により)任意のiiに対してこれが成り立つため、 λ1,λ2,,λn\lambda_1, \lambda_2, \ldots, \lambda_n はすべて正である。

証明

1. 固有値がすべて正 ⇒ (x,Ax)0(x, Ax) \geq 0

固有値 λ1,λ2,,λn\lambda_1, \lambda_2, \ldots, \lambda_n が正または0なら、任意のx0x' \neq \boldsymbol{0}に対して

(x,Ax)=λ1x12++λnxn20(x, Ax) = \lambda_1{x_1^{\prime}}^2+\cdots+\lambda_n x_n^{\prime 2} \geq 0

となる。 したがって任意のx=Ux0x = Ux' \neq 0に対して(x,Ax)0(x, Ax)\geq 0となる。

2. (x,Ax)0(x, Ax)\geq 0 ⇒ 固有値がすべて正

逆に任意のx0x \neq 0に対して(x,Ax)0(x, Ax)\geq 0が成り立つ場合、

x1=x2==xi1=0,xi=1,xi+1=xi+2==xn=0x_1^{\prime}=x_2^{\prime}=\cdots=x_{i-1}^{\prime}=0, x_i^{\prime}=1, x_{i+1}^{\prime}=x_{i+2}^{\prime}=\cdots=x_n=0

とすると (x,Ax)=λi(x, Ax) = \lambda_i より λi0\lambda_i \geq 0である。

任意のiiに対してこれが成り立つため、 λ1,λ2,,λn\lambda_1, \lambda_2, \ldots, \lambda_n はすべて正である。