2014年6月11日(水) - 青柳睦

2014年6月11日(水)
数値解析 講義
前期水曜3時限
情報理学コース
青柳 睦
aoyagi@cc.九州大学のドメイン
研究室
箱崎キャンパス 情報基盤研究開発センター5階502,500
伊都キャンパス ウエスト2号館 1006室右ドア側
1
2.連立一次方程式の解法
講義内容
:
2.5
2.6
2.7
2.8
2.9
{特異値分解法}
共役勾配法 →演習
反復法 2.7.1 ヤコビ法 →演習
ガウス・ザイデル法
{SOR法(概要のみ解説)}
3.固有値と固有ベクトルの数値計算
今日の講義
3.1 固有値問題の序論
3.2 ヤコビの方法(対角行列への帰着) →演習
3.3 ギブンスの方法( 3重対角行列への帰着)→演習?
3.4 DKA法( 3重対角行列の固有値の計算 )
3.5 ハウスホルダー法(3重対角行列への帰着)
4. その他の数値計算法
4.1 ・・・資料作成中・・
4.2
2
3.固有値と固有ベクトルの数値計算
3.1
固有値問題の序
固有値 λ
Ax = λ x
A : n × n 行列
x : 0でない n 次元ベクトル
det ( A − λ I ) ≠ 0 なら A − λ I の逆行列が有
0
( A − λI ) x =
x は0のみとなる(前提に矛盾)
det ( A − λ I ) =
0 : 固有方程式
( n 次方程式 )
3
det ( A − λ I ) =
0 : 固有方程式( n 次方程式)
固有値は n 次の代数方程式の解
一般に ( n ≥ 5 ) 有限回の代数処理では(厳密には)求まらない(*)
反復法による多数の繰り返し演算が必要
(実際には、要求される精度に達した時点で打ち切る)
固有値問題は、連立一次方程式同様、工学・理学・社
会学の分野で非常に重要(固有振動解析、量子力学、他・・)
* ガロア、アベル理論
4
相似変換
−1
B = P AP
( 本 題 へ の 準 備
P : n×n
)
正則(逆行列のある)行列P
による相似変換で、
固有多項式は変わらない
固有値も変わらない
【 証 明 】
(
)
det ( P AP − λ P P )
det ( P ( A − λ I ) P )
det ( ( A − λ I ) PP )
det ( B −
λ I ) det P −1 AP − λ I
=
=
=
=
−1
−1
−1
= det ( A − λ I )
−1
(公式)行列積の行列式
det ( XY ) = det (YX )
det ( XYZ ) = det ( X (YZ ) )
= det ( (YZ ) X )
= det (YZX ) 5
A1 ≡ A
対角形に収束す
るまで繰り返す

A2 = P −1 A1 P 
 相似変換の繰り返し
−1
A3 = P A2 P 


一旦、3重対角
形に変換する
3.2 ヤコビ法
*



*
0




*







*
0


* 

対角行列
* *


0 
* * *


* * 


   

 0
 * *


*
*


3.5 ハウスホルダー法
3重対角行列
3.4 DKA法
対角要素→固有値
3.3 ギブンス法
バイセクション法
固有値は3重対角行列に適した
別の反復法により求める
6
3.2 ヤコビの方法
1




0



 p
cos φ  sin φ


P=

 


 q
− sin φ  cos φ


 
 0


1


p
PP = I
P −1 = t P 直交行列
t
相似変換の行列 P
q
Pij = δ ij
ただし、
Ppp = cos φ
Pqq = cos φ
Ppq = sin φ
Pqp = − sin φ
(毎回の)変換後の行列 B = P −1 AP の特定の成分を0にする
7
相似変換 B = P −1 AP において
1) A が対称 A = A ならば
t
−1
t
=
B t ( P=
AP)
t
−1
t
PA =
( P −1 ) P=
AP B
よって B も対称
2)
A の p, q 行目 と
p, q 列目のみが変更される
以上のように回転行列による相似変換を(三重対角or
対角形になるまで)繰り返す。
GIVENS法:三重対角形に変換する(次節 3.3)。
JACOBI法:対角形に変換する(本節 3.2)。
8
まず左からP-1 をかけると、
P A=
−1
1
  a11

 
0




  a p1
cos φ  − sin φ






 

  aq1
sin φ  cos φ


0


 

1   an1

 a1 p  a1q  a1n 

 

 
 a pp  a pq  a pn 

  
 
 aqp  aqq  aqn 


   
 anp  anq  ann 
 a11

 
 a′p1

 
 aq′1

 
 an1

=
a′pk a pk cos φ − aqk sin φ
 ′
=
 aqk a pk sin φ + aqk cos φ
p
=
 a1 p
 
 a′pp

′
 aqp

 anp
p
q
 a1q  a1n 


 
 a′pq  a′pn 

 
 
′  aqn
′ 
 aqq

   
 anq  ann 
q
p
q
p
p
q
q
k = 1,2,..., n
列 index
9
さらに、右からP をかけると、
B = P −1 AP
=
=
 a11

 
 a′p1

 
 aq′1

 
 an1

 a1 p
 
 a′pp

′
 aqp
 a11

 
 a′p1

 
 aq′1

 
 an1

 a1′′p  a1′′q  a1n 

 

 
 a′′pp  a′′pq  a′pn 

  
 
′′  aqq
′′  aq′n 
 aqp


   
′′  anq
′′  ann 
 anp

 anp
p
p
 a1q  a1n   1




 

0



 a′pq  a′pn  
cos φ  sin φ


 
 






′  aqn
′ 
 aqq
− sin φ  cos φ


   
 
0
 anq  ann  
1 
p
q
q
q
p
q
′′ akp cos φ − akq sin φ
=
 akp
 ′′
=
akq akp sin φ + akq cos φ
行 index
k = 1,2,..., n
k ≠ p, q
=
a′′pp a pp cos 2 φ + aqq sin 2 φ − (a pq + aqp ) cos φ sin φ

′′ a pp sin 2 φ + aqq cos 2 φ + (a pq + aqp ) cos φ sin φ
aqq
=

2
2
′′
=−
+
−
a
(
a
a
)
cos
φ
sin
φ
a
cos
φ
a
sin
φ
pp
qq
pq
qp
 pq
2
2
 aqp
′′
=
−
+
−
(
a
a
)
cos
φ
sin
φ
a
cos
φ
a
sin
φ
pp
qq
pq
qp

10
aij = a ji を用いると結局,
i, j, k = 1,2, n
i, j ≠ p, q
 bij aij 後で使う・・・・(*)
b =
ただし、 k ≠ p, q
=
−
φ
φ
b
a
a
cos
sin
pk
kp
pk
qk

 bqk =
bkq =
a pk sin φ + aqk cos φ
k ≠ p, q

a pp + aqq a pp − aqq
b =
+
cos 2φ − a pq sin 2φ
pp

2
2

a pp + aqq a pp − aqq
b =
−
cos 2φ + a pq sin 2φ
qq

2
2

a pp − aqq

=
b
sin 2φ + a pq cos 2φ
 pq
2
bpq = 0 とするためには cot 2φ =
aqq − a pp
とすればよい.
2a pq
11
実際の計算プログラムでは、
aqq − a pp
= α とおくと
cot 2φ =
2a pq
∴ tan φ =
sgn(α )
α + α 2 +1
tan 2 φ + 2α tan φ − 1 = 0
より、
tan φ = −α ± α 2 + 1
小さい方の根は、
α > 0 ⇒ t = −α + α 2 + 1 =
≡t
−1
−α − α 2 +1
α < 0 ⇒ t = −α − α 2 + 1 =
=
1
α + α 2 +1
−1
−α + α 2 +1
このtよりBの各要素を計算する.
 bij
b
 pk
 bqk

b
 pp

b
 qq

bpq

aij
bkp =
a pk cos φ − aqk sin φ
=
bkq =
a pk sin φ + aqk cos φ
=
a pp + aqq a pp − aqq
cos 2φ − a pq sin 2φ
= +
2
2
a pp + aqq a pp − aqq
cos 2φ + a pq sin 2φ
= −
2
2
a pp − aqq
sin 2φ + a pq cos 2φ
2
(次ページ参照)
i, j ≠ p, q
k ≠ p, q
k ≠ p, q
p, q の選び方
絶対値が最大の非対角
要素が0となるように選ぶ
一度0になった要素が後の変
換で非ゼロに復活してくること
もありうる。 (次に「収束」の
保証について考察する)
12
計算式(参考)
b pp =
=
a pp + aqq
2
a pp + aqq
+
+
a pp − aqq
2
a pp − aqq
bqq = a pp + aqq − b pp
= aqq + a pq tan φ = aqq + ta pq
cos 2φ − a pq sin 2φ
また、
tan φ =
(1 − 2 sin 2 φ ) − a pq sin 2φ
2
2
= a pp − (a pp − aqq ) sin 2 φ − a pq sin 2φ
cot 2φ =
= a pp + 2a pq cot 2φ sin 2 φ − a pq sin 2φ
aqq − a pp
2a pq
cos 2φ sin 2 φ
= a pp + 2a pq
− a pq sin 2φ
sin 2φ
cos 2φ sin φ
= a pp + a pq
− 2a pq sin φ cos φ
cos φ
(cos 2 φ − sin 2 φ ) sin φ − 2 sin φ cos 2 φ
= a pp + a pq
cos φ
− sin φ (− cos 2 φ + sin 2 φ + 2 cos 2 φ )
= a pp + a pq
cos φ
= a pp − a pq tan φ = a pp − ta pq
より、
sgn(α )
α + α +1
2
≡t
1
より、
cos 2 φ
1
1 + tan 2 φ =
cos φ =
1+ t 2
sin φ = tan φ cos φ =
t
1+ t 2
を用いて、
b pk = bkp = a pk cos φ − aqk sin φ
bqk = bkq = a pk sin φ + aqk cos φ
k = 1,2,  n ( k ≠ p, q )
∴ b pp = a pp − ta pq
計算する。
13
ヤコビの対角化法に関する 「収束について」
まず準備、
相似変換 B = P −1 AP において次が成り立つ
(a)
2
2
a
=
b
∑ ij ∑ ij
i, j
i, j
(全要素の2乗の和は変わらない)
−1 t
は直交行列
(
P
= P) だから
P
t
BB
t
−1
(P
=
AP)( P −1 AP)
t
t
PA
=
(P −1 ) P −1 AP P −1 t AAP
対角和は相似変換によって不変だから(次ページ参照)
tr At A = tr B t B
成分ごとに書くと
2
2
a
=
b
∑ ij ∑ ij
i, j
i, j
14
補足
対角和(トレース)
n
tr X = ∑ xii
i =1
XY の対角和 = YX の対角和
n
n  n
 n  n

=
=
=
tr XY=
( XY )ii ∑
 ∑ xij y ji  ∑
∑
 ∑ y ji xij  tr YX
=i 1
=i 1 =
i1

j1
 =j 1 =
相似変換によって変わらない
(
)
−1
−1
=
tr Y −1 XY tr=
Y −1 ( XY ) tr=
XY
Y
tr
=
X
YY
tr X
( )
15
(b)
2
2
bpp
+ bqq2 = a 2pp + 2a 2pq + aqq
の証明.
2
2
2
まず bpp
を示す
+ 2bpq
+ bqq2 = a 2pp + 2a 2pq + aqq
a pp + aqq a pp − aqq

cos 2φ − a pq sin 2φ
bpp = +
2
2

a pp + aqq a pp − aqq

cos 2φ + a pq sin 2φ
 bqq = −
2
2

a pp − aqq

sin 2φ + a pq cos 2φ
bpq
2

a pp + aqq
a pp − aqq
において F =
=
, G =
, H a pq とおくと
2
2
bpp =
F + G cos 2φ − H sin 2φ

F − G cos 2φ + H sin 2φ
 bqq =
b
=
 pq G sin 2φ + H cos 2φ
16
b + 2b + b = { F + ( G cos 2φ − H sin 2φ )} + ( F − ( G cos 2φ − H sin 2φ ) )
2
pp
2
pq
2
2
qq
+2 ( G sin 2φ + H cos 2φ )
2
2 F 2 + 2 ( G cos 2φ − H sin 2φ ) + 2 ( G sin 2φ + H cos 2φ )
=
2
{
2 F 2 + 2 G 2 cos 2 2φ + H 2 sin 2 2φ − 2GH cos 2φ sin 2φ
=
{
2(F
+2 G 2 sin 2 2φ + H 2 cos 2 2φ + 2GH cos 2φ sin 2φ
=
2
+ G2 + H 2
2
2
}
}
)
 a pp + aqq  2  a pp − aqq 2

2 
= 2 
 + a pq 
 +
2
2

 


2
 a 2pp + aqq

2 
= 2
+ a pq 
2


2
=a 2pp + 2a 2pq + aqq
17
2
2
2
bpp
+ 2bpq
+ bqq2 = a 2pp + 2a 2pq + aqq
において P は bpq = 0 となるように選んだから
2
2
bpp
+ bqq2 = a 2pp + 2a 2pq + aqq
(実は、次の様な式変形だけでも、
1回の相似変換で“非対角要素の二乗和”
が毎回減少することが言える・・。)
以上(a)、(b)からBの非対角要素の2乗の和は
(b よ)り


2
2
2
b = ∑ b −  ∑ bii + bpp + bqq 
∑
i≠ j
i, j
 i ≠ p ,q



2
2
2
2
2
= ∑ aij −  ∑ aii + a pp + 2a pq + aqq 
i, j
 i ≠ p ,q

= ∑ aij2 − 2a 2pq
2
ij
2
ij
(
*)
(よ
a)り
となる
(
*)
i≠ j
bij = aij
i, j ≠ p, q
18
2
=
b
∑ ij
i≠ j
2
2
a
−
2
a
∑ ij pq
i≠ j
において p, q は a 2pq = max aij2 となるように選んだから
i≠ j
全ての i ≠ j について
aij2 ≤ a 2pq
和をとると
∑a
i≠ j
2
ij
∑
2
の項数は
n
− n だから
i≠ j
≤ n(n − 1)a
2
2
2
2
a
≤
a
∑
ij
pq
n(n − 1) i ≠ j
2
pq
よって

2 
2
=
−
≤
−
2
1
b
a
a
a

 ∑ ij
∑
∑
i≠ j
i≠ j
 n(n − 1)  i ≠ j
2
ij
2
ij
2
pq
19

2 
2
≤
−
1
b
a

 ∑ ij
∑
i≠ j
 n(n − 1)  i ≠ j
2
ij
k − 1 回相似変換を行った後の行列 Ak の要素を aij( k ) と書くと
∑(
i≠ j
(k )
ij
a
)
2

2 
≤ 1 −

 n(n − 1) 
k
2
a
∑ ij
i≠ j
n ≥ 3 に対しては 0 < 1 − 2 n(n − 1) < 1 だから
k → ∞ のとき
∑(a )
i≠ j
(k )
ij
2
→0
よって・・(上のPによる) 相似変換の繰り返しで
非対角成分は全体として0に収束する
ただし理論的に「繰り返し数の厳密な上限」を
導出することは出来ない。
(あるepsまでの近似回転数は導出できる )
⇔
もし示せたら、n次方程式が
有限回演算で解けたことに
なってしまう!(矛盾)
20
「固有値と固有ベクトル」
k 回目の相似変換の行列を Pk と書く
−1
=
Ak +1 P=
k 1, 2,
k Ak Pk ,
T = lim P1 P2  Pk
k →∞
(実際の数値計算では、必要な精度が
得られたらkを有限回で打ち切る。)
を作ると、以上の結果から
Λ =T −1 AT
ここで Λ は対角行列
 λ1



λ2
0


Λ =


0




λ
n

λi : A の固有値
21
Λ =T −1 AT
から
AT = T Λ
T の第 i列からなる列ベクトルを ti とすると
T = (t1 , t2 , , tn )
Atk = λk tk
ti が A の固有値 λi に属する固有ベクトルとなる
【以下は補足】
相似変換によって行列Aに関する次の値は不変。
① 行列式det(A)
④ 固有値 λ
② トレースtr(A)
③階数 rank(A)
(一次独立な固有ベクトルの本数)
②④から、固有値の和は tr(A)
①④から、固有値の積は det(A)
④から、 A-1 , A2, A3 ・・など Aの関数が簡単に求まる。
22
【実験1】 10~100次元のFrank 行列* Aについて、Jacobiの対角化法
を用い、Iterationの回数を調べた。
次元数
10
20
30
40
50
60
70
80
90
100
EPS=10-6
Iteration
122
465
991
1561
2275
2944
3662
4315
5062
5718
Frank行列の固有値 λk
λ−k1 = 2{1 − cos(
2k − 1
π )}, 1≤ k ≤ n
2n + 1
Frank行列の固有ベクトル vk
2k − 1 π
(2k − 1)(2 j − 1) π
t
vk = {cos(
2n + 1 2
 , cos(
), 2n + 1
2
), , cos(
(2k − 1)(2n − 1) π
)}
2n + 1
2
vkのj番目の要素
(参考)Frank行列の逆行列
 1 −1 0
− 1 2 − 1

−1
A =  0 −1 2




 0 0




−1
0
0 


− 1
2 
23
【脚注*】
Frank行列は厳密な固有値、固有ベクトルの解析解が求められる
【実験2】 Frank行列Aについて、Jacobiの対角化法を用い、
収束の様子を調べた。
n − 1 n − 2  1
 n
 n − 1 n − 1 n − 2  1


A =  n − 2 n − 2 n − 2  






1


 1
1
1 1

Frank行列
Color
40次元の場合の実行例。 CまたはJavaに似た言語でグラフィッ
ク処理が簡単な「Processing2.0.x」という処理系を用いて可視化し
た(例として、計算の途中の様子を図示した。)。
[ 参考 ] http://processing.org/
|aij|の値
100< |aij|
10 < |aij| < 100
1.0 < |aij| < 10.0
0.1 < |aij| < 1.0
10-2 < |aij| < 0.1
10-3 < |aij| < 10-2
10-4 < |aij| < 10-3
|aij| < 10-4
24