Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
線形方程式の解法:反復法
中島 研吾東京大学情報基盤センター
同 大学院情報理工学系研究科数理情報学専攻
数値解析 (科目番号 03-500081)
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で無次元化した「残差ノルム」が予め設定した値 より小さくなった場合に収束したとみなす。の値は要求される精度によって異なる。
16
Scilabによるプログラム(1/2)http://nkl.cc.u-tokyo.ac.jp/16n/
Solver-Direct
クリックして Iterative.zipをダウンロード
17
Scilabによるプログラム(2/2)http://nkl.cc.u-tokyo.ac.jp/16n/
• Iterative.zipを解凍⇒直下に Iterative というディレクトリ
– Scilabプログラムのソースファイル(*.sce,*.sci)– README.txt(下記:必ず読むこと)
Solver-Direct
a_jacobi: 3x3 Jacobia_gs : 3x3 Gauss-Seidela11diag : 3x3 Gauss-Seidel a11 can be changed
b_cg : 1D CGb_gs : 1D Gauss-Seidelb_jacobi: 1D Jacobib_sor : 1D SORプログラム名 内容
clear
// Initialization
n=3;
A=[3,1,-1;1,-4,2;2,-1,5];X=[2;-5;1];
for i=1:nB(i)=0;for j=1:nB(i)= B(i) + A(i,j)*X(j);
endend
X=[0;0;0]; 初期値
BNRM=0.0;for i=1:nBNRM= BNRM + B(i)*B(i);
endBNRM= sqrt(BNRM);
printf("EPS? ¥n"); EPS= scanf(“%e”); 収束判定値
18
例(ヤコビ法)a_jacobiSolver-Iterative
A(I,j): Aのaij成分B(i): bの各成分X(i): xの各成分X0(i): xの各成分(1反復前のX(i))
n
iib
1
2
2b EPS? 収束判定値
1.0e-08くらいが普通
14522424
03
321
321
321
xxxxxx
xxx
)1,5,2(),,( )(3
)(2
)(1 kkk xxx
for iter= 1:n*100for k=1:nX0(k)= X(k);
end
for i=1:nRESID= B(i);for j=1:nif (i~=j) thenRESID= RESID - A(i,j)*X0(j);
endendX(i)= RESID/A(i,i); 本当は逆数を乗じた方が良い
end
(収束判定)
end
19
例(ヤコビ法)a_jacobiSolver-Iterative
A(i,j): Aのaij成分B(i): bの各成分X(i): xの各成分X0(i): xの各成分(1反復前のX(i))
nixaba
xn
ijj
kjiji
ii
ki
11
,1
)()1(
for iter= 1:n*100
for i=1:nRESID= B(i);for j=1:nif (i~=j) thenRESID= RESID - A(i,j)*X(j);
endendX(i)= RESID/A(i,i); 本当は逆数を乗じた方が良い
end
(収束判定)
end
20
例(ガウス・ザイデル法)a_gsSolver-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.0;for i=1:nBNRM= BNRM + B(i)*B(i);
endBNRM= sqrt(BNRM);
...
for iter= 1:n*100
(反復計算)
VAL= 0.0;for i= 1:nRESID= RHS(i);for j= 1:nRESID= RESID - AMAT(i,j)*X(j);
endVAL= VAL + RESID^2;
endVAL= sqrt(VAL/BNRM2);
if VAL<EPS thenbreak;
endend
21
例(収束判定)Solver-Iterative
n
iib
1
2
2b
2
2
)(
b
Axb k
n
i
n
j
kjiji
k xab1
2
1
)(
2
)(Axb
反復計算と同じくらいのコスト:結構時間がかかる(数回に1回の判定でも良い)
収束したと判定(=EPS)
BNRM=0.0;for i=1:nBNRM= BNRM + B(i)*B(i);
endBNRM= sqrt(BNRM);
...
for iter= 1:n*100
(反復計算)
VAL= 0.0;for i= 1:nVAL= VAL + (X(i)-X0(i))^2;
endVAL= sqrt(VAL/BNRM2);
if VAL<EPS thenbreak;
end
end
22
例(収束判定:代替法)Solver-Iterative
n
iib
1
2
2b
2
2
)()1(
b
xx kk
解の変化が少なくなったら計算をやめる
計算量は減少,必ずしも正しい解に収束していない場合がある
23
数値例(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
ヤコビ法
24
数値例(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正解
25
ヤコビ法,ガウス・ザイデル法の収束条件と対角優位性
Solver-Iterative
係数行列Aが以下の性質を満たしていれば、どの初期点から始めても真の解に収束する.(対角優位性:収束のための十分条件)
niaan
ijjijii ,,2,1
,1
((狭義行)対角優位)
第 i 行の、対角項以外の成分の絶対値の和よりも対角項の絶対値が大きい場合
対角優位
• 連立一次方程式:
• 定常反復法:
• 以下のように考える:A= D + L + U
26
証明:定常反復法の構成(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
27
証明:定常反復法の構成(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
28
証明:ヤコビ法の収束(1/2)Solver-Iterative
NbMxx
NbMxxNbMxx
NbMxx
)0()1(
)2()1(
)1()(
kk
kk )0(
)1()(
xxMxxMxx
k
kk
)0()( xxMxx kk
• k→∞の時, ||M||<1であれば,任意の初期値x(0)に対して, x(k)が解xに収束する
29
証明:ヤコビ法の収束(2/2)Solver-Iterative
ULDM 1
• 対角優位な行列において ||M||<1が満たされる
• 対角優位な行列のスペクトル半径は1より小さい
n
iijj
a1
1maxA 列方向の絶対値の和の最大値
n
jiji
a1
maxA 行方向の絶対値の和の最大値
1max,1
1
n
ijj ii
ij
i aa
ULD
1max,1
11
n
ijj ii
ij
i aa
ULDULD
30
収束条件と対角優位性(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
31
収束条件と対角優位性(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
32
収束条件と対角優位性(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
a11diag.sce
33
{x1,x2,x3}={2,-5,1}となるよう右辺を調節
Solver-Iterative
3
2
111
15
2
51224121
bbba
1424
72
15
2
51224121 1111 aa
Solver-Iterative
34
• 定常反復法(1)– ヤコビ法,ガウス・ザイデル法
• 非定常反復法– 共役勾配法
• 定常反復法(2)– SOR法
Solver-Iterative
35
非定常反復法:クリロフ部分空間法(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
11111
11
kkkkk
kkkk
rAIArrArAxbxrAbAxbr
Solver-Iterative
36
非定常反復法:クリロフ部分空間法(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 37
代表的な非定常反復法:共役勾配法
• 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 38
共役勾配法(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
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
Solver-Iterative
• 行列ベクトル積
• ベクトル内積
• ベクトル定数倍の加減(DAXPY)
x(i) : Vectori : Scalar
40
共役勾配法(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 41
共役勾配法(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 42
共役勾配法(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
43
CG法アルゴリズムの導出(1/5)
bybxAxxAyyAyxAxx
AyyAyxAxyAxxyxAyx T
,,2,,,2,,,,,
yxAyx T
定数
bxAxxxf ,,21
AhhbAxhxfhxf ,21, 任意のベクトル h
Solver-Iterative
yを厳密解( Ay=b )とするとき,下式を最小にするxを求める:
従って,下記 f(x) を最小にするxを求めればよい:
44
bxAxxxf ,,21
AhhbAxhxfhxf ,21, •任意のベクトルh
AhhbAxhxf
AhhbhAxhbxAxx
bhbxAhhAhxAxhAxx
bhbxAhhxAxhx
bhxhxAhxhxf
,21,
,21,,,,
21
,,,21,
21,
21,
21
,,,21,
21
,)(,21
Solver-Iterative
45
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近似に対する残差
46
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)
47
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
48
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]p(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
49
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(高速多重極法)
50
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
直交性
共役性
51
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)
(3)
(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
52
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,
53Solver-Iterative
0,,,,
,,
,,,0,
)()()()()()()()(
)()1(1
)()()(
)()()()()()1(
)()1(
kkkkkkk
kk
kk
kk
kkk
kk
kkkkk
kk
rprrApprr
Appprr
Aprrrrrrr
(2)
(3)
(*) (1)
)()(
)()(
,,
kk
kk
k Apprp
(1)
(2)
(3)
(4)
)()()1( kk
kk Aprr
)()1()1( kk
kk prp
)()(
)()1(
,,
kk
kk
k AppApr
)()()()( ,, kkkk rprr
54
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 55
共役勾配法(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
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
一次元熱伝導方程式:差分法(詳細:偏微分方程式),支配方程式:熱伝導率=1(一様)
Solver-Iterative
• ×(点i ~点i+1の中央点)における微分係数の近似値
x x
i-1 i i+1×
xdxd ii
i
1
2/1
x→0: 真の微分係数
• 点iにおいて成立する方程式:線形方程式
NiBFx
BFx
xxBFx
dxd
dxd
BFdxd
iii
iiii
ii
i
~1022
11
11
2/12/12
2
n = 50;dx= 1.0;BF= 1.0;
ITERmax= n*100;EPS = 1.e-08;
for i=1:nPHI(i)=0;RHS(i)=-BF*dx;W(1,i)=0;W(2,i)=0;W(3,i)=0;for j=1:nAMAT(i,j)=0;
endend
59
例(CG法)b_cg(1/6)Solver-Iterative
AMAT(i,j): Aのaij成分RHS(i) : bの各成分PHI(i) : xの各成分W(1~3,i) : 共役勾配法で使用されるベクトルの各成分
NiBFx
iii ~1022
11
NixBFx
iii ~102 11
NixBFx
iii ~12 11
体積積分 x
60
例(CG法)b_cg(2/6)Solver-Iterative
for i=2:n-1for j=1:nif i==j thenAMAT(i,j)=-2.0/dx;
endif j==i-1 thenAMAT(i,j)=1.0/dx;
endif j==i+1 thenAMAT(i,j)=1.0/dx;
endend
end
AMAT(i,i )=-2.0/dx;AMAT(i,i-1)=+1.0/dx;AMAT(i,i+1)=+1.0/dx;
NixBFx
iii ~12 11
61
例(CG法)b_cg(3/6)Solver-Iterative
AMAT(1,1)=1.0; 境界条件@x=0AMAT(1,2)=0.0;AMAT(2,1)=0.0; 対称行列RHS(1)=0.0;AMAT(n,n )=-1.0/dx; 係数@x=xmaxAMAT(n,n-1)= 1.0/dx;
R= 1;P= 2;Q= 3;
x x
n-1 n n+1:仮想点
212/12/1
2
2
xxdxd
dxd
dxd nnnn
n
×
max@0 xxdxd
:断熱
W(R,i)= W(1,i): rW(P,i)= W(2,i): pW(Q,i)= W(3,i): q
// {r0}= {b} - [A]{xini}
for i=1:nW(R,i)=RHS(i);for j=1:nW(R,i)= W(R,i)-AMAT(i,j)*PHI(j);
endend
BNRM2=0.0;RHO =0.0;for i=1:nBNRM2= BNRM2 + RHS(i)^2;RHO = RHO + W(R,i)^2;
end
62
例(CG法)b_cg(4/6)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
for iter=1:ITERmax
if iter==1 thenfor i=1:nW(P,i)= W(R,i);
endelseBETA= RHO/RHO1;for i=1:nW(P,i)= W(R,i) + BETA*W(P,i);
endend
for i=1:nW(Q,i)=0.0;for j=1:nW(Q,i)= W(Q,i) + AMAT(i,j)*W(P,j);
endend
…end
63
例(CG法)b_cg(5/6)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
for iter=1:ITERmax…C1= 0.0;for i=1:nC1= C1 + W(P,i)*W(Q,i);
endALPHA= RHO/C1;
for i=1:nPHI(i)= PHI(i) + ALPHA*W(P,i);W(R,i)= W(R,i) - ALPHA*W(Q,i);
end
RHO1= RHO;RHO = 0.0;for i=1:nRHO= RHO + W(R,i)^2;
end
RESID= sqrt(RHO/BNRM2);if RESID<EPS thenbreak;
endend
64
例(CG法)b_cg(6/6)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
65
計算例(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
66
計算例(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)
数値解,解析解
67
計算例(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
68
• 定常反復法(1)– ヤコビ法,ガウス・ザイデル法
• 非定常反復法– 共役勾配法
• 定常反復法(2)– SOR法
69
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の場合,ガウス・ザイデル法と一致
for iter=1:ITERmaxfor i=1:nRESID= RHS(i);for j=1:nif (i~=j) thenRESID= RESID - AMAT(i,j)*PHI(j);
endendPHI(i)= RESID/AMAT(i,i);
endend
70
例(ガウス・ザイデル法)b_gsSolver-Iterative
A(i,j) : Aのaij成分RHS(i): bの各成分PHI(i) : xの各成分
)()1(1)1(
11 ,kkk UxLxbDxLDNULDM
for iter=1:ITERmaxfor i=1:nRESID= RHS(i);for j=1:nif (i~=j) thenRESID= RESID - AMAT(i,j)*PHI(j);
endendPHI(i)= (RESID/AMAT(i,i)-PHI(i))*OMG + PHI(i);
endend
71
例(SOR法)b_sorSolver-Iterative
)()1(1)1(
)()1()()1(
1
1 1
kkk
kkkk
UxLxbDξxξxx
LDN
UDLDM
A(i,j) : Aのaij成分RHS(i): bの各成分PHI(i) : xの各成分
ガウス・ザイデル法の解
72
一次元熱伝導方程式解析解
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とすると●での温度は:
73Solver-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
74
の範囲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-|≦(M)≦||M||<1となるためには,0<<2,通常は1<<2
Solver-Iterative
75
反復法(Iterative Method)• 利点
– 直接法と比較して,メモリ使用量,計算量が少ない。
– 並列計算には適している。
• 欠点– 収束性が,アプリケーション,境界条件の影響を受けやすい。
• 収束しない(答えが得られない)可能性がある
– 前処理(preconditioning)が重要。• 条件数(condition number)の大きい問題
• 今日紹介した例は非常に解きやすい問題,難しい問題の対処法については参考資料「前処理」を参照されたい。