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.

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

対称行列の固有値

対称行列に対しては

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

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

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

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

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

証明

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

Au=λu,Auˉ=λˉuˉA u = \lambda u, \quad A \bar{u} = \bar{\lambda} \bar{u}

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

uˉ,Au=λuˉ,u,u,Auˉ=λˉu,uˉ\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

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

uˉ,Au=Au,uˉ=u,Auˉ=u,Auˉ\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つの式の辺々を差し引くと

0=λuˉ,uλˉu,uˉ    (λλˉ)u,uˉ=00 = \lambda \langle \bar{u}, u \rangle - \bar{\lambda} \langle u, \bar{u} \rangle \\ \iff (\lambda - \bar{\lambda}) \langle u, \bar{u} \rangle = 0

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

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

(λIA)u=0(\lambda I - A) u = 0

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

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

証明

対称行列AAの2つの異なる固有値をλ1,λ2\lambda_1, \lambda_2、対応する固有ベクトルをu1,u2u_1, u_2とする。

Au1=λ1u1,Au2=λ2u2Au_1 = \lambda_1 u_1, \quad Au_2 = \lambda_2 u_2

第1式をu2u_2と内積をとり、第2式をu1u_1と内積をとると

u2,Au1=u2,λ1u1,u1,Au2=u1,λ2u2\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

AAは対称行列なので

u2,Au1=Au1,u2(内積の左右を入れ替え)=u1,Au2(内積と転置の定理により)=u1,Au2(Aは対称行列のためA=A)\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}

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

u2,λ1u1u1,λ2u2=0    λ1u2,u1λ2u1,u2=0    (λ1λ2)u1,u2=0\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}

λ1λ20\lambda_1 - \lambda_2 \neq 0であるから、u1,u2=0\langle u_1, u_2 \rangle = 0であり、u1,u2u_1, u_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}をかけると得られる。

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次形式の 標準形 と呼ぶ

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

標準形は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次形式

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

証明

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

(x,Ax)=i=1nλixi2i=1nλ1xi2=λ1i=1nxi2=λ1(\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

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

x=Ux=x1u1+x2u2++xnunx = Ux' = x_1^{\prime} u_1 + x_2^{\prime} u_2 + \cdots + x_n^{\prime} u_n

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

証明

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

(x,Ax)=i=1nλixi2i=1nλnxi2=λni=1nxi2=λ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

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

x=Ux=x1u1+x2u2++xnunx = Ux' = x_1^{\prime} u_1 + x_2^{\prime} u_2 + \cdots + x_n^{\prime} u_n

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

正定値と半正定値

証明

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>0(x, Ax) = \lambda_i > 0 より λ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 はすべて正である