線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/13n/solveriterative.pdf ·...
TRANSCRIPT
線形方程式の解法:反復法
中島 研吾東京大学情報基盤センター
同 大学院情報理工学系研究科数理情報学専攻
数値解析 (科目番号 500080)
Solver-Iterative
2
直接法(Direct Method)• Gaussの消去法,完全LU分解他
– 行列の変形,逆行列に相当するものの計算
• 利点– 安定,幅広いアプリケーションに適用可能
• Pivoting– 疎行列,密行列いずれにも適用可能
• 欠点– 反復法よりもメモリ,計算時間を必要とする
• 密行列の場合,O(N3 )の計算量
– 大規模な計算向けではない• O(N2 )の記憶容量,O(N3 )の計算量
3
反復法とは・・・
Solver-Iterative
適当な初期解 x(0)から始めて,繰り返し計算によって真の解に
収束(converge)させていく
,, )2()1( xx
A b
初期解連立一次方程式
)0(
)0(2
)0(1
)0(
nx
xx
x
x
nnnnnn
n
n
b
bb
x
xx
aaa
aaaaaa
2
1
2
1
21
22221
11211
Solver-Iterative
4
反復法(Iterative Method)• 定常(stationary)法
– 反復計算中,解ベクトル以外の変数は変化せず
– SOR,Gauss-Seidel,Jacobiなど
– 概して遅い
• 非定常(nonstationary)法– 拘束,最適化条件が加わる
– Krylov部分空間(subspace)への写像を基底として使用するため,Krylov部分空間法とも呼ばれる
– CG(Conjugate Gradient:共役勾配法)
– BiCGSTAB(Bi-Conjugate Gradient Stabilized)– GMRES(Generalized Minimal Residual)
NbMxxbAx
)()1( kk
Solver-Iterative
5
反復法(Iterative Method)(続き)
• 利点– 直接法と比較して,メモリ使用量,計算量が少ない。
– 並列計算には適している。
• 欠点– 収束性が,アプリケーション,境界条件の影響を受けやすい。
• 収束しない(答えが得られない)可能性がある
– 前処理(preconditioning)が重要。
Solver-Iterative
6
• 定常反復法(1)– ヤコビ法,ガウス・ザイデル法
• 非定常反復法– 共役勾配法
• 定常反復法(2)– SOR法
7
ヤコビ法(Jacobi)Solver-Iterative
k回目の反復に
おける解の推定値(k)
)(1
)(313
)(2121
11
)1(1
1 knn
kkk xaxaxaba
x
nnnnnn
n
n
b
bb
x
xx
aaa
aaaaaa
2
1
2
1
21
22221
11211
連立一次方程式
)(2
)(323
)(1212
22
)1(2
1 knn
kkk xaxaxaba
x
)(11,
)(22
)(11
)1( 1 knnn
kn
knn
nn
kn xaxaxab
ax
)(
)(2
)(1
)(
kn
k
k
k
x
xx
x
次のステップの推定値(k+1)
)1(
)1(2
)1(1
)1(
kn
k
k
k
x
xx
x
右辺の xi は全て(k)における値
8
何をやっているのか?Solver-Iterative
nnnnnn
n
n
b
bb
x
xx
aaa
aaaaaa
2
1
2
1
21
22221
11211
連立一次方程式:n個の未知数,n個の方程式
ik
nink
iiik
iiik
iiik
ik
i bxaxaxaxaxaxa
)()(
11)1()(
11)(
22)(
11
n個の方程式を一つずつ解いていくi番目の方程式を解くときは,xi
(k+1) のみが未知数,あとは既知の値として解く
)()(11
)(11
)(22
)(11
)1( 1 knin
kiii
kiii
ki
kii
ii
ki xaxaxaxaxab
ax
ininiiiiiiiiiii bxaxaxaxaxaxa 11112211
9
ガウス・ザイデル法(Gauss-Seidel)Solver-Iterative
)(1
)(414
)(313
)(2121
11
)1(1
1 knn
kkkk xaxaxaxaba
x
)(2
)(424
)(323
)1(1212
22
)1(2
1 knn
kkkk xaxaxaxaba
x
)1(11,
)1(22
)1(22
)1(11
)1( 1
knnn
kn
kn
knn
nn
kn xaxaxaxab
ax
次のステップの推定値(k+1)
)(3
)(434
)1(232
)1(1313
33
)1(3
1 knn
kkkk xaxaxaxaba
x
)1(
)1(2
)1(1
)1(
kn
k
k
k
x
xx
x
右辺の xi は既に計算されている場合は(k+1)における値を使用(最新の値)
通常,ヤコビ法よりも速く収束する(大体2倍くらいの速さと言われている)
10
ヤコビ法とガウス・ザイデル法Solver-Iterative
nnnnnn
n
n
b
bb
x
xx
aaa
aaaaaa
2
1
2
1
21
22221
11211
連立一次方程式
nixaba
xn
ijj
kjiji
ii
ki
11
,1
)()1(
次のステップの推定値(k+1)
nixaxaba
xi
j
n
ij
kjij
kjiji
ii
ki
11 1
1 1
)()1()1(
ヤコビ法
ガウス・ザイデル法
k回目の反復に
おける解の推定値(k)
)(
)(2
)(1
)(
kn
k
k
k
x
xx
x
11
幾何学的解釈:直線の交点Solver-Iterative
02 21 xx
21
x321 xx
31)0(x
解くべき連立一次方程式 真の解
初期解:例えば
12
ヤコビ法:2直線の交点が解Solver-Iterative
2x
1x12 3 xx
12 2xx
0 1 2 3 4
1
2
3
4
2
02 21 xx321 xx
31)0(x
23
21
02
)0(2
)1(1
)0(2
)1(1
xx
xx
23
3)0(
1)1(
2
)1(2
)0(1
xx
xx
0
1
13
Gauss-Seidel法:2直線の交点が解Solver-Iterative
2x
1x12 3 xx
12 2xx
0 1 2 3 4
1
2
3
4
0
1
2
02 21 xx321 xx
23
21
02
)0(2
)1(1
)0(2
)1(1
xx
xx
233
3
)1(1
)1(2
)1(2
)1(1
xx
xx
43
21
02
)1(2
)2(1
)1(2
)2(1
xx
xx
493
3
)2(1
)2(2
)2(2
)2(1
xx
xx
14
ヤコビ法とガウス・ザイデル法Solver-Iterative
2x
1x12 3 xx
12 2xx
0 1 2 3 4
1
2
3
4
0
1
2
2
1
02 21 xx321 xx
15
反復法の収束判定(「解を得られた」という判定)
Solver-Iterative
解の推定値 x(k)
)(
)(2
)(1
)(
kn
k
k
k
x
xx
x
2
2
)(
b
Axb k
n
ii
n
i
n
j
kjiji
k bxab1
2
21
2
1
)(
2
)( , bAxb
残差ノルム
• 適切な条件のもとで,k⇒k+1のプロセスを繰り返すことによって,x(k)は正しい解に収束していく。
• [A]{x}={b}という方程式を解いているので,||b-Ax||2~0となれば収束したとみなすことができる。
• 通常は||b||2で無次元化した「残差ノルム」が予め設定した値 より小さくなった場合に収束したとみなす。の値は要求される精度によって異なる。
do iter= 1, N*100do i= 1, N
X0(i)= X(i)enddo
do i= 1, NRESID= B(i)do j= 1, Nif (j.ne.i) then
RESID= RESID - A(i,j)*X0(j)endif
enddoX(i)= RESID/A(i,i)
enddo
(収束判定)
enddo
16
プログラム例(ヤコビ法)Solver-Iterative
A(i,j): Aのaij成分B(i): bの各成分X(i): xの各成分X0(i): xの各成分(1ステップ前のX(i))注:A(i,j)と書くのはメモリアクセス上は効率がとても悪い(Fortranの場合)
nixaba
xn
ijj
kjiji
ii
ki
11
,1
)()1(
do iter= 1, N*100do i= 1, N
RESID= B(i)do j= 1, Nif (j.ne.i) then
RESID= RESID - A(i,j)*X(j)endif
enddoX(i)= RESID/A(i,i)
enddo
(収束判定)
enddo
17
プログラム例(ガウス・ザイデル法)Solver-Iterative
A(i,j): Aのaij成分B(i): bの各成分X(i): xの各成分
プログラムはヤコビ法より実は簡単
ni
xaxaba
xi
j
n
ij
kjij
kjiji
ii
ki
1
1 1
1 1
)()1()1(
BNRM= 0.d0do i= 1, NBNRM= BNRM + B(i)**2
enddoBNRM= dsqrt(BNRM)
...
do iter= 1, N*100
(反復計算)
VAL= 0.d0do i= 1, N
RESID= B(i)do j= 1, NRESID= RESID - A(i,j)*X(j)
enddoVAL= VAL + RESID**2
enddo
VAL= dsqrt(VAL)/BNRM
if (VAL.lt.EPS) exitenddo
18
プログラム例(収束判定)Solver-Iterative
n
iib
1
2
2b
2
2
)(
b
Axb k
n
i
n
j
kjiji
k xab1
2
1
)(
2
)(Axb
反復計算と同じくらいのコスト:結構時間がかかる(数回に1回の判定でも良い)
BNRM= 0.d0do i= 1, NBNRM= BNRM + B(i)**2
enddoBNRM= dsqrt(BNRM)
...
do iter= 1, N*100
(反復計算)
VAL= 0.d0do i= 1, N
VAL= VAL + (X(i)-X0(i))**2enddo
VAL= dsqrt(VAL)/BNRM
if (VAL.lt.EPS) exitenddo
19
プログラム例(収束判定:代替法)Solver-Iterative
n
iib
1
2
2b
2
2
)()1(
b
xx kk
計算量は減少,必ずしも正しい解に収束していない場合がある
20
数値例(1/2)Solver-Iterative
例
14522424
03
321
321
321
xxxxxx
xxx
)214(51
)224(41
)(31
)1(2
)1(1
)1(3
)(3
)1(1
)1(2
)(3
)(2
)1(1
kkk
kkk
kkk
xxx
xxx
xxx
ガウス・ザイデル法
)214(51
)224(41
)(31
)(2
)(1
)1(3
)(3
)(1
)1(2
)(3
)(2
)1(1
kkk
kkk
kkk
xxx
xxx
xxx
ヤコビ法
21
数値例(2/2)Solver-Iterative
k
1
ヤコビ法 ガウス・ザイデル法
),,( )(3
)(2
)(1
kkk xxx bAxb /)(k ),,( )(3
)(2
)(1
kkk xxx bAxb /)(k
+0.000000E+00-6.000000E+00+2.800000E+00
4.330875E-01
2+2.933333E+00-4.600000E+00+1.600000E+00
1.869982E-01
3+2.066667E+00-4.466667E+00+7.066667E-01
1.224674E-01
4+1.724444E+00-5.130000E+00+1.080000E+00
4.005661E-02
5+2.070000E+00-5.028889E+00+1.084222E+00
2.500786E-02
+0.000000E+00-6.000000E+00+1.600000E+00
2.967876E-01
+2.533333E+00-4.566667E+00+8.733333E-01
9.369901E-02
+1.813333E+00-5.110000E+00+1.052667E+00
2.903653E-02
+2.054222E+00-4.960111E+00+9.862889E-01
9.133105E-03
+1.982133E+00-5.011322E+00+1.004882E+00
2.846575E-03
)0,0,0(),,( )0(3
)0(2
)0(1 xxx
)1,5,2(),,( )(3
)(2
)(1 kkk xxx正解
22
ヤコビ法,ガウス・ザイデル法の収束条件と対角優位性
Solver-Iterative
係数行列Aが以下の性質を満たしていれば、どの初期点から始めても真の解に収束する.
niaan
ijjijii ,,2,1
,1
((狭義行)対角優位)
第 i 行の、対角項以外の成分の絶対値の和よりも対角項の絶対値が大きい場合
対角優位
• 連立一次方程式:
• 定常反復法:
• 以下のように考える:A= D + L + U
23
証明:定常反復法の構成(1/2)Solver-Iterative
NbMxx )()1( kkbAx
(M:反復行列)
nnnnnn
n
n
a
aa
aaa
aaaaaa
00
0000
, 22
11
21
22221
11211
DA
000
000
,
0
00000
2
112
21
21
n
n
nn
aaa
aa
aUL
24
証明:定常反復法の構成(2/2)Solver-Iterative
nixaba
xn
ijj
kjiji
ii
ki
11
,1
)()1(
nixaxaba
xi
j
n
ij
kjij
kjiji
ii
ki
11 1
1 1
)()1()1(
ヤコビ法
ガウス・ザイデル法
)(1)1(
11 ,kk xULbDxDNULDM
)()1(1)1(
11 ,kkk UxLxbDxLDNULDM
25
証明:ヤコビ法の収束(1/2)Solver-Iterative
NbMxx
NbMxxNbMxx
NbMxx
)0()1(
)2()1(
)1()(
kk
kk )0(
)1()(
xxMxxMxx
k
kk
)0()( xxMxx kk
• k→∞の時,任意の初期値x(0)に対して, x(k)が解xに収束するためには,||M||<1である必要がある。
• スペクトル半径(絶対値最大固有値)(M)≦||M||より, (M)<1のとき, x(k)は解xに収束する
26
証明:ヤコビ法の収束(2/2)Solver-Iterative
ULDM 1
• 対角優位な行列のスペクトル半径は1より小さい:
n
iijj
a1
1maxA 列方向の絶対値の和の最大値
n
jiji
a1
maxA 行方向の絶対値の和の最大値
1max1
1
n
j ii
ij
i aa
ULD
1max1
11
n
j ii
ij
i aa
ULDULD
修正 p.16
27
収束条件と対角優位性(1/2)Solver-Iterative
75
2112
2
1
xx
解くべき連立一次方程式 真の解
31
2
1
xx
初期解
ガウス・ザイデル法
00
)0(2
)0(1
xx
4/92/5
)1(2
)1(1
xx
16/458/11
)2(2
)2(1
xx
64/18932/35
)3(2
)3(1
xx
niaan
ijjijii ,,2,1
,1
28
収束条件と対角優位性(2/2)Solver-Iterative
75
1221
2
1
xx
解くべき連立一次方程式 真の解
13
2
1
xx
初期解
ガウス・ザイデル法
00
)0(2
)0(1
xx
35
)1(2
)1(1
xx
1511
)2(2
)2(1
xx
6335
)3(2
)3(1
xx
niaan
ijjijii ,,2,1
,1
29
収束条件と対角優位性(3/3)Solver-Iterative
1424
1
512241213
3
2
1
xxx
解くべき連立一次方程式 真の解
初期解
000
)0(3
)0(2
)0(1
xxx
15
2
3
2
1
xxx
a11を変えて計算してみよう(自習課題){x1,x2,x3}={2,-5,1}となるように右辺調節
niaan
ijjijii ,,2,1
,1
30
{x1,x2,x3}={2,-5,1}となるよう右辺を調節
Solver-Iterative
3
2
111
15
2
51224121
bbba
1424
72
15
2
51224121 1111 aa
Solver-Iterative
31
• 定常反復法(1)– ヤコビ法,ガウス・ザイデル法
• 非定常反復法– 共役勾配法
• 定常反復法(2)– SOR法
Solver-Iterative
32
非定常反復法:クリロフ部分空間法(1/2)Krylov Subspace Method xAIbxbAx
以下の反復式を導入しx0, x1, x2, ..., xkを求める:
11
11
1
kk
kk
kk
xrxAxb
xAIbx
kkwhere Axbr :残差ベクトル(residual)
1
00
k
iik rxx
111111
11
kkkkkk
kkkk
rAIrAxrArAxbxrAbAxbr
Solver-Iterative
33
非定常反復法:クリロフ部分空間法(2/2)Krylov Subspace Method
zkはk次のクリロフ部分空間(Krylov Subspace)に属するベクトル,問題はクリロフ部分空間からどのようにして解の近似ベクトルxkを求めるかにある:
0
1
1
1
100
1
1000
2
000
1
00
rAIIrAIrz
rAIrxrAIrxrxx
k
i
ik
i
ik
k
i
ik
ii
k
iik
01
02
00 ,,,, rArAArr k
Solver-Iterative 34
代表的な非定常反復法:共役勾配法
• Conjugate Gradient法,略して「CG」法– 最も代表的な「非定常」反復法
• 対称正定値行列(Symmetric Positive Definite:SPD)– 任意のベクトル{x}に対して{x}T[A]{x}>0– 全対角成分>0,全固有値>0,全部分行列式(主小行列式・首座行列式)>0と同値
• アルゴリズム– 最急降下法(Steepest Descent Method)の変種
– x(i)= x(i-1) + ip(i)
• x(i):反復解,p(i):探索方向,i:定数)
– 厳密解をyとするとき {x-y}T[A]{x-y}を最小とするような{x}を求める。
– 詳細は参考文献参照
• 例えば:森正武「数値解析(第2版)」(共立出版)
nnnnnn
n
n
n
n
aaaaa
aaaaaaaaaaaaaaaaaaaa
4321
444434241
334333231
224232221
114131211
det
nnnnnn
n
n
n
n
aaaaa
aaaaaaaaaaaaaaaaaaaa
4321
444434241
334333231
224232221
114131211
det
Solver-Iterative 35
共役勾配法(CG法)のアルゴリズム
Compute r(0)= b-[A]x(0)
for i= 1, 2, …i-1= r(i-1) r(i-1)if i=1p(1)= r(0)
elsei-1= i-1/i-2p(i)= r(i-1) + i-1 p(i-1)
endifq(i)= [A]p(i)
i = i-1/p(i)q(i)x(i)= x(i-1) + ip(i)r(i)= r(i-1) - iq(i)check convergence |r|
end
• 行列ベクトル積
• ベクトル内積
• ベクトル定数倍の加減(DAXPY)
x(i) : Vectori : Scalar
36
共役勾配法(CG法)のアルゴリズム
Compute r(0)= b-[A]x(0)
for i= 1, 2, …i-1= r(i-1) r(i-1)if i=1p(1)= r(0)
elsei-1= i-1/i-2p(i)= r(i-1) + i-1 p(i-1)
endifq(i)= [A]p(i)
i = i-1/p(i)q(i)x(i)= x(i-1) + ip(i)r(i)= r(i-1) - iq(i)check convergence |r|
end
Solver-Iterative
• 行列ベクトル積
• ベクトル内積
• ベクトル定数倍の加減(DAXPY)
x(i) : Vectori : Scalar
37
共役勾配法(CG法)のアルゴリズム
Compute r(0)= b-[A]x(0)
for i= 1, 2, …i-1= r(i-1) r(i-1)if i=1p(1)= r(0)
elsei-1= i-1/i-2p(i)= r(i-1) + i-1 p(i-1)
endifq(i)= [A]p(i)
i = i-1/p(i)q(i)x(i)= x(i-1) + ip(i)r(i)= r(i-1) - iq(i)check convergence |r|
end
Solver-Iterative
• 行列ベクトル積
• ベクトル内積
• ベクトル定数倍の加減(DAXPY)
x(i) : Vectori : Scalar
Solver-Iterative 38
共役勾配法(CG法)のアルゴリズム
x(i) : Vectori : Scalar
Compute r(0)= b-[A]x(0)
for i= 1, 2, …i-1= r(i-1) r(i-1)if i=1p(1)= r(0)
elsei-1= i-1/i-2p(i)= r(i-1) + i-1 p(i-1)
endifq(i)= [A]p(i)
i = i-1/p(i)q(i)x(i)= x(i-1) + ip(i)r(i)= r(i-1) - iq(i)check convergence |r|
end
• 行列ベクトル積
• ベクトル内積
• ベクトル定数倍の加減(DAXPY)
– Double– {y}= a{x} + {y}
Solver-Iterative 39
共役勾配法(CG法)のアルゴリズム
Compute r(0)= b-[A]x(0)
for i= 1, 2, …i-1= r(i-1) r(i-1)if i=1p(1)= r(0)
elsei-1= i-1/i-2p(i)= r(i-1) + i-1 p(i-1)
endifq(i)= [A]p(i)
i = i-1/p(i)q(i)x(i)= x(i-1) + ip(i)r(i)= r(i-1) - iq(i)check convergence |r|
end
x(i) : Vectori : Scalar
40
CG法アルゴリズムの導出(1/5)
bybxAxxAyyAyxAxx
AyyAyxAxyAxxyxAyx T
,,2,,,2,,,,,
yxAyx T
定数
bxAxxxf ,,21
AhhbAxhxfhxf ,21, 任意のベクトル h
Solver-Iterative
yを厳密解( Ay=b )とするとき,下式を最小にするxを求める:
従って,下記 f(x) を最小にするxを求めればよい:
41
bxAxxxf ,,21
AhhbAxhxfhxf ,21, •任意のベクトルh
AhhbAxhxf
AhhbhAxhbxAxx
bhbxAhhAhxAxhAxx
bhbxAhhxAxhx
bhxhxAhxhxf
,21,
,21,,,,
21
,,,21,
21,
21,
21
,,,21,
21
,)(,21
Solver-Iterative
42
CG法アルゴリズムの導出(2/5)
)()()1( kk
kk pxx
Solver-Iterative
(1)
CG法は任意の x(0) から始めて,f(x)の最小値を逐次探索する。今,k番目の近似値 x(k)と探索方向p(k)が決まったとすると:
)()()()()(2)()( ,,21 kkk
kkk
kk
kk xfAxbpApppxf
f(x(k+1)) を最小にするためには:
)()(
)()(
)()(
)()()()(
,,
,,0 kk
kk
kk
kk
kk
kk
k
Apprp
AppAxbppxf
)()( kk Axbr は第k近似に対する残差
43
CG法アルゴリズムの導出(3/5)
)()()1( kk
kk Aprr
残差 r(k)も以下の式によって計算できる:
本当のところは下記のように(k+1)回目に厳密解 y が求まれば良いのであるが,解がわかっていない場合は困難・・・
)1(1
)1(
kk
k pxy
)()()1()()1(
)()()1()1( ,k
kkkkk
kkkk
ApAxAxrrAxbrAxbr
Solver-Iterative
(2)
)0()0()()1()1( , prprp kk
kk
探索方向を以下の漸化式によって求める:
(3)
44
CG法アルゴリズムの導出(4/5)ところで,下式のような都合の良い直交関係がある:
従って以下が成立する:
0,0,, )()1()1(1
)()1()(
kkkk
kkk ApppApxyAp
0,,,
,,,,,
)()()()()()()(
)()()()()()(
)1()()1()()1()(
kkk
kkkk
kk
kk
kkkk
kk
kkkkkk
ApprpAprp
ApAxbppxAbpAxbpAxAypxyAp
)()(
)()(
,,
kk
kk
k Apprp
0, )1()( kk xyAp
Solver-Iterative
45
CG法アルゴリズムの導出(5/5)
)()(
)()1(
)()()()1()()()1()()1(
,,
0,,,,
kk
kk
k
kkk
kkkkk
kkk
AppApr
AppAprApprApp
0, )()1( kk App p(k) と p(k+1) が行列Aに関して共役(conjugate)
Solver-Iterative
(4)
)1()1(
)1()(
1 ,,
ii
ii
i AppApr
Compute p(0)=r(0)= b-[A]x(0)
for i= 1, 2, …calc. i-1x(i)= x(i-1) + i-1p(i-1)r(i)= r(i-1) – i-1[A]q(i-1)
check convergence |r|(if not converged)calc. i-1p(i)= r(i) + i-1 p(i-1)
end
)1()1(
)1()1(
1 ,,
ii
ii
i Apprp
46
CG法アルゴリズム
Solver-Iterative
任意の(i,j)に対して以下の共役関係が得られる:
N次元空間で互いに直交で一次独立な残差ベクトル r(k) はN個しか存在しない,従って共役勾配法は未知数がN個のときにN回以内に収束する⇒ 実際は丸め誤差の影響がある(条件数が大きい場合)
jiApp ji 0, )()(
)()()()()()( ,,,0, kkkkji rrrpjirr
探索方向p(k) ,残差ベクトルr(k)についても以下の関係が成立する:
Top 10 Algorithms in the 20th Century (SIAM)http://www.siam.org/news/news.php?id=637モンテカルロ法,シンプレックス法,クリロフ部分空間法,行列分解法,最適化Fortranコンパイラ,QR法,クイックソート,FFT,整数関係アルゴリズム,FMM(高速多重極法)
47
Proof (1/3)Mathematical Induction
数学的帰納法
Solver-Iterative
jiApp
jirrji
ji
0,0,
)()(
)()(
)()(
)()(
,,
kk
kk
k Apprp
(1)
(2)
(3)
(4)
)()()1( kk
kk Aprr
)0()0()()1()1( , prprp kk
kk
)()(
)()1(
,,
kk
kk
k AppApr
直交性
共役性
48
Proof (2/3)Mathematical Induction
数学的帰納法
Solver-Iterative
(*) is satisfied for jikjki where,
0,,
,,
,,,
)()1(1
)()(
)()1(1
)()()(
)()()()1()()()1(
kiik
kik
kii
ik
kik
kk
kikiik
AppApp
ApppApr
Aprrrrrr
jiApp
jirrji
ji
0,0,
)()(
)()(
if i < k
if i = k
0,,
,,
,,
,,,,
,,
,,,
)1()1(1
)1()1(1
)1(1
)1()1(1
)()1(1
)()()1(1
)()(
)()()()()()()()(
)()1(1
)()()(
)()()()()()1(
kkk
kkk
kk
kkk
kkk
kkkk
kk
kkkkkkk
kk
kk
kk
kkk
kk
kkkkk
Apprp
Aprprp
rrprr
rprrApprr
Appprr
Aprrrrr
(2)
(4)
(2)
(3)
(3)
(2)
(1)
(*)
(*)
(*)
(*) (1) )()(
)()(
,,
kk
kk
k Apprp
(1)
(2)
(3)
(4)
)()()1( kk
kk Aprr
)()1()1( kk
kk prp
)()(
)()1(
,,
kk
kk
k AppApr
kji 0または
49
Proof (3/3)Mathematical Induction
数学的帰納法
Solver-Iterative
jiApp
jirrji
ji
0,0,
)()(
)()(
(*)
0
,,, )()()()1()()1(
kk
kkkkk AppAprApp
(*) is satisfied for
0,1,
,,
)1()()1(
)()1(
)()()1()()1(
iik
k
ik
ikk
kik
rrr
Apr
ApprApp
if i < k
if i = k
(3)
(2)
(3)
(4)
(*) )()(
)()(
,,
kk
kk
k Apprp
(1)
(2)
(3)
(4)
)()()1( kk
kk Aprr
)()1()1( kk
kk prp
)()(
)()1(
,,
kk
kk
k AppApr
jikjki where, kji 0または
50Solver-Iterative
)()()()()()1(
1
)()1(1
)()()(
,,,
,,kkkkkk
k
kkk
kkk
rrrrrp
rprrp
(3)
kirp ki ,,1,0,0, )1()(
k
ij
jj
ik pxx1
)()1()1(
k
ij
jj
ik
ij
jj
i
k
ij
jj
ikk
AprApAxb
pxAbAxbr
1
)()1(
1
)()1(
1
)()1()1()1(
0,,
,,
1
)()()1()(
1
)()1()()1()(
k
ij
jj
iii
k
ij
jj
iiki
Apprp
Aprprp
=0 =0
0,,
,,)1()()1()(
)1()()1()(
kkkk
kkkk
rpAxbpAxAypxyAp
)()(
)()(
,,
kk
kk
k Apprp
(1)
(2)
(3)
(4)
)()()1( kk
kk Aprr
)()1()1( kk
kk prp
)()(
)()1(
,,
kk
kk
k AppApr
51
k,k
k
kk
k
kkkkk
kk
kk
kk
kk
k
rrrrrApr
rrrr
AppApr
)1()1()1()()1()()1(
)()(
)1()1(
)()(
)()1(
,,,
,,
,,
実際はk,kはもうちょっと簡単な形に変形できる:
)()()()(
)()(
)()(
)()(
)()(
)()(
)()(
,,,,
,,
,,
kkkk
kk
kk
kk
kk
kk
kk
k
rrrpApprr
Apprp
AppAxbp
Solver-Iterative
Solver-Iterative 52
共役勾配法(CG法)のアルゴリズム
Compute r(0)= b-[A]x(0)
for i= 1, 2, …i-1= r(i-1) r(i-1)if i=1p(1)= r(0)
elsei-1= i-1/i-2p(i)= r(i-1) + i-1 p(i-1)
endifq(i)= [A]p(i)
i = i-1/p(i)q(i)x(i)= x(i-1) + ip(i)r(i)= r(i-1) - iq(i)check convergence |r|
end
x(i) : Vectori : Scalar
)()(
)1()1(
,,
ii
ii
i Apprr
)2()2(
)1()1(
1 ,,
ii
ii
i rrrr
1 i 2 i
1 i
do i= 1, NR(i)= B(i)do j= 1, NR(i)= R(i) - AMAT(i,j)*X(j)
enddoenddo
BNRM2= 0.0D0do i= 1, N
BNRM2= BNRM2 + B(i) **2enddo
53
プログラム例(CG法)(1/3)Solver-Iterative
AMAT(i,j): Aのaij成分B(i): bの各成分X(i): xの各成分
P(i): pの各成分Q(i): qの各成分R(i): rの各成分
Compute r(0)= b-[A]x(0)
for i= 1, 2, …i-1= r(i-1) r(i-1)if i=1p(1)= r(0)
elsei-1= i-1/i-2p(i)= r(i-1) + i-1 p(i-1)
endifq(i)= [A]p(i)
i = i-1/p(i)q(i)x(i)= x(i-1) + ip(i)r(i)= r(i-1) - iq(i)check convergence |r|
end
do iter= 1, ITERmaxRHO= 0.d0do i= 1, NRHO= RHO + R(i)*R(i)
enddo
if ( iter.eq.1 ) thendo i= 1, N
P(i)= R(i)enddoelseBETA= RHO / RHO1do i= 1, N
P(i)= R(i) + BETA*P(i)enddo
endif
do i= 1, NQ(i)= 0.d0do j= 1, N
Q(i)= Q(i) + AMAT(i,j)*P(j)enddo
enddo
...enddo
54
プログラム例(CG法)(2/3)Solver-Iterative
Compute r(0)= b-[A]x(0)
for i= 1, 2, …i-1= r(i-1) r(i-1)if i=1p(1)= r(0)
elsei-1= i-1/i-2p(i)= r(i-1) + i-1 p(i-1)
endifq(i)= [A]p(i)
i = i-1/p(i)q(i)x(i)= x(i-1) + ip(i)r(i)= r(i-1) - iq(i)check convergence |r|
end
do iter= 1, ITERmax...
C1= 0.d0do i= 1, NC1= C1 + P(i)*Q(i)
enddoALPHA= RHO / C1
do i= 1, NX(i)= X(i) + ALPHA * P(i)R(i)= R(i) - ALPHA * Q(i)
enddo
DNRM2 = 0.0do i= 1, NDNRM2= DNRM2 + R(i)**2
enddo
RESID= dsqrt(DNRM2/BNRM2)
if ( RESID.le.EPS) exit
RHO1 = RHO
enddo
55
プログラム例(CG法)(3/3)Solver-Iterative
Compute r(0)= b-[A]x(0)
for i= 1, 2, …i-1= r(i-1) r(i-1)if i=1p(1)= r(0)
elsei-1= i-1/i-2p(i)= r(i-1) + i-1 p(i-1)
endifq(i)= [A]p(i)
i = i-1/p(i)q(i)x(i)= x(i-1) + ip(i)r(i)= r(i-1) - iq(i)check convergence |r|
end
i-1=i-2
2
2
)(
b
Axb k
56
一次元熱伝導方程式支配方程式:熱伝導率=1(一様)
Solver-Iterative
xxBFxBF
xxdxdxBF
dxd
max2
max2
2
21
@0,0@0,0
一様体積発熱 BF
=0 断熱
以下のような離散化(要素中心で従属変数を定義)をしている
=0
57
一次元熱伝導方程式解析解
Solver-Iterative
xxBFxBF max2
21
=0X=0
断熱となっているのはこの面,しかし温度は計算されない(X=Xmax)。
12255.98505.1200495.494921 2
x=1.d0,メッシュ数=50,とすると,Xmax=49.5,●の点のX座標は49.0となる。BF=1.0d0とすると●での温度は:
58
計算例(N=50):Jacobi法Solver-Iterative
1000 iters, RESID= 5.443248E-01 PHI(N)= 4.724513E+022000 iters, RESID= 3.255667E-01 PHI(N)= 7.746137E+023000 iters, RESID= 1.947372E-01 PHI(N)= 9.555996E+02...34000 iters, RESID= 2.347113E-08 PHI(N)= 1.225000E+0335000 iters, RESID= 1.403923E-08 PHI(N)= 1.225000E+0335661 iters, RESID= 9.999053E-09 PHI(N)= 1.225000E+03
1 0.000000E+00 0.000000E+002 4.899999E+01 4.900000E+013 9.699999E+01 9.700000E+014 1.440000E+02 1.440000E+025 1.900000E+02 1.900000E+02...
41 1.180000E+03 1.180000E+0342 1.189000E+03 1.189000E+0343 1.197000E+03 1.197000E+0344 1.204000E+03 1.204000E+0345 1.210000E+03 1.210000E+0346 1.215000E+03 1.215000E+0347 1.219000E+03 1.219000E+0348 1.222000E+03 1.222000E+0349 1.224000E+03 1.224000E+0350 1.225000E+03 1.225000E+03
反復回数最大残差(50)
数値解,解析解
12255.98505.1200495.494921 2
59
計算例(N=50):Gauss-Seidel 法Solver-Iterative
1000 iters, RESID= 3.303725E-01 PHI(N)= 7.785284E+022000 iters, RESID= 1.182010E-01 PHI(N)= 1.065259E+033000 iters, RESID= 4.229019E-02 PHI(N)= 1.167848E+03...16000 iters, RESID= 6.657001E-08 PHI(N)= 1.225000E+0317000 iters, RESID= 2.381754E-08 PHI(N)= 1.225000E+0317845 iters, RESID= 9.993196E-09 PHI(N)= 1.225000E+03
1 0.000000E+00 0.000000E+002 4.899999E+01 4.900000E+013 9.699999E+01 9.700000E+014 1.440000E+02 1.440000E+025 1.900000E+02 1.900000E+02...
41 1.180000E+03 1.180000E+0342 1.189000E+03 1.189000E+0343 1.197000E+03 1.197000E+0344 1.204000E+03 1.204000E+0345 1.210000E+03 1.210000E+0346 1.215000E+03 1.215000E+0347 1.219000E+03 1.219000E+0348 1.222000E+03 1.222000E+0349 1.224000E+03 1.224000E+0350 1.225000E+03 1.225000E+03
反復回数最大残差(50)
数値解,解析解
60
計算例(N=50):CG法
Solver-Iterative
49 iters, RESID= 0.000000E-00 PHI(N)= 1.225000E+03
1 0.000000E+00 0.000000E+002 4.899999E+01 4.900000E+013 9.699999E+01 9.700000E+014 1.440000E+02 1.440000E+025 1.900000E+02 1.900000E+02...
41 1.180000E+03 1.180000E+0342 1.189000E+03 1.189000E+0343 1.197000E+03 1.197000E+0344 1.204000E+03 1.204000E+0345 1.210000E+03 1.210000E+0346 1.215000E+03 1.215000E+0347 1.219000E+03 1.219000E+0348 1.222000E+03 1.222000E+0349 1.224000E+03 1.224000E+0350 1.225000E+03 1.225000E+03
反復回数最大残差(50)数値解,解析解
12255.98505.1200495.494921 2
49回目に収束していることに注意(未知数は49個)
Solver-Iterative
61
• 定常反復法(1)– ヤコビ法,ガウス・ザイデル法
• 非定常反復法– 共役勾配法
• 定常反復法(2)– SOR法
62
SOR法(Successive Over-Relaxation)逐次加速緩和法
Solver-Iterative
ヤコビ法
ガウス・ザイデル法
)(1)1(
11 ,kk xULbDxDNULDM
)()1(1)1(
11 ,kkk UxLxbDxLDNULDM
SOR法
)()1(1)1(
)()1()()1(
11
20,1
kkk
kkkk
UxLxbDξxξxx
LDNUDLDM
ガウス・ザイデル法の解
=1の場合,ガウス・ザイデル法と一致
do iter= 1, N*100do i= 1, N
RESID= B(i)do j= 1, Nif (j.ne.i) then
RESID= RESID - A(i,j)*X(j)endif
enddoX(i)= RESID/A(i,i)
enddo
63
プログラム例(ガウス・ザイデル法)Solver-Iterative
A(i,j): Aのaij成分B(i): bの各成分X(i): xの各成分
)()1(1)1(
11 ,kkk UxLxbDxLDNULDM
do iter= 1, N*100do i= 1, N
RESID= B(i)do j= 1, Nif (j.ne.i) then
RESID= RESID - A(i,j)*X(j)endif
enddoX(i)= OMEGA*(RESID/A(i,i)-X(i)) + X(i)
enddo
64
プログラム例(SOR法)Solver-Iterative
A(i,j): Aのaij成分B(i): bの各成分X(i): xの各成分
)()1(1)1(
)()1()()1(
1
1 1
kkk
kkkk
UxLxbDξxξxx
LDN
UDLDM
65
一次元熱伝導方程式解析解
Solver-Iterative
xxBFxBF max2
21
=0X=0
断熱となっているのはこの面,しかし温度は計算されない(X=Xmax)。
12255.98505.1200495.494921 2
x=1.d0,メッシュ数=50,とすると,Xmax=49.5,●の点のX座標は49.0となる。BF=1.0d0とすると●での温度は:
66Solver-Iterative
反復回数
Jacobi 35,561Gauss-Seidel 17,845CG 49SOR(=0.70) 33,131SOR(=0.80) 26,762SOR(=0.90) 21,808SOR(=1.00) 17,845SOR(=1.30) 9,614SOR(=1.50) 5,955SOR(=1.60) 4,469SOR(=1.70) 3,155SOR(=1.80) 1,980SOR(=1.90) 886
反復回数
SOR(=1.91) 773SOR(=1.92) 653SOR(=1.93) 520SOR(=1.94) 342SOR(=1.95) 392SOR(=1.96) 497SOR(=1.97) 682SOR(=1.98) 1,020SOR(=1.99) 2,028SOR(=2.00) NA
67
の範囲Solver-Iterative
11 ,1 LDNUDLDM
i:Mの固有値(i=1~N)
再びスペクトル半径
N
ii
1
det M
N
11det1det
1detdet1detdet
1detdet
1
1
1
1
IUDI
UDDUDLD
UDLDM
11max N Nii
M
|1-|<1となるので,0<<2,通常は1<<2
Solver-Iterative
68
反復法(Iterative Method)• 利点
– 直接法と比較して,メモリ使用量,計算量が少ない。
– 並列計算には適している。
• 欠点– 収束性が,アプリケーション,境界条件の影響を受けやすい。
• 収束しない(答えが得られない)可能性がある
– 前処理(preconditioning)が重要。• 条件数(condition number)の大きい問題
• 今日紹介した例は非常に解きやすい問題,難しい問題の対処法については最終回(1月24日)に「さわり」を紹介する。