MATLAB Function Reference    
gmres

一般化最小残差法(リスタート付き)

表示

詳細

x = gmres(A,b) は、線形方程式 A*x = bx に対して、解こうとします。nn 列の係数行列 A は、正方である必要があり、列ベクトル b は、長さ n である必要があります。A は、afun(x) が、A*x を出力するような関数 afun でも構いません。

gmres が収束する場合、この影響を示すメッセージが表示されます。 gmres が、設定した繰り返し回数に達しても収束しなかったり、何らかの理由で停止した場合、ワーニングメッセージとして、相対残差 norm(b-A*x)/norm(b) や停止したときの繰り返し回数を表示します。

gmres(A,b,restart) は、restart 回の繰り返し毎、方法を再スタートします。restart[] の場合、gmres は、デフォルトの n を使い、実際には再スタートを行いません。

gmres(A,b,restart,tol) は、方法に関するトレランスを指定します。tol が、[] の場合、gmres は、デフォルト 1e-6 を使います。

gmres(A,b,restart,tol,maxit) は、繰り返し最大回数を設定します。maxit[]の場合、gmres はデフォルト min(n/restart,10) を使います。

gmres(A,b,restart,tol,maxit,M) とgmres(A,b,restart,tol,maxit,M1,M2) は、前提条件子 M、または、M = M1*M2 を使って、inv(M)*A*x = inv(M)*bx に対して効率良く解きます。M[] の場合、gmres は、前提条件子を適用しません。 M は、M\x を戻す関数です。

gmres(A,b,restart,tol,maxit,M1,M2,x0) は、初期推定値を指定します。x0[] の場合、gmres は、デフォルトのすべての要素がゼロを使います。

gmres(afun,b,restart,tol,maxit,m1fun,m2fun,x0,p1,p2,...) は、パラメータを関数 afun(x,p1,p2,...), m1fun(x,p1,p2,...), m2fun(x,p1,p2,...)に渡します。

[x,flag] = gmres(A,b,...) は、収束フラグも出力します。

フラグ
収束
0
gmres は、maxit 以内の繰り返し回数で、希望するトレランス tol に収束します。
1
gmres は、くり返し回数が、maxit に達しているが、収束していません。
2
前提条件 M の条件数が悪い
3
gmres は、計算を進めていません(連続する2回の繰り返しの結果が同じでした)。

flag0でない場合、戻される解 x は、 すべての繰り返しで計算された中で、最小のノルム残差をもつ解です。flag の出力が指定されている場合、メッセージは表示されません。

[x,flag,relres] = gmres(A,b,...) は、相対残差 norm(b-A*x)/norm(b) も出力します。flag0 の場合、relres <= tol になります。

[x,flag,relres,iter] = gmres(A,b,...) は、x が計算される点で、外側の繰り返しと内側の繰り返しを共に出力します。ここで、0 <= iter(1) <= maxit0 <= iter(2) <= restartです。

[x,flag,relres,iter,resvec] = gmres(A,b,...) は、各内側の繰り返しで、norm(b-A*x0) を含む残差ノルムのベクトルも出力します。

例題

例題 1.

一方、つぎの行列-ベクトル積関数と

つぎの前提条件後退関数を使って

gmresへの入力とします。

afunmfun は、共に、gmres への特別な入力 n = 21 を含んでいることに注意してください。

例題 2.

gmres は、デフォルトの10回の外側の繰り返しの中で、デフォルトのトレランス 1e-6 に収束しないので、flag 1 になります。

上三角 U1 は、対角要素上にゼロをもち、gmres は、バックスラッシュを使って、U1*y = r のようなシステムを y に関して解こうとしたとき、最初の繰り返しで失敗するので、flag1 2 になります。

gmres は、1e-6 のドロップトレランスをもつ不完全 LU 分解を前提条件子として、繰り返し回数が、4、6、8で再スタートしたときに収束するので、flag4, flag6, flag8 は、すべて、0 になります。これは、相対残差に対し、外側繰り返し回数をプロットすることにより、確認できます。これら三つのプロットを組み合わせたものは、繰り返し回数 4と6で再スタートをはっきりと示しています。計算される繰り返し回数の総数は、restart のより小さい値より大きい可能性がありますが、保存されている長さ n ベクトルの数は少なくなり、この手法の中で実際に行われる繰り返し総数は、それに比例して少なくなります。

参考

bicg, bicgstab, cgs, lsqr, luinc, minres, pcg, qmr, symmlq

@ (関数ハンドル), \ (バックスラッシュ)

参考文献

Barrett, R., M. Berry, T. F. Chan, et al., Templates for the Solution of Linear Systems: Building Blocks for Iterative Methods, SIAM, Philadelphia, 1994.

Saad, Youcef and Martin H. Schultz, "GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems", SIAM J. Sci. Stat. Comput., July 1986, Vol. 7, No. 3, pp. 856-869.


 global gplot