75
線形方程式の解法:反復法 中島 研吾 東京大学情報基盤センター 大学院情報理工学系研究科数理情報学専攻 数値解析 (科目番号 03-500081)

線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

線形方程式の解法:反復法

中島 研吾東京大学情報基盤センター

同 大学院情報理工学系研究科数理情報学専攻

数値解析 (科目番号 03-500081)

Page 2: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

Solver-Iterative

2

直接法(Direct Method)• Gaussの消去法,完全LU分解他

– 行列の変形,逆行列に相当するものの計算

• 利点– 安定,幅広いアプリケーションに適用可能

• Pivoting– 疎行列,密行列いずれにも適用可能

• 欠点– 反復法よりもメモリ,計算時間を必要とする

• 密行列の場合,O(N3 )の計算量

– 大規模な計算向けではない• O(N2 )の記憶容量,O(N3 )の計算量

Page 3: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 4: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 5: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

Solver-Iterative

5

反復法(Iterative Method)(続き)

• 利点– 直接法と比較して,メモリ使用量,計算量が少ない。

– 並列計算には適している。

• 欠点– 収束性が,アプリケーション,境界条件の影響を受けやすい。

• 収束しない(答えが得られない)可能性がある

– 前処理(preconditioning)が重要。

Page 6: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

Solver-Iterative

6

• 定常反復法(1)– ヤコビ法,ガウス・ザイデル法

• 非定常反復法– 共役勾配法

• 定常反復法(2)– SOR法

Page 7: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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)における値

Page 8: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 9: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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倍くらいの速さと言われている)

Page 10: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 11: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

11

幾何学的解釈:直線の交点Solver-Iterative

02 21 xx

21

x321 xx

31)0(x

解くべき連立一次方程式 真の解

初期解:例えば

Page 12: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 13: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 14: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 15: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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で無次元化した「残差ノルム」が予め設定した値 より小さくなった場合に収束したとみなす。の値は要求される精度によって異なる。

Page 16: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

16

Scilabによるプログラム(1/2)http://nkl.cc.u-tokyo.ac.jp/16n/

Solver-Direct

クリックして Iterative.zipをダウンロード

Page 17: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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プログラム名 内容

Page 18: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 19: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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(

Page 20: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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(

Page 21: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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)

Page 22: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

解の変化が少なくなったら計算をやめる

計算量は減少,必ずしも正しい解に収束していない場合がある

Page 23: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

ヤコビ法

Page 24: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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正解

Page 25: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

25

ヤコビ法,ガウス・ザイデル法の収束条件と対角優位性

Solver-Iterative

係数行列Aが以下の性質を満たしていれば、どの初期点から始めても真の解に収束する.(対角優位性:収束のための十分条件)

niaan

ijjijii ,,2,1

,1

((狭義行)対角優位)

第 i 行の、対角項以外の成分の絶対値の和よりも対角項の絶対値が大きい場合

対角優位

Page 26: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

• 連立一次方程式:

• 定常反復法:

• 以下のように考える: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

Page 27: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 28: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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に収束する

Page 29: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 30: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 31: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 32: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 33: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

33

{x1,x2,x3}={2,-5,1}となるよう右辺を調節

Solver-Iterative

3

2

111

15

2

51224121

bbba

1424

72

15

2

51224121 1111 aa

Page 34: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

Solver-Iterative

34

• 定常反復法(1)– ヤコビ法,ガウス・ザイデル法

• 非定常反復法– 共役勾配法

• 定常反復法(2)– SOR法

Page 35: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 36: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 37: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 38: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 39: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 40: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 41: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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}

Page 42: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 43: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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を求めればよい:

Page 44: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

44

bxAxxxf ,,21

AhhbAxhxfhxf ,21, •任意のベクトルh

AhhbAxhxf

AhhbhAxhbxAxx

bhbxAhhAhxAxhAxx

bhbxAhhxAxhx

bhxhxAhxhxf

,21,

,21,,,,

21

,,,21,

21,

21,

21

,,,21,

21

,)(,21

Solver-Iterative

Page 45: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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近似に対する残差

Page 46: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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)

Page 47: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 48: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 49: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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(高速多重極法)

Page 50: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

直交性

共役性

Page 51: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 52: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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,

Page 53: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 54: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 55: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 56: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

56

一次元熱伝導方程式:差分法支配方程式:熱伝導率=1(一様)

Solver-Iterative

xxBFxBF

xxdxdxBF

dxd

max2

max2

2

21

@0,0@0,0

一様体積発熱 BF

=0 断熱

以下のような離散化(要素中心で従属変数を定義)をしている

=0

Page 57: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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とすると●での温度は:

Page 58: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 59: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 60: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 61: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 62: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

// {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

Page 63: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 64: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 65: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 66: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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)

数値解,解析解

Page 67: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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個)

Page 68: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

Solver-Iterative

68

• 定常反復法(1)– ヤコビ法,ガウス・ザイデル法

• 非定常反復法– 共役勾配法

• 定常反復法(2)– SOR法

Page 69: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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の場合,ガウス・ザイデル法と一致

Page 70: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 71: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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の各成分

ガウス・ザイデル法の解

Page 72: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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とすると●での温度は:

Page 73: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 74: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

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

Page 75: 線形方程式の解法:反復法nkl.cc.u-tokyo.ac.jp/16n/SolverIterative.pdfSolver-Iterative 5 反復法(Iterative Method)(続き) • 利点 –直接法と比較して,メモリ使用量,計算量が少ない。–並列計算には適している。•

Solver-Iterative

75

反復法(Iterative Method)• 利点

– 直接法と比較して,メモリ使用量,計算量が少ない。

– 並列計算には適している。

• 欠点– 収束性が,アプリケーション,境界条件の影響を受けやすい。

• 収束しない(答えが得られない)可能性がある

– 前処理(preconditioning)が重要。• 条件数(condition number)の大きい問題

• 今日紹介した例は非常に解きやすい問題,難しい問題の対処法については参考資料「前処理」を参照されたい。