MATLAB Function Reference |
Syntax
x = symmlq(A,b) symmlq(A,b,tol) symmlq(A,b,tol,maxit) symmlq(A,b,tol,maxit,M) symmlq(A,b,tol,maxit,M1,M2) symmlq(A,b,tol,maxit,M1,M2,x0) symmlq(afun,b,tol,maxit,m1fun,m2fun,x0,p1,p2,...) [x,flag] = symmlq(A,b,...) [x,flag,relres] = symmlq(A,b,...) [x,flag,relres,iter] = symmlq(A,b,...) [x,flag,relres,iter,resvec] = symmlq(A,b,...) [x,flag,relres,iter,resvec,resveccg] = symmlq(A,b,...)
Description
x = symmlq(A,b)
欲解線性式子中 A*x=b
的 x
。n*n
的係數矩陣 A
必須為對稱性,但不一定是正向定義的(positive definite)。行向量 b
的長度為 n
。A
可為函式 afun
而 afun(x)
回傳 A*x。
若 symmlq
收歛,則將會顯示該訊息。若 symmlq
經過最大重覆或任何理由的中斷後沒有收歛,則會顯示相關剩餘 norm(b-A*x)/norm(b)
及在那一步驟停止的重覆數字之警告訊息。
symmlq(A,b,tol)
說明此函式的誤差度。若 tol
為 [],symmlq
使用預設值 1e-6。
symmlq(A,b,tol,maxit)
說明此函式的最大重覆數。若 maxit
為 [],symmlq
使用預設值 min(n,20)
。
symmlq(A,b,tol,maxit,M) 及 symmlq(A,b,tol,maxit,M1,M2)
使用對稱正向定義的先決條件 M
或 M = M1*M2
並且有效率地解式子 inv(sqrt(M))*A*inv(sqrt(M))*y = inv(sqrt(M))*b
中的
y,
其後回傳 x = inv(sqrt(M))*y。
若 M
為 [],
則函式 symmlq
沒有任何的先決條件。 M
也可為一函式其回傳 M\x。
symmlq(A,b,tol,maxit,M1,M2,x0)
定義起始的猜測。若 x0
為 [],
則
symmlq
使用預設值,即一個全為 0 的向量。
symmlq(afun,b,tol,maxit,m1fun,m2fun,x0,p1,p2,...)
將參數 p1,p2,...
傳送至函式 afun(x,p1,p2,...)
, m1fun(x,p1,p2,...)
, 及 m2fun(x,p1,p2,...)。
[x,flag] = symmlq(A,b,tol,maxit,M1,M2,x0,p1,p2,...)
傳回收歛的旗標。
旗標 |
收歛 |
0 |
symmlq 在預期的誤差 tol 及最大的重覆次數 maxit 中收歛。 |
1 |
symmlq 重覆了 maxit 次但沒有收歛。 |
2 |
先決條件 M
為不完善的決定條件。 |
3 |
symmlq 沉滯。(兩個連續的重覆為相同的) |
4 |
|
5 |
當 flag
不為 0,
x
將會是經過所有重覆後的最小基準剩餘。若有定義 flag
這項輸出參數,則將不會有任何訊息顯示。
[x,flag,relres] = symmlq(A,b,tol,maxit,M1,M2,x0,p1,p2,...)
亦回傳相關剩餘 norm(b-A*x)/norm(b)
。若 flag
為 0,relres <= tol
。
[x,flag,relres,iter] = symmlq(A,b,tol,maxit,M1,M2,x0,p1,p2,...)
亦傳回計算 x
的該次重覆值,其 0 <= iter <= maxit。
[x,flag,relres,iter,resvec] = symmlq(A,b,tol,maxit,M1,M2,x0,p1,p2,...)
亦傳回每次重覆時 minres
的估計向量,包括 norm(b-A*x0)。
[x,flag,relres,iter,resvec,resveccg] = symmlq(A,b,tol,maxit,M1,M2,x0,p1,p2,...)
亦傳回每次重覆時的 Conjugate Gradients 剩餘基準的估計向量。
Examples
n = 100; on = ones(n,1); A = spdiags([-2*on 4*on -2*on],-1:1,n,n); b = sum(A,2); tol = 1e-10; maxit = 50; M1 = spdiags(4*on,0,n,n); x = symmlq(A,b,tol,maxit,M1,[],[]); symmlq converged at iteration 49 to a solution with relative residual 4.3e-015
function y = afun(x,n) y = 4 * x; y(2:n) = y(2:n) - 2 * x(1:n-1); y(1:n-1) = y(1:n-1) - 2 * x(2:n);
x1 = symmlq(@afun,b,tol,maxit,M1,[],[],n);
使用不一定對稱的矩陣為函式 pcg
的輸入時,結果失敗了:
A = diag([20:-1:1,-1:-1:-20]); b = sum(A,2); % The true solution is the vector of all ones. x = pcg(A,b); % Errors out at the first iteration. pcg stopped at iteration 1 without converging to the desired tolerance 1e-006 because a scalar quantity became too small or too large to continue computing. The iterate returned (number 0) has relative residual 1
x = symmlq(A,b,1e-6,40); symmlq converged at iteration 39 to a solution with relative residual 1.3e-007
See Also
bicg
, bicgstab
, cgs
, lsqr
, gmres
, minres
, pcg
, qmr
@
(function handle), /
(slash)
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] Paige, C. C. and M. A., "Solution of Sparse Indefinite Systems of Linear Equations." SIAM J. Numer. Anal., Vol.12, 1975, pp. 617-629.
symbfact | symmmd |