応用数学 ch5メモ(2次形式、対角化、固有値)#

Key Points

  • 対称行列の固有ベクトルは互いに直交する(→対角化可能)

  • 2次形式\((x, Ax)\)の標準形\(\sum_i \lambda_i x_i^{\prime 2}\)は楕円として解釈できる

  • 行列の対角化とは、楕円を回転させてその主軸(長軸と短軸)を座標軸に揃えること(主軸変換)に等しい

対称行列の固有値#

対称行列に対しては

  • 固有値も固有ベクトルもすべて実数

  • 固有ベクトルは互いに直交する

という性質を持っている。

現実世界やデータサイエンス領域での応用において固有値を求めるとき、相関行列や分散共分散行列など対称行列の固有値を求めることが多いので対称行列に対する固有値のトピックに触れておくと理解しやすい。

対称行列の固有値と固有ベクトルは実数#

定理

対称行列の固有値はすべて実数であり、対応する固有ベクトルも実数ベクトルである

証明

対称行列\(A\)の一つの固有値を\(\lambda\)、対応する固有ベクトルを\(u=\begin{pmatrix} u_1 \\ \vdots \\ u_n \end{pmatrix}\) とすると、定義より\(A u = \lambda u\)である。両辺の複素共役をとったものと合わせると次のように書くことができる。

\[ A u = \lambda u, \quad A \bar{u} = \bar{\lambda} \bar{u} \]

\(\bar{u}\)と第1式の両辺を、\(u\)と第2式の両辺をそれぞれ内積をとると

\[ \langle \bar{u}, A u \rangle = \lambda \langle \bar{u}, u \rangle , \quad \langle u, A \bar{u} \rangle = \bar{\lambda} \langle u, \bar{u} \rangle \]

となる。「正方行列\(A\)に対して \(\langle \boldsymbol{A} \boldsymbol{u}, \boldsymbol{y} \rangle= \langle \boldsymbol{u}, \boldsymbol{A}^{\top} \boldsymbol{y} \rangle\) が成り立つ」という定理と、また\(A\)は対称行列のため\(A=A^\top\)であることから、

\[ \langle \bar{u}, A u \rangle = \langle A u, \bar{u} \rangle = \langle u, A^\top \bar{u} \rangle = \langle u, A \bar{u} \rangle \]

となり、2つの式の左辺は等しいことがわかる。2つの式の辺々を差し引くと

\[\begin{split} 0 = \lambda \langle \bar{u}, u \rangle - \bar{\lambda} \langle u, \bar{u} \rangle \\ \iff (\lambda - \bar{\lambda}) \langle u, \bar{u} \rangle = 0 \end{split}\]

となる。固有ベクトルは\(0\)ではないから\(\langle u, \bar{u} \rangle = |u_1|^2 + \cdots + |u_n|^2 > 0\)であり、したがって\(\lambda = \bar{\lambda}\)であり、ゆえに\(\lambda\)は実数である。

固有ベクトルは連立1次方程式

\[ (\lambda I - A) u = 0 \]

の解であり、係数がすべて実数であるから解も実数である。

対称行列の固有ベクトルは直交する#

定理

対称行列の異なる固有値に対応する固有ベクトルは互いに直交する

証明

対称行列\(A\)の2つの異なる固有値を\(\lambda_1, \lambda_2\)、対応する固有ベクトルを\(u_1, u_2\)とする。

\[ Au_1 = \lambda_1 u_1, \quad Au_2 = \lambda_2 u_2 \]

第1式を\(u_2\)と内積をとり、第2式を\(u_1\)と内積をとると

\[ \langle u_2, A u_1 \rangle = \langle u_2, \lambda_1 u_1 \rangle , \quad \langle u_1, A u_2 \rangle = \langle u_1, \lambda_2 u_2 \rangle \]

\(A\)は対称行列なので

\[\begin{split} \begin{aligned} \langle u_2, A u_1 \rangle &= \langle A u_1, u_2 \rangle \quad (内積の左右を入れ替え) \\ &= \langle u_1, A^\top u_2 \rangle \quad (内積と転置の定理により) \\ &= \langle u_1, A u_2 \rangle \quad (Aは対称行列のためA^\top=A) \end{aligned} \end{split}\]

となる。そのため上の2つの式の辺々を差し引くと

\[\begin{split} \begin{aligned} & \langle u_2, \lambda_1 u_1 \rangle - \langle u_1, \lambda_2 u_2 \rangle = 0\\ \iff & \lambda_1 \langle u_2, u_1 \rangle - \lambda_2 \langle u_1, u_2 \rangle = 0\\ \iff & (\lambda_1 - \lambda_2) \langle u_1, u_2 \rangle = 0\\ \end{aligned} \end{split}\]

\(\lambda_1 - \lambda_2 \neq 0\)であるから、\(\langle u_1, u_2 \rangle = 0\)であり、\(u_1, u_2\)は互いに直交している

対称行列の対角化#

定理

\(n \times n\) 対称行列 \(\boldsymbol{A}\) の固有値を \(\lambda_1, \ldots, \lambda_n\) とおき、対応する固有ベクトルの正規直交系を \(\boldsymbol{u}_1, \ldots, \boldsymbol{u}_n\) とし、 \(\boldsymbol{u}_1, \ldots, \boldsymbol{u}_n\) を列とする行列を \(\boldsymbol{U}=\left(\boldsymbol{u}_1 \cdots \boldsymbol{u}_n\right)\) とすると、次式が成り立つ。

\[\begin{split} \boldsymbol{U}^{\top} \boldsymbol{A} \boldsymbol{U}=\left(\begin{array}{llll} \lambda_1 & & & \\ & \lambda_2 & & \\ & & \ddots & \\ & & & \lambda_n \end{array}\right) \end{split}\]
証明
\[\begin{split} \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} \end{split}\]

に左から\(U^\top\)をかけると得られる

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

定理

\(n \times n\) 対称行列 \(\boldsymbol{A}\) の固有値を \(\lambda_1, \ldots, \lambda_n\) 、対応する固有ベクトルの正規直交系を \(\boldsymbol{u}_1, \ldots, \boldsymbol{u}_n\) とし、 \(\boldsymbol{u}_1, \ldots, \boldsymbol{u}_n\) を列とする行列を \(\boldsymbol{U}=(\boldsymbol{u}_1 \cdots \boldsymbol{u}_n)\) とすると、次式が成り立つ。

\[\begin{split} \boldsymbol{A}= \boldsymbol{U} \left(\begin{array}{llll} \lambda_1 & & & \\ & \lambda_2 & & \\ & & \ddots & \\ & & & \lambda_n \end{array}\right) \boldsymbol{U}^{\top} \end{split}\]
証明
\[\begin{split} \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} \end{split}\]

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

2次形式の標準形#

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

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

\[\begin{split} \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} \end{split}\]

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

標準形にすると何が嬉しいのか?#

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

例えば

\[ 2 {x^{\prime}}^2 + 7 {y^{\prime}}^2 = 1 \]

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

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

となる。これは楕円の方程式と同じ形。

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

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

Hide code cell 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()
../../../_images/febdb35224e5d61e524071479b56a7e0a24cfaa478ba63093ea147d9c79462bb.png

標準形にする前の形

\[ 6 x^2 + 4xy + 3y^2 = 1 \]

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

Hide code cell 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()
../../../_images/a19f5f9a65c2901530ef7e1aa4cf5009b23d5114e8b2936175a3142d6484fc87.png

\(x= Ux'\)\(x'\)\(U\)だけ回転させたもの。あるいは\(x\)\(U^{-1}\)だけ回転させたものが\(x'\)となっている。

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

合同変換

正方行列\(A\)を正則行列\(U\)によって

\[ A' = U^\top A U \]

とする変換を 合同変換(congruence transformation) という。

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

Tip

行列の対角化とは、楕円を回転させてその主軸(長軸と短軸)を座標軸に揃えることに等しい

\(xy\)座標系を\(U\)だけ回転すると、長軸と短軸に一致する。

単位ベクトル\(e_1,e_2\)\(U = (u_1, u_2)\)で回転させると、\(Ue_1 = u_1, Ue_2 = u_2\)なので、固有ベクトル\(u_1,u_2\)は楕円の長軸と短軸(2つを合わせて 主軸 という)の方向ということ。

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

Hide code cell 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()
../../../_images/ccab7973217cf7eeae185c33228c39ef3a6151f3d7013b80707713a3fdb0430d.png

まとめ

楕円\((x, Ax) = 1\)は、\(A\)の固有ベクトル\(u_1,u_2\)がその主軸方向であり、\(u_1,u_2\)の方向をそれぞれ\(x',y'\)軸にとると、その楕円が\(\lambda_1 {x'}^2 + \lambda_2 {y'}^2 = 1\)と書ける。

このように主軸を座標軸にとった座標系で表すことを 主軸変換 とよび、そのときの固有値を 主値 と呼ぶ。

正値対称行列と正値2次形式#

2次形式と固有ベクトル・固有値#

定理

対称行列\(A\)に対して、2次形式\((x, Ax)\)を最大化する単位ベクトル\(x\)\(A\)の最大固有値に対する単位固有ベクトルであり、その最大値は行列\(A\)の最大固有値に等しい。

証明

\(x\)が単位ベクトルなら\(x'\)も単位ベクトルであり、\(\sum_{i=1}^n x_i^{\prime 2}=1\)である。また固有値を大きい順に\(\lambda_1 \geq \lambda_2 \geq \cdots \geq \lambda_n\)とおくと、次の関係が成り立つ。

\[ (\boldsymbol{x}, \boldsymbol{A} \boldsymbol{x})=\sum_{i=1}^n \lambda_i x_i^{\prime 2} \leq \sum_{i=1}^n \lambda_1 x_i^{\prime 2}=\lambda_1 \sum_{i=1}^n x_i^{\prime 2}=\lambda_1 \]

等号は\(x_1^{\prime} = 1, x_2^{\prime}= \cdots = x_n^{\prime} = 0\)の場合に成立する。

\[ x = Ux' = x_1^{\prime} u_1 + x_2^{\prime} u_2 + \cdots + x_n^{\prime} u_n \]

であるから、\(x_1^{\prime} = 1, x_2^{\prime}= \cdots = x_n^{\prime} = 0\)に対しては\(x = u_1\) すなわち最大固有値\(\lambda_1\)に対する単位固有ベクトルに等しい。

定理

対称行列\(A\)に対して、2次形式\((x, Ax)\)を最小化する単位ベクトル\(x\)\(A\)の最小固有値に対する単位固有ベクトルであり、その最小値は行列\(A\)の最小固有値に等しい。

証明

\(x\)が単位ベクトルなら\(x'\)も単位ベクトルであり、\(\sum_{i=1}^n x_i^{\prime 2}=1\)である。また固有値を大きい順に\(\lambda_1 \geq \lambda_2 \geq \cdots \geq \lambda_n\)とおくと、次の関係が成り立つ。

\[ (\boldsymbol{x}, \boldsymbol{A} \boldsymbol{x})=\sum_{i=1}^n \lambda_i x_i^{\prime 2} \geq \sum_{i=1}^n \lambda_n x_i^{\prime 2} =\lambda_n \sum_{i=1}^n x_i^{\prime 2} =\lambda_n \]

等号は\(x_1^{\prime} = x_2^{\prime} = \cdots = x_{n-1}^{\prime} = 0, x_n^{\prime} = 1\)の場合に成立する。

\[ x = Ux' = x_1^{\prime} u_1 + x_2^{\prime} u_2 + \cdots + x_n^{\prime} u_n \]

であるから、\(x_1^{\prime} = \cdots = x_{n-1}^{\prime} = 0, x_n^{\prime} = 1\)に対しては\(x = u_n\) すなわち最小固有値\(\lambda_n\)に対する単位固有ベクトルに等しい。

正定値と半正定値#

定義

固有値がすべて正の対称行列を 正定値 (または 正値対称行列 といい、固有値がすべて0または正の対称行列を 半正定値(半正値)対称行列 という。

定理

対称行列\(A\)が正定値である必要十分条件は、任意の0でないベクトル\(x\)に対して

\[ (x, Ax) > 0 \]

であること。

証明

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

\[ (x, Ax) = \lambda_1{x_1^{\prime}}^2+\cdots+\lambda_n x_n^{\prime 2} \]

で表すことができる。

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

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

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

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

\[ (x, Ax) = \lambda_1{x_1^{\prime}}^2+\cdots+\lambda_n x_n^{\prime 2} \]

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

ベクトル\(x'\)のうち任意の\(i\)番目の要素が1なら、つまり

\[ x_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) = \lambda_i > 0\) より \(\lambda_i>0\)である。

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