固有値と固有ベクトル#
固有値と固有ベクトル#
定義#
\(n\)次の正方行列\(A\)に対して
が成り立つとき、スカラー\(\lambda\)を\(A\)の固有値(eigenvalue)といい、 \(n\)次元ベクトル\(\boldsymbol{x} (\neq \boldsymbol{0})\)を\(A\)の\(\lambda\)に対応する固有ベクトル(eigenvector)と呼ぶ。
線形変換を使う定義#
ベクトル空間\(V\)から自分自身への線形写像を 線形変換 という。
「線形変換\(f:V\to V\)が与えられたとき、あるベクトル\(x \neq 0\)があって、\(f\)は\(x\)を\(x\)の定数倍\(\lambda x\)に写すようにできるだろうか?」が固有値の議論の出発点となる
定義
線形変換 \(f: V \rightarrow V\) において
をみたす \(\lambda\) を \(f\) の 固有値、 \(x\) を固有値 \(\lambda\) に属する 固有ベクトル という。
線形写像は具体的には行列で表すことができるため(線形写像の行列表現)、 \(f(\boldsymbol{x})=\lambda \boldsymbol{x}\) は \(A\boldsymbol{x}=\lambda \boldsymbol{x}\)と等しい。
固有空間#
定理
ベクトル空間 \(V\) の線形変換 \(f\) の固有値の 1 つを \(\lambda\) とする。 \(\lambda\) に 属する \(f\) の固有ベクトル全体とゼロベクトルからなる集合 \(V(\lambda)\) は集合
と一致し、 \(V\) の部分空間になる。なお、\(V(\lambda)\)を\(f\)の固有値\(\lambda\)に属する 固有空間 という。
証明
(1) \(\boldsymbol{0}\in V(\lambda)\)について
\(\boldsymbol{x} = \boldsymbol{0}\)も等式\(f(\boldsymbol{x})=\lambda \boldsymbol{x}\)を満たす
(2) 和について
\(\boldsymbol{x}_1, \boldsymbol{x}_2 \in V\)に対し
より、
(3) 定数倍について
\(\boldsymbol{x} \in V, c \in \mathbb{R}\)に対し、
より
よって部分空間の3条件(1)~(3)を満たすため、\(V(\lambda)\)は\(V\)の部分空間である
固有空間は、\(f\)に対応する\(n\)次正方行列\(A\)と\(n\)次単位行列\(I\)を用いて
と表すこともできる。
広義固有空間#
ある自然数\(k\)に対して
を満たす\(\boldsymbol{x} \in \mathbb{R}^n\)を\(A\)の固有値\(\lambda\)に対する 広義固有ベクトル (generalized eigenvector) という。
固有値\(\lambda\)に対する広義固有ベクトル全体に\(\boldsymbol{0}\)を加えた集合
を \(\lambda\)に対する 広義固有空間 (generalized eigenspace) という。
広義固有空間も\(\mathbb{R}^n\)の部分空間である
となる自然数 \(k, l\) がとれる.すると。
により、 \(\boldsymbol{x}+\boldsymbol{y}, c \boldsymbol{x} \in \widetilde{W}(\alpha)\) である. よって \(\widetilde{W}(\alpha)\) は部分空間である。
固有値の必要十分条件#
定理
\(n\) 次正方行列 \(A\) が与えられたとき、 \(\lambda\) が \(A\) の固有値である必要十分条件は
をみたすことである。 ここで \(I\) は \(n\) 次単位行列である。
固有方程式#
は単位行列\(I\)を用いて
と表すことができる(もちろん\((\lambda I - A) \boldsymbol{x} = \boldsymbol{0}\)も可)。
斉次連立一次方程式の解が非自明な解 \(\boldsymbol{x} \neq \boldsymbol{0}\)を持つことと、行列式\(\det(A-\lambda I) = 0\)となることは同値であるので、固有ベクトルが\(\boldsymbol{x} \neq \boldsymbol{0}\)であるためには
でなければならない。この式を 固有方程式 あるいは 特性方程式 と呼び、固有値は固有方程式の解として求める。
固有多項式(特性多項式)#
\(n\)次正方行列\(A\)に対し、
で定義される変数\(\lambda\)についての多項式\(\phi_A(\lambda)\)を、行列\(A\)の固有多項式 または 特性多項式という。
固有値・固有ベクトルの求め方#
とする。
\(A\)の固有値と、各固有値に属する1つの固有ベクトルと、固有空間\(V(\lambda)\)を求めよ
固有値を求める#
\((A-\lambda E)x = 0\)が非自明な解\(x\neq 0\)を持つためには\(\det(A - \lambda E)=0\)である必要があるため、そのような\(\lambda\)を求める(固有方程式を解く)
(もし\(A\)が対角行列などの行列式を求めやすい形状の行列であった場合、この部分が少し楽になるので活用しよう)
なので、\(\lambda = 0, 3\)
固有空間・固有ベクトルを求める#
固有値に対応するベクトルを求める
\(\lambda = 0\)の場合:
は
であり
となる。
これを解くと
つまり
であるため、未知の数\(c\in\mathbb{R}\)をもちいて
と表すことができる。そのため、例えば \(\begin{pmatrix}1 \\ -1\end{pmatrix}\)は固有値\(0\)に属する固有ベクトルのひとつになる。
固有空間は
となる。
\(\lambda = 3\)の場合:
は
となる。
これを解くと
であるため、
となり、例えば\(\begin{pmatrix}1 \\ 2\end{pmatrix}\)が固有値\(3\)の固有ベクトルの一つである。
固有空間\(V(\lambda)\)は
となる。
numpy#
numpyのnumpy.linalg.eig()
の返り値はノルムが1になるように正規化されている
import numpy as np
A = np.array([
[1, 1],
[2, 2],
])
lambdas, vectors = np.linalg.eig(A)
print(f"""
λ={lambdas}
x1={vectors[:, 0].round(3)}
x1'={(vectors[:, 0].round(3) * -np.sqrt(2)).round(1)}
x2={vectors[:, 1].round(3)}
x2'={(vectors[:, 1].round(3) * -np.sqrt(5)).round(1)}
""")
λ=[0. 3.]
x1=[-0.707 0.707]
x1'=[ 1. -1.]
x2=[-0.447 -0.894]
x2'=[1. 2.]
np.array([1, -1]) / np.sqrt(2)
array([ 0.70710678, -0.70710678])
\(\lambda=0\)について、 $\( \boldsymbol{x} = -\frac{1}{\sqrt{5}} \begin{pmatrix} 1 \\ 2 \end{pmatrix} \simeq \begin{pmatrix} 0.447 \\ 0.894 \end{pmatrix} \)$
\(\lambda=3\)について、 $\( \boldsymbol{x} = -\frac{1}{\sqrt{2}} \begin{pmatrix} 1 \\ -1 \end{pmatrix} \simeq \begin{pmatrix} -0.707 \\ 0.707 \end{pmatrix} \)$
例1. 対角行列
対角行列の固有値は対角成分になる。
なら
より
なので解は
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.
なら
よって\(\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.
の場合、\(\lambda = 1, 2\)なので
まず\(\lambda = 1\)の場合
なので
これを解き、\(0\)以外の任意の数\(s\)を使って表すと
となる。
そのため、固有空間\(W(\lambda)\)は
であり、固有空間のうちの一つの固有ベクトルが\(\binom{1}{1}\)となる。
\(\lambda = 2\)の場合、
対象行列の固有値は負をとらない
固有値に0がある(正定値じゃない)と、ランクが下がり、逆行列をもたない
固有値を求めやすい行列#
三角行列や対角行列は求めやすい
定理
\(n\) 次正方行列 \(A\) が三角行列であるとき、 \(A\) の固有値全体は重複もこめて \(A\) の対角成分と一致する
証明
\(A\)が次のような上三角行列だったとする。
行列\(A-\lambda I\)の行列式(固有多項式)は対角成分の積で求められるため
となる。これを解くと、固有値は\(a_{11},a_{22},\cdots,a_{nn}\)と、対角成分である。
定理
\(n\) 次正方行列 \(A\) が
の形をしているとする。 ここで \(B\) は \(r\) 次正方行列、 \(C\) は \(r \times s\) 行列、\(D\) は \(s\) 次正方行列、\(O\) はすべての成分が 0 からなる \(s \times r\) 行列を表わす。 そのとき、
が成り立つ。したがって、行列 \(A\) の固有値の全体は重複もこめて、行列 \(B\) の固有値と、行列 \(D\) の固有値を合せたものと一致する。
固有値の重複度#
固有方程式の解の重複度を、固有値の 重複度 という。
固有値の重複度と固有空間の次元数には次のような関係がある
定理
\(A\in M_n(\mathbb{R})\)、\(\lambda\)を\(A\)の1つの固有値とするとき、
\(\lambda\)に属する固有空間の次元\(\leq\) \(\lambda\)の重複度
が成り立つ
は、三角行列なので
と、\(\lambda = 1\)だけが固有値で、その重複度は2である。固有空間\(V(1)\)は
この空間の次元は1である。
線形変換と表現行列の固有値は同じものになる。
定理
線形変換 \(f: V \rightarrow V\) が与えられたとき、 \(V\) の 1 つの基底をとり、 その基底に関する \(f\) の表現行列を \(A\) とする。そのとき、 \(f\) の固有値の集合は重複もこめて、 \(A\) の固有値の集合と一致する。
証明
\(v_1, \cdots, v_n\) を \(V\) の 1 組の基底とする。 \(V\) のベクトル \(x\) をこの基底の 1 次結合 \(\boldsymbol{x}=x_1 \boldsymbol{v}_1+\cdots+x_n \boldsymbol{v}_n\) と書く。そのとき、
であるから、この定理の主張が成り立つ。
固有値・固有ベクトルに関する定理#
固有値・固有ベクトルの存在#
任意の正方行列について、「固有値・固有ベクトルは存在する」という解説と「固有値・固有ベクトルは存在するとは限らない」という解説がある。どちらが正しいのか・・・。
固有値・固有ベクトルは存在する#
\(\lambda\) に関する \(n\) 次方程式であるので、 代数学の基本定理によって、 複素数の範囲に解が存在することが保証される。
解があっても非自明な解とは限らないのでは
固有値・固有ベクトルは存在するとは限らない#
行列 \(A=\left(\begin{array}{rr}0 & 1 \\ -1 & 0\end{array}\right)\) で与えられる線形変換 \(A: R^2 \rightarrow R^2\) を考える。
をみたす \(\lambda \in R\) と \(\boldsymbol{x} \neq \mathbf{0}\) が存在したとすると、
これより等式
を得る。第1式を第2式に代入して
となる. これより \(x=0\). これを第 1 式に代入して \(y=0\) となる. つまり \(\boldsymbol{x}=\boldsymbol{0}\) である。固有ベクトルはゼロベクトルでないものをいうから,これは固有ベク トルではない。つまり,この行列には固有値も固有ベクトルも存在しない。
(川久保勝夫. (2010). 線形代数学 [新装版]. より)
固有ベクトルの1次独立性#
定理
\(n\) 次正方行列 \(A\) の相異なる固有値を \(\lambda_1, \cdots, \lambda_s(s \leqq n)\) とする。 各固有値 \(\lambda_i\) に属する固有ベクトルを \(x_i\) とするとき、 \(x_1, \cdots, x_s\) は 1 次独立である。
証明
まず\(s=1\)のとき、固有ベクトルは\(x_1\neq \mathbf{0}\)なので、明らかに\(c_1 x_1 = \mathbf{0} \iff c_1 = 0\)なので1次独立である。
次に\(r \geq 2\)について、\(s = r - 1\)が1次独立だと仮定したとき\(s = r\)のときも1次独立となることを示す。
\(c_1,\cdots,c_n\in \mathbb{R}\)について、
とおくと、\((*)\)に左から\(A\)をかければ、\(A x_i = \lambda_i x_i\)より
他方、\((*)\)に左から\(\lambda_s\)をかければ、
となる。2つの式を引くと
となる。異なる固有値に属する\(s-1\)個の固有ベクトル\(\boldsymbol{x}_1,\cdots, \boldsymbol{x}_{s-1}\)は1次独立であり、その係数はすべてゼロであるから、
であり、すべての固有値\(\lambda_1, \cdots, \lambda_{s-1}\)が相異なるという仮定から、
が導かれる。これらを\((*)\)に代入すれば
となり、固有ベクトルの定義より\(\boldsymbol{x}_s\neq \boldsymbol{0}\)であるため、\(c_s = 0\)である。
よって\(\boldsymbol{x}_1,\cdots,\boldsymbol{x}_s\)は1次独立である
三角化定理#
線形変換\(f\)の固有多項式\(\phi(\lambda)\)が\(n\)個の1次式の積に分解される
三角化定理
\(V\) を \(\boldsymbol{K}\) 上の \(n\) 次元ベクトル空間、 \(f\) を \(V\) の線型変換とし、 \(f\) の固有値を \(\alpha_1, \alpha_2, \cdots, \alpha_n\) とする。
そのとき、\(f\) は \(V\) の適当な基底によって、三角行列
で表現される。
フロベニウスの定理#
フロベニウスの定理 (Frobenius theorem)
フロベニウスの定理
\(f(x)=a_m x^m+a_{m-1} x^{m-1}+\cdots+a_0\) を多項式とする。 \(n\) 次正方行列 \(A\) の固有値を \(\lambda_1, \lambda_2, \ldots, \lambda_n\) とするとき,正方行列
の固有値は \(f\left(\lambda_1\right), f\left(\lambda_2\right), \ldots, f\left(\lambda_n\right)\) である。
ケイリー・ハミルトンの定理#
ケイリー・ハミルトンの定理
\(A\)の固有多項式を\(\phi_A(t)\)とするとき
になる
例:
2次正方行列
の場合、固有多項式は
なので
という形になる。 実際に計算してみると
となる。
→ \(n\)乗を計算するときに計算量を抑えられる
例えばケイリー・ハミルトンの定理から\(A^3 - A + 2I = O\)がわかっている状況で\(A^7\)を求めたいとする。
\(A^3 = A - 2I\)だから、3乗をくくりだせば
となり、行列積の計算としては\(A^2\)だけを計算すれば済む。
固有値は写像の行列表現のとりかた(基底のとりかた)に依らず一定#
定義:相似
\(n\) 次正方行列 \(A, B\) に対して、
となる正則行列 \(P\) が存在するとき、 \(A\) と \(B\) は 相似 であるという。
定理
\(n\) 次正方行列 \(A, B\) が相似であれば、両者の固有多項式は一致する、すなわち
である。したがって、 \(A\) と \(B\) の固有値全体は重複もこめて一致する。
証明
\(t E\) は任意の行列と可換であるから
定理
線形変換 \(f: V \rightarrow V\) が与えられたとき、 \(V\) の 1 つの基底をとり、 その基底に関して \(f\) を行列表示したものを \(A\) とする。
そのとき、行列 \(A\) の固有多項式 \(\varphi_A(t)\) は基底の取り方によらない。
証明
線形変換を行列表示するとき、基底の取り換えは相似の関係になるから、前出の定理よりそれらの行列の固有多項式は一致する。
具体例(うまくいかなかった
線形写像\(f: \mathbb{R}^2 \to \mathbb{R}^2\)が存在し、
であるとする。
\(\mathbb{R}^2\)の標準基底
を使って\(W\)へ写したものは
となる。
これらに対し、\(W\)の基底
を使って
と写すような行列\(A\)は
を左から両辺にかけて
import numpy as np
V = np.array([
[1, 2],
[2, 1],
])
W = np.array([
[1, 1],
[1, -1],
])
A = np.linalg.inv(W) @ V
lambdas, vectors = np.linalg.eig(A)
print(f"""
λ={lambdas}
x1={vectors[:, 0].round(3)}
x1'={(vectors[:, 0].round(3) * -np.sqrt(2)).round(1)}
x2={vectors[:, 1].round(3)}
x2'={(vectors[:, 1].round(3) * -np.sqrt(5)).round(1)}
""")
λ=[1.+0.70710678j 1.-0.70710678j]
x1=[ 0.866+0.j -0.289+0.408j]
x1'=[-1.2+0.j 0.4-0.6j]
x2=[ 0.866-0.j -0.289-0.408j]
x2'=[-1.9+0.j 0.6+0.9j]
import numpy as np
A = np.array([
[1, 2],
[2, 1],
])
lambdas, vectors = np.linalg.eig(A)
print(f"""
λ={lambdas}
x1={vectors[:, 0].round(3)}
x1'={(vectors[:, 0].round(3) * -np.sqrt(2)).round(1)}
x2={vectors[:, 1].round(3)}
x2'={(vectors[:, 1].round(3) * -np.sqrt(5)).round(1)}
""")
λ=[ 3. -1.]
x1=[0.707 0.707]
x1'=[-1. -1.]
x2=[-0.707 0.707]
x2'=[ 1.6 -1.6]