MATLAB Function Reference |
LSQR 對於一般方程式共軛傾斜度(Conjugate Gradients)的執行
Syntax
x = lsqr(A,b) lsqr(A,b,tol) lsqr(A,b,tol,maxit) lsqr(A,b,tol,maxit,M) lsqr(A,b,tol,maxit,M1,M2) lsqr(A,b,tol,maxit,M1,M2,x0) lsqr(afun,b,tol,maxit,m1fun,m2fun,x0,p1,p2,...) [x,flag] = lsqr(A,b,...) [x,flag,relres] = lsqr(A,b,...) [x,flag,relres,iter] = lsqr(A,b,...) [x,flag,relres,iter,resvec] = lsqr(A,b,...)
Description
x = lsqr(A,b)
若 A
具有一致性,則解線性方程式 A*x=b
中的 x;
否則解最短距離 x
使 norm(b-A*x)
有最小值。m*n
的係數矩陣 A
不一定要正方矩陣,但行向量 b
的長度必須為 m。A
可為函數 afun
,afun(x)
回傳 A*x
且 afun(x,'transp')
回傳 A'*x
。
若 lsqr
收歛,相關訊息將顯示出來。若 lsqr
經過最大次數的重覆或任何理由被停止以致於沒有收歛,將會列印出一警告訊息顯示相關剩餘 norm(b-A*x)/norm(b)
,而該作法下的重覆數字也將停止。
lsqr(A,b,tol)
定義方法的誤差。若 tol
為 []
,則 lsqr
使用預設值 1e-6
。
lsqr(A,b,tol,maxit)
定義最大重覆次數。若 maxit
為 []
,則 lsqr
使用預設值 min([m,n,20])
。
lsqr(A,b,tol,maxit,M1) 及 lsqr(A,b,tol,maxit,M1,M2)
使用 n*n
的先決條件 M
或 M = M1*M2
並有效地解方程式 A*inv(M)*y = b
的 y
,其中 x = M*y
。若 M
為 []
則 lsqr
不使用任何先決條件。M
可為函數 mfun
其中 mfun(x)
回傳 M\x
且 mfun(x,'transp')
回傳 M'\x
。
lsqr(A,b,tol,maxit,M1,M2,x0)
定義一 n*1
的初始推測。若 x0
為 []
,則 lsqr
使用預設值,即全為零的向量。
lsqr(afun,b,tol,maxit,m1fun,m2fun,x0,p1,p2,...)
傳送參數 p1,p2,...
至函式 afun(x,p1,p2,...)
及 afun(x,p1,p2,...,'transp')
且相似地傳送至先決函數 m1fun
和 m2fun。
[x,flag] = lsqr(A,b,tol,maxit,M1,M2,x0)
亦回傳收歛旗標。
旗標 |
收歛性 |
0 |
lsqr 在 maxit 次內收歛至期望的誤差 tol。 |
1 |
lsqr 重覆 maxit 次但並沒有收歛。 |
2 |
先決條件 M 不夠完善。 |
3 |
lsqr 沉滯(stagnated)。(兩次連續的重覆視為相同)。 |
4 |
當 flag
不為 0
時,解 x
回傳經由所有重覆次數的最小基準餘數(minimal norm residual)。若有定義 flag
的輸出,則不會顯示任何訊息。
[x,flag,relres] = lsqr(A,b,tol,maxit,M1,M2,x0)
亦回傳相關餘數的估計值 norm(b-A*x)/norm(b)
。若 flag
為 0
,relres <= tol
。
[x,flag,relres,iter] = lsqr(A,b,tol,maxit,M1,M2,x0)
亦回傳 x
計算時的重覆次數,即 0 <= iter <= maxit
。
[x,flag,relres,iter,resvec] = lsqr(A,b,tol,maxit,M1,M2,x0)
亦回傳在每一次重覆的剩餘基準估計向量,包括 norm(b-A*x0)
。
Examples
n = 100; on = ones(n,1); A = spdiags([-2*on 4*on -on],-1:1,n,n); b = sum(A,2); tol = 1e-8; maxit = 15; M1 = spdiags([on/(-2) on],-1:0,n,n); M2 = spdiags([4*on -on],0:1,n,n); x = lsqr(A,b,tol,maxit,M1,M2,[]); lsqr converged at iteration 12 to a solution with relative residual 3.5e-009
function y = afun(x,n,transp_flag) if (nargin > 2) & strcmp(transp_flag,'transp') y = 4 * x; y(1:n-1) = y(1:n-1) - 2 * x(2:n); y(2:n) = y(2:n) - x(1:n-1); else y = 4 * x; y(2:n) = y(2:n) - 2 * x(1:n-1); y(1:n-1) = y(1:n-1) - x(2:n); end
x1 = lsqr(@afun,b,tol,maxit,M1,M2,[],n);
See Also
bicg
, bicgstab
, cgs
, gmres
, minres
, pcg
, qmr
, symmlq
@
(function handle)
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. Saunders, "LSQR: An Algorithm for Sparse Linear Equations And Sparse Least Squares," ACM Trans. Math. Soft., Vol.8, 1982, pp. 43-71.
lsqnonneg | lu |