固有値と固有ベクトル#
固有値と固有ベクトル#
定義#
が成り立つとき、スカラー
線形変換を使う定義#
ベクトル空間
「線形変換
定義
線形変換
をみたす
線形写像は具体的には行列で表すことができるため(線形写像の行列表現)、
固有空間#
定理
ベクトル空間
と一致し、
証明
(1)
(2) 和について
より、
(3) 定数倍について
より
よって部分空間の3条件(1)~(3)を満たすため、
固有空間は、
と表すこともできる。
広義固有空間#
ある自然数
を満たす
固有値
を
広義固有空間も
となる自然数
により、
固有値の必要十分条件#
定理
をみたすことである。 ここで
固有方程式#
は単位行列
と表すことができる(もちろん
斉次連立一次方程式の解が非自明な解
でなければならない。この式を 固有方程式 あるいは 特性方程式 と呼び、固有値は固有方程式の解として求める。
固有多項式(特性多項式)#
で定義される変数
固有値・固有ベクトルの求め方#
とする。
固有値を求める#
(もし
なので、
固有空間・固有ベクトルを求める#
固有値に対応するベクトルを求める
は
であり
となる。
これを解くと
つまり
であるため、未知の数
と表すことができる。そのため、例えば
固有空間は
となる。
は
となる。
これを解くと
であるため、
となり、例えば
固有空間
となる。
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])
例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.
なら
よって
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.
の場合、
まず
なので
これを解き、
となる。
そのため、固有空間
であり、固有空間のうちの一つの固有ベクトルが
対象行列の固有値は負をとらない
固有値に0がある(正定値じゃない)と、ランクが下がり、逆行列をもたない
固有値を求めやすい行列#
三角行列や対角行列は求めやすい
定理
証明
行列
となる。これを解くと、固有値は
定理
の形をしているとする。
ここで
が成り立つ。したがって、行列
固有値の重複度#
固有方程式の解の重複度を、固有値の 重複度 という。
固有値の重複度と固有空間の次元数には次のような関係がある
定理
が成り立つ
は、三角行列なので
と、
この空間の次元は1である。
線形変換と表現行列の固有値は同じものになる。
定理
線形変換
証明
であるから、この定理の主張が成り立つ。
固有値・固有ベクトルに関する定理#
固有値・固有ベクトルの存在#
任意の正方行列について、「固有値・固有ベクトルは存在する」という解説と「固有値・固有ベクトルは存在するとは限らない」という解説がある。どちらが正しいのか・・・。
固有値・固有ベクトルは存在する#
に関する 次方程式であるので、 代数学の基本定理によって、 複素数の範囲に解が存在することが保証される。
解があっても非自明な解とは限らないのでは
固有値・固有ベクトルは存在するとは限らない#
行列
をみたす
これより等式
を得る。第1式を第2式に代入して
となる. これより
(川久保勝夫. (2010). 線形代数学 [新装版]. より)
固有ベクトルの1次独立性#
定理
証明
まず
次に
とおくと、
他方、
となる。2つの式を引くと
となる。異なる固有値に属する
であり、すべての固有値
が導かれる。これらを
となり、固有ベクトルの定義より
よって
三角化定理#
線形変換
三角化定理
そのとき、
で表現される。
フロベニウスの定理#
フロベニウスの定理 (Frobenius theorem)
フロベニウスの定理
の固有値は
ケイリー・ハミルトンの定理#
ケイリー・ハミルトンの定理
になる
例:
2次正方行列
の場合、固有多項式は
なので
という形になる。 実際に計算してみると
となる。
→
例えばケイリー・ハミルトンの定理から
となり、行列積の計算としては
固有値は写像の行列表現のとりかた(基底のとりかた)に依らず一定#
定義:相似
となる正則行列
定理
である。したがって、
証明
定理
線形変換
そのとき、行列
証明
線形変換を行列表示するとき、基底の取り換えは相似の関係になるから、前出の定理よりそれらの行列の固有多項式は一致する。
具体例(うまくいかなかった
線形写像
であるとする。
を使って
となる。
これらに対し、
を使って
と写すような行列
を左から両辺にかけて
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]