MATLAB Function Reference |
Syntax
x = gmres(A,b) gmres(A,b,restart) gmres(A,b,restart,tol) gmres(A,b,restart,tol,maxit) gmres(A,b,restart,tol,maxit,M) gmres(A,b,restart,tol,maxit,M1,M2) gmres(A,b,restart,tol,maxit,M1,M2,x0) gmres(afun,b,restart,tol,maxit,m1fun,m2fun,x0,p1,p2,...) [x,flag] = gmres(A,b,...) [x,flag,relres] = gmres(A,b,...) [x,flag,relres,iter] = gmres(A,b,...) [x,flag,relres,iter,resvec] = gmres(A,b,...)
Description
x = gmres(A,b)
解線性方程式 A*x = b
的 x
。A
為 n*n 的係數矩陣而行向量 b
的長度也必須為 n
。A
可為函數 afun
且 afun(x)
可回傳 A*x
。
若 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)*b
的 x
。若 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,...)
, and m2fun(x,p1,p2,...)
。
[x,flag] = gmres(A,b,
回傳一收歛的旗標。...
)
旗標 |
收歛性 |
0 |
gmres 在 maxit 次內收歛至期望的誤差 tol。 |
1 |
gmres 重覆 maxit 次但並沒有收歛。 |
2 |
先決條件 M 不夠完善。 |
3 |
gmres 沉滯(stagnated)。(兩次連續的重覆視為相同)。 |
當 flag
不為 0
時,解 x
回傳經由所有重覆次數的最小基準餘數(minimal norm residual)。若有定義 flag
的輸出,則不會顯示任何訊息。
[x,flag,relres] = gmres(A,b
亦回傳相關餘數 ,...
)
norm(b-A*x)/norm(b)
。若 flag
為 0
,relres <= tol
。
[x,flag,relres,iter] = gmres(A,b,
亦回傳 ...
)
x
的外表及核心重覆次數,0 <= iter(1) <= maxit
且 0 <= iter(2) <= restart
。
[x,flag,relres,iter,resvec] = gmres(A,b
亦回傳每一核心重覆的剩餘基準的向量,包括,...
)
norm(b-A*x0)。
Examples
A = gallery('wilk',21); b = sum(A,2); tol = 1e-12; maxit = 15; M1 = diag([10:-1:1 1 1:10]); x = gmres(A,b,10,tol,maxit,M1,[],[]); gmres(10) converged at iteration 2(10) to a solution with relative residual 1.9e-013
function y = afun(x,n) y = [0; x(1:n-1)] + [((n-1)/2:-1:0)'; (1:(n-1)/2)'] .*x + [x(2:n); 0];
function y = mfun(r,n) y = r ./ [((n-1)/2:-1:1)'; 1; (1:(n-1)/2)'];
x1 = gmres(@afun,b,10,tol,maxit,@mfun,[],[],21);
注意 afun
及 mfun
皆必須接受 gmres
's
額外的輸入值 n=21
。
load west0479 A = west0479 b = sum(A,2) [x,flag] = gmres(A,b,5)
flag
為 1
因為 gmres
在預設的外表重覆次數 10 內並沒有收歛至預設誤差 1e-6。
[L1,U1] = luinc(A,1e-5); [x1,flag1] = gmres(A,b,5,1e-6,5,L1,U1);
flag1
為 2
因為上三角 U1
在其對角線有零的出現,而 gmres
當試著用反斜線解 U1*y = r
的 y
時並沒有於第一次的重覆中成功。
[L2,U2] = luinc(A,1e-6); tol = 1e-15; [x4,flag4,relres4,iter4,resvec4] = gmres(A,b,4,tol,5,L2,U2); [x6,flag6,relres6,iter6,resvec6] = gmres(A,b,6,tol,3,L2,U2); [x8,flag8,relres8,iter8,resvec8] = gmres(A,b,8,tol,3,L2,U2);
flag4
, flag6
, 及 flag8
全為 0
因為當重新開始於重覆次數 4, 6 及 8 次,先決條件由誤差為 1e-6
的不完全 LU
分解決定時,gmres
收歛。可由外表重覆次數相對於相關剩餘的平面圖來確認。所有三個的結合平面圖清楚地顯示重覆在 4 及 6
次的重新開始。重覆的總數可比 restart
中較小的值大,但長度為 n
的向量其總數只有一些,大部份的工作依比例漸減地完成。
See Also
bicg
, bicgstab
, cgs
, lsqr
, luinc
, minres, pcg
, qmr
, symmlq
@
(function handle), \
(backslash)
References
[1] Barrett, R., M. Berry, T. F. Chan, et al., Templates for the Solution of Linear Systems: Building Blocks for Iterative Methods, SIAM, Philadelphia, 1994.
[2] 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 |