gmres
Generalized Minimum RESidual 法
呼び出し手順
[x,flag,err,iter,res] = gmres(A,b,[rstr,[tol,[maxi,[M,[x0]]]]])
引数
- A
n行n列行列または
A*x
を返す関数.A
が関数の場合,以下のようなヘッダを有すること:function y=A(x)
- b
右辺ベクトル
- x0
初期推定値ベクトル(デフォルト: zeros(n,1))
- M
プリコンディショナ: n行n列行列(デフォルト: eye(n,n))または
M*x
を返す関数. M が関数の場合,以下のようなヘッダを有すること:function y=M(x)
- rstr
リスタートまでの反復回数 (デフォルト: 10)
- maxi
最大反復回数 (デフォルト: n)
- tol
許容誤差 (デフォルト: 1e-6)
- x
解のベクトル
- err
最終残差ノルム
- iter
実行した反復回数
- flag
- 0 =
gmres
は,maxi
回の反復内に 指定した許容誤差に収束しました- 1 =
指定した
maxi
回では収束しませんでした
- res
残差ベクトル
説明
- GMRES
線形システム
Ax=b
をリスタート付きの Generalized Minimal residual法により解きます.- 詳細
このアルゴリズムの詳細は以下の文献に記述されています :
"Templates for the Solution of Linear Systems: Building Blocks for Iterative Methods", Barrett, Berry, Chan, Demmel, Donato, Dongarra, Eijkhout, Pozo, Romine, and Van der Vorst, SIAM Publications, 1993 (ftp netlib2.cs.utk.edu; cd linalg; get templates.ps).
"Iterative Methods for Sparse Linear Systems, Second Edition" Saad, SIAM Publications, 2003 (ftp ftp.cs.umn.edu; cd dept/users/saad/PS; get all_ps.zip).
例
// A および M が行列の場合 A=[ 94 0 0 0 0 28 0 0 32 0 0 59 13 5 0 0 0 10 0 0 0 13 72 34 2 0 0 0 0 65 0 5 34 114 0 0 0 0 0 55 0 0 2 0 70 0 28 32 12 0 28 0 0 0 0 87 20 0 33 0 0 0 0 0 28 20 71 39 0 0 0 10 0 0 32 0 39 46 8 0 32 0 0 0 12 33 0 8 82 11 0 0 65 55 0 0 0 0 11 100]; b=ones(10,1); [x,flag,err,iter,res] = gmres(A, b) M = eye(10, 10); [x,flag,err,iter,res] = gmres(A, b, 10, 1d-12, 20, M, zeros(10, 1)) // Aが行列, Mが関数の場合 A=[ 94 0 0 0 0 28 0 0 32 0 0 59 13 5 0 0 0 10 0 0 0 13 72 34 2 0 0 0 0 65 0 5 34 114 0 0 0 0 0 55 0 0 2 0 70 0 28 32 12 0 28 0 0 0 0 87 20 0 33 0 0 0 0 0 28 20 71 39 0 0 0 10 0 0 32 0 39 46 8 0 32 0 0 0 12 33 0 8 82 11 0 0 65 55 0 0 0 0 11 100]; b=ones(10,1); function y=Mtimesx(x) M = eye(10,10); y = M*x; endfunction [x,flag,err,iter,res] = gmres(A, b, 10, 1d-12, 20, Mtimesx, zeros(10, 1)) // A が関数, M が行列の場合 function y=Atimesx(x) A=[ 94 0 0 0 0 28 0 0 32 0 0 59 13 5 0 0 0 10 0 0 0 13 72 34 2 0 0 0 0 65 0 5 34 114 0 0 0 0 0 55 0 0 2 0 70 0 28 32 12 0 28 0 0 0 0 87 20 0 33 0 0 0 0 0 28 20 71 39 0 0 0 10 0 0 32 0 39 46 8 0 32 0 0 0 12 33 0 8 82 11 0 0 65 55 0 0 0 0 11 100]; y = A * x; endfunction b = ones(10,1); M = eye(10, 10); [x,flag,err,iter,res] = gmres(Atimesx, b) [x,flag,err,iter,res] = gmres(Atimesx, b, 10, 1d-12, 20, M, zeros(10,1)) // A および M が関数 function y=Atimesx(x) A=[ 94 0 0 0 0 28 0 0 32 0 0 59 13 5 0 0 0 10 0 0 0 13 72 34 2 0 0 0 0 65 0 5 34 114 0 0 0 0 0 55 0 0 2 0 70 0 28 32 12 0 28 0 0 0 0 87 20 0 33 0 0 0 0 0 28 20 71 39 0 0 0 10 0 0 32 0 39 46 8 0 32 0 0 0 12 33 0 8 82 11 0 0 65 55 0 0 0 0 11 100]; y = A * x; endfunction function y=Mtimesx(x) M = eye(10,10); y = M*x; endfunction [x,flag,err,iter,res] = gmres(Atimesx, b, 10, 1d-12, 20, Mtimesx, zeros(10,1))
Report an issue | ||
<< conjgrad | Linear Equations (Iterative Solvers) | qmr >> |