固有値と固有ベクトル#

\[ % 太字のalias \newcommand{\b}[1]{\boldsymbol{#1}} \]

行列の対角化#

\(p\)次正方行列\(A\)について、

\[\begin{split} P^{-1} A P = \Lambda = \begin{pmatrix} \lambda_1 & 0 & 0 & 0\\ 0 & \lambda_2 & 0 & 0\\ 0 & 0 & \ddots & 0\\ 0 & 0 & 0 & \lambda_p \end{pmatrix} \end{split}\]

となるような(\(P^{-1} A P\)が対角行列となるような)正則行列\(P\)と対角行列\(\Lambda\)を求めることを\(A\)対角化という。そしてこのような\(P\)\(\Lambda\)が存在するとき、\(A\)対角化可能という。

対角化できると何が嬉しいか

例:\(n\)乗の計算がラクになる

\[\begin{split} \begin{align} (P^{-1} A P)^n &= (P^{-1} A \underbrace{ P) (P^{-1} }_{I} A P) \cdots (P^{-1} A P)\\ &= P^{-1} A^n P \end{align} \end{split}\]

なので

\[\begin{split} \begin{align} A^n &= P (P^{-1} A P)^n P^{-1}\\ &= P \Lambda^n P^{-1}\\ &= P \begin{pmatrix} \lambda_1^n & 0 & 0 & 0\\ 0 & \lambda_2^n & 0 & 0\\ 0 & 0 & \ddots & 0\\ 0 & 0 & 0 & \lambda_p^n \end{pmatrix} P^{-1} \end{align} \end{split}\]

となる。この\(\Lambda\)は固有値を求めることで得られる。

(参考:【大学数学】線形代数入門⑬(対角化:重解がない場合)【線形代数】 - YouTube

固有値#

定義#

\(n\)次の正方行列\(A\)に対して

\[ A \b{x} = \lambda \b{x} \]

が成り立つとき、スカラー\(\lambda\)\(A\)固有値(eigenvalue)といい、 \(n\)次元ベクトル\(\b{x} (\neq \b{o})\)\(A\)\(\lambda\)に対応する固有ベクトル(eigenvector)と呼ぶ。

固有方程式#

上の式は

\[ (A - \lambda I) \b{x} = \b{o} \]

と表すことができる(もちろん\((\lambda I - A) \b{x} = \b{o}\)も可)

\(\b{x} \neq \b{o}\)であるためには

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

でなければならない。この式を 固有方程式 あるいは 特性方程式 と呼び、固有値は固有方程式の解として求める。

固有多項式(特性多項式)#

\(n\)次正方行列\(A\)に対し、

\[\begin{split} \phi_A(\lambda) = \det( A - \lambda I) = \det\left(\begin{array}{cccc} a_{11}-\lambda & a_{12} & \cdots & a_{1 n} \\ a_{21} & a_{22}-\lambda & \cdots & a_{2 n} \\ \vdots & & \ddots & \vdots \\ a_{n 1} & \cdots & \cdots & a_{n n}-\lambda \end{array}\right) \end{split}\]

で定義される変数\(t\)についての多項式\(\phi_A(\lambda)\)を、行列\(A\)固有多項式 または 特性多項式という。

固有値の計算#

例1. 対角行列

対角行列の固有値は対角成分になる。

\[\begin{split} A = \begin{pmatrix} 4 & 0\\ 0 & 3 \end{pmatrix} \end{split}\]

なら

\[\begin{split} \phi_A(\lambda) = \det \begin{pmatrix} 4 - \lambda & 0 \\ 0 & 3 - \lambda \end{pmatrix} = 0 \end{split}\]

より

\[ (4 - \lambda)(3 - \lambda) = 0 \]

なので解は

\[ \lambda = 4, 3 \]
import numpy as np

A = np.array([
    [4, 0],
    [0, 3],
])

lambdas, vectors = np.linalg.eig(A)
print(f"""
λ={lambdas}
x1={vectors[:, 1].round(3)}
x2={vectors[:, 0].round(3)}
""")
λ=[4. 3.]
x1=[0. 1.]
x2=[1. 0.]

例2.

\[\begin{split} A = \begin{pmatrix} 3 & -2\\ 1 & 0 \end{pmatrix} \end{split}\]

なら

\[\begin{split} \begin{align} \phi_A(\lambda) &= \det \begin{pmatrix} 3 - \lambda & -2 \\ 1 & - \lambda \end{pmatrix} = 0 \\ &= (3 - \lambda) \cdot (- \lambda) - (-2) \cdot 1\\ &= \lambda^2 - 3 \lambda + 2\\ &= (\lambda - 2) (\lambda - 1) \end{align} \end{split}\]

よって\(\lambda = 2, 1\)

import numpy as np

A = np.array([
    [3, -2],
    [1, 0],
])

lambdas, vectors = np.linalg.eig(A)
print(f"""
λ={lambdas}
x1={vectors[:, 1].round(3)}
x2={vectors[:, 0].round(3)}
""")
λ=[2. 1.]
x1=[0.707 0.707]
x2=[0.894 0.447]

固有ベクトルの計算#

固有値が求まれば、あとは定義にあうベクトルを求めるのみ。

例1.

\[\begin{split} A = \begin{pmatrix} 3 & -2\\ 1 & 0 \end{pmatrix} \end{split}\]

の場合、\(\lambda = 1, 2\)なので

まず\(\lambda = 1\)の場合

\[\begin{split} \begin{align} A \boldsymbol{x} &= \lambda \boldsymbol{x} \\ \to \begin{pmatrix} 3 & -2\\ 1 & 0 \end{pmatrix} \begin{pmatrix} x_1\\ x_2 \end{pmatrix} &= \begin{pmatrix} x_1\\ x_2 \end{pmatrix} \end{align} \end{split}\]

なので

\[\begin{split} \begin{align} 3x_1 - 2x_2 &= x_1\\ x_1 &= x_2 \end{align} \end{split}\]

これを解き、\(0\)以外の任意の数\(s\)を使って表すと

\[\begin{split} \boldsymbol{x} = s \begin{pmatrix} 1\\ 1 \end{pmatrix} \end{split}\]

となる

\(\lambda = 2\)の場合

\[\begin{split} \begin{pmatrix} 3 & -2\\ 1 & 0 \end{pmatrix} \begin{pmatrix} x_1\\ x_2 \end{pmatrix} = 2 \begin{pmatrix} x_1\\ x_2 \end{pmatrix} \end{split}\]
\[\begin{split} \begin{align} 3x_1 - 2x_2 &= 2x_1\\ x_1 &= 2x_2 \end{align} \end{split}\]
\[\begin{split} \boldsymbol{x} = s \begin{pmatrix} 2\\ 1 \end{pmatrix} \end{split}\]
\[\begin{split} A = \begin{pmatrix} -3 & -2\\ 4 & 3 \end{pmatrix} \end{split}\]

の場合

\[\begin{split} \begin{align} |A - \lambda I| &= \begin{vmatrix} -3 - \lambda & -2 \\ 4 & 3 - \lambda \\ \end{vmatrix} \\ &= (-3 \lambda)(3 - \lambda) + 4 \times 2\\ &= -9 + 3\lambda - 3\lambda + \lambda^2 + 8\\ &= \lambda^2 - 1\\ &= (\lambda - 1)(\lambda + 1)\\ &= 0 \end{align} \end{split}\]

より、\(\lambda = 1, -1\)が求まる。(それぞれ\(\lambda_1, \lambda_2\)とおくことにする)

\(\lambda_1 = 1\)に対応する固有ベクトルを\(\b{x}=(x_1,x_2)^\top\)とおいて次のように求める

\[\begin{split} A \b{x} = \lambda_1 \b{x} \iff \begin{align} -3 x_1 - 2 x_2 &= x_1\\ 4 x_1 + 3 x_2 &= x_2\\ \end{align} \end{split}\]

より\(-2 x_1 = x_2\)という関係性になるので、変数\(s\)を使って次のように表す。

\[\begin{split} \b{x} = \begin{pmatrix} s \\ -2 s \end{pmatrix} \end{split}\]

同様に、\(\lambda_2 = -1\)に対応する固有ベクトルを\(\b{y}=(y_1, y_2)^\top\)とおいて次のように求める

\[\begin{split} A \b{x} = \lambda_2 \b{y} \iff \begin{align} -3 y_1 - 2 y_2 &= -y_1\\ 4 y_1 + 3 y_2 &= -y_2\\ \end{align} \end{split}\]

より\(y_1 = -y_2\)という関係性なので、変数\(t\)を使って

\[\begin{split} \b{y} = \begin{pmatrix} t \\ -t \end{pmatrix} \end{split}\]

となる。

\(s\)\(t\)は任意の値でよいので、固有ベクトルの長さが1になるように定めると、固有ベクトルは

\[\begin{split} \b{x} = \begin{pmatrix} 1/\sqrt{5} \\ -2/\sqrt{5} \end{pmatrix} \simeq \begin{pmatrix} 0.447 \\ -0.894 \end{pmatrix} , \hspace{2em} \b{y} = \begin{pmatrix} 1/\sqrt{2} \\ -1/\sqrt{2} \end{pmatrix} \simeq \begin{pmatrix} 0.707 \\ -0.707 \end{pmatrix} \end{split}\]

となる。

import numpy as np

A = np.array([
    [-3, -2],
    [4, 3],
])

lambdas, vectors = np.linalg.eig(A)
print(f"""
λ={lambdas}
x={vectors[:, 1].round(3)}
y={vectors[:, 0].round(3)}
""")
λ=[-1.  1.]
x=[ 0.447 -0.894]
y=[-0.707  0.707]
  • 対象行列の固有値は負をとらない

  • 固有値に0がある(正定値じゃない)と、ランクが下がり、逆行列をもたない

ケイリー・ハミルトンの定理#

ケイリー・ハミルトンの定理

\(A\)の固有多項式を\(\phi_A(t)\)とするとき

\[ \phi_A(A) = O \]

になる

ケイリー・ハミルトンの定理 - Wikipedia

例:

2次正方行列

\[\begin{split} A=\left(\begin{array}{ll} a & b \\ c & d \end{array}\right) \end{split}\]

の場合、固有多項式は

\[\begin{split} \begin{align} \phi_A(\lambda) &= \det(A - \lambda I) = \det\left(\begin{array}{cc} a - \lambda & b \\ c & d - \lambda \end{array}\right)\\ &= (a - \lambda) (d - \lambda) - bc\\ &= ad - a \lambda - d \lambda + \lambda^2 - bc\\ &= \lambda^2 - (a + d) \lambda + (ad - bc)\\ \end{align} \end{split}\]

なので

\[ \phi_A(A) = A^2-(a+d) A+(a d-b c) I = O \]

という形になる。 実際に計算してみると

\[\begin{split} \begin{align} &A^2-(a+d) A+(a d-b c) I \\ &= \begin{pmatrix} a & b \\ c & d \end{pmatrix} \begin{pmatrix} a & b \\ c & d \end{pmatrix} - a \begin{pmatrix} a & b \\ c & d \end{pmatrix} - d \begin{pmatrix} a & b \\ c & d \end{pmatrix} +(a d-b c) I \\ &= \begin{pmatrix} a^2 + bc & ab + bd\\ ac + cd & bc + d^2 \end{pmatrix} - \begin{pmatrix} a^2 & ab \\ ac & ad \end{pmatrix} - \begin{pmatrix} ad & bd \\ cd & d^2 \end{pmatrix} +(a d-b c) I \\ &= \begin{pmatrix} bc & bd\\ cd & bc + d^2 - ad \end{pmatrix} - \begin{pmatrix} ad & bd \\ cd & d^2 \end{pmatrix} +(a d-b c) I \\ &= \begin{pmatrix} bc - ad & 0\\ 0 & bc - ad \end{pmatrix} +(a d-b c) I \\ &= \begin{pmatrix} 0 & 0\\ 0 & 0 \end{pmatrix} \end{align} \end{split}\]

となる。

ケイリー・ハミルトンの定理は何の役に立つのか

\(n\)乗を計算するときに計算量を抑えられる

例えばケイリー・ハミルトンの定理から\(A^3 - A + 2I = O\)がわかっている状況で\(A^7\)を求めたいとする。

\(A^3 = A - 2I\)だから、3乗をくくりだせば

\[\begin{split} \begin{align} A^7 &= A^3 A^3 A\\ &= (A - 2I) (A - 2I) A\\ &= (A^2 - 4A + 4I)A\\ &= A^3 - 4A^2 + 4A\\ &= (A - 2I) - 4A^2 + 4A\\ &= - 4A^2 + 5A - 2I\\ \end{align} \end{split}\]

となり、行列積の計算としては\(A^2\)だけを計算すれば済む。