MATLAB Function Reference    
qmr

準最小残差法

表示

詳細

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

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

qmr(A,b,tol) は、許容誤差を指定します。tol[] の場合、qmr は、デフォルトの 1e-6 を使います。

qmr(A,b,tol,maxit) は、さらに最大の繰り返し回数を指定します。maxit[] の場合、qmr は、デフォルト min(n,20) を使います。

qmr(A,b,tol,maxit,M)qmr(A,b,tol,maxit,M1,M2) は、前提条件子 M、または、M = M1*M2 を使い、システム inv(M1)*A*inv(M2)*y = inv(M1)*by について、効率良く解きます。ここで、x = inv(M2)*y の関係が成り立ちます。M が、[] の場合、qmr は、前提条件子を適用しません。M は、mfun(x)M\x を戻したり、mfun(x,'transp')M'\x 戻したりする関数 mfun です。

qmr(A,b,tol,maxit,M1,M2,x0) は、初期推定を指定します。x0 が、[] の場合、qmr は、デフォルトのゼロベクトルを使います。

qmr(afun,b,tol,maxit,m1fun,m2fun,x0,p1,p2,...) は、パラメータ p1,p2,... を関数afun(x,p1,p2,...)afun(x,p1,p2,...,'transp') に渡し、同時に、前提条件子関数 m1funm2fun にも、それぞれ渡します。

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

フラグ
収束
0
qmr は、繰り返し回数maxit内で、希望する許容誤差tolに収束しました。
1
qmr は、maxit回の繰り返しを行いましたが、収束しませんでした。
2
前提条件子 M は、条件数が良くありません。
3
qmr は計算を進めていません(連続する2回の繰り返しの結果が同じでした)。
4
qmr 中で計算されたスカラ量が、繰り返しを続行するのに小さする、または大きすぎるため、この手法は停止されました。

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

[x,flag,relres] = qmr(A,b,...) は、相対誤差norm(b-A*x)/norm(b)も出力します。flag0 の場合、これは relres <= tolです。

[x,flag,relres,iter] = qmr(A,b,...) は、xが計算された繰り返し回数を出力します。これは、常に0 <= iter <= maxit です。

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

例題

例題 1.

一方、つぎの行列-ベクトル乗算関数を使います。

を、qmr へ入力とします。

例題 2.

qmr は、デフォルトの20回の繰り返し回数以内で、デフォルトの許容範囲 1e-6 に収束しなかったので、flag1 になります。

上三角 U1 が対角要素にゼロをもつので、flag1 は、2 になります。そして、U1*y = r for y をバックシュラッシュを使って解く場合、qmr は、最初の繰り返しで停止します。

qmr は、8回の繰り返しで、1.6571e-016(relres2 の値) の許容範囲で収束するので、1e-6 のドロップトレランスを使った不完全 LU 分解による前置条件子の場合、flag2 は、0 になります。resvec2(1) = norm(b)resvec2(9) = norm(b-A*x2) です。初期推定(繰り返し回数 0)から始めて、各繰り返しで、相対残差をプロットすることで、qmr の進行を見れます。

参考

bicg, bicgstab, cgs, gmres, lsqr, luinc, minres, pcg, 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.

Freund, Roland W. and Nöel M. Nachtigal, "QMR: A quasi-minimal residual method for non-Hermitian linear systems", SIAM Journal: Numer. Math. 60, 1991, pp. 315-339.


 pwd qr