LSQR
LSQR方法
句法
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)
[x,flag] = lsqr(a,b,tol,maxit,m1,m2,x0)
[x,flag,relres] = lsqr(a,b,tol,maxit,m1,m2,x0)
[x,flag,relres,iter] = lsqr(a,b,tol,maxit,m1,m2,x0)
[x,flag,relres,iter,resvec] = lsqr(a,b,tol,maxit,m1,m2,x0)
[x,flag,relres,iter,resvec,lsvec] = lsqr(a,b,tol,maxit,m1,m2,x0)
描述
x = lsqr(a,b)
试图求解线性方程的系统a*x = b
为了X
如果一个
是一致的,否则它将尝试解决最小二乘解决方案X
最小化norm(b-a*x)
。这m
-经过-n
系数矩阵一个
不必是正方形,但应该很大且稀疏。列矢量b
必须有长度m
。您可以指定一个
作为函数句柄,一个乐趣
,这样afun(x,'notransp')
返回斧头
和afun(x,'transp')
返回斧头
。
参数化功能说明如何为功能提供其他参数一个乐趣
,以及预处理功能mfun
如下所述,如有必要。
如果LSQR
收敛,显示给该效果的消息。如果LSQR
出于任何原因,在最大迭代或停止数量后,未能收敛,打印警告消息,显示相对残差norm(b-a*x)/norm(b)
以及该方法停止或失败的迭代编号。
LSQR(a,b,tol)
指定该方法的耐受性。如果托尔
是[]
, 然后LSQR
使用默认1E-6
。
LSQR(A,B,TOL,MAXIT)
指定最大迭代次数。
LSQR(A,B,TOL,MAXIT,M)
和LSQR(A,B,TOL,MAXIT,M1,M2)
利用n
-经过-n
预处理m
或者M = M1*M2
并有效解决系统A*Inv(M)*Y = B
为了y
, 在哪里y = m*x
。如果m
是[]
然后LSQR
不适用预处理。m
可以是功能mfun
这样mfun(x,'notransp')
返回m \ x
和mfun(x,'transp')
返回m'\ x
。
LSQR(A,B,TOL,MAXIT,M1,M2,X0)
指定n
-经过-1
最初的猜测。如果X0
是[]
, 然后LSQR
使用默认值,全零向量。
[x,flag] = lsqr(a,b,tol,maxit,m1,m2,x0)
还返回收敛标志。
旗帜 |
收敛 |
---|---|
0 |
|
1 |
|
2 |
预处理 |
3 |
|
4 |
计算的标量之一 |
每当旗帜
不是0
, 解决方案X
返回的是,在所有迭代中计算出最小的规范残差。如果您指定旗帜
输出。
[x,flag,relres] = lsqr(a,b,tol,maxit,m1,m2,x0)
还返回相对残差的估计值norm(b-a*x)/norm(b)
。如果旗帜
是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)
还返回每次迭代中剩余规范估计的向量,包括规范(B-A*X0)
。
[x,flag,relres,iter,resvec,lsvec] = lsqr(a,b,tol,maxit,m1,m2,x0)
还返回每次迭代中缩放的正常方程式估计值的向量:norm((A*Inv(M))'*(B-A*X))/NORM(A*Inv(M),'FRO')
。请注意,估计值norm(a*inv(m),'fro')
在每次迭代中,变化并希望改善。
例子
示例1
n = 100;on =一个(n,1);a = spdiags([-2*on 4*on-on],-1:1,n,n);b = sum(a,2);TOL = 1E-8;最大值= 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在迭代11中汇总到具有相对残留3.5E-009的溶液
示例2
此示例替换矩阵一个
在具有矩阵矢量产品功能的手柄的示例1中一个乐趣
。该示例包含在函数中run_lsqr
那
呼叫
LSQR
使用功能句柄@一个乐趣
作为第一个论点。包含
一个乐趣
作为嵌套函数,以便所有变量run_lsqr
可用于一个乐趣
。
以下显示了代码run_lsqr
:
函数x1 = run_lsqr n = 100;on =一个(n,1);a = spdiags([-2*on 4*on-on],-1:1,n,n);b = sum(a,2);TOL = 1E-8;最大值= 15;m1 = spdiags([on/(-2)on],-1:0,n,n);m2 = spdiags([4*on -on],0:1,n,n);x1 = lsqr(@afun,b,tol,maxit,m1,m2);函数y = afun(x,transp_flag)如果strcmp(transp_flag,'transp')%y = a' * x 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); elseif strcmp(transp_flag,'notransp') % y = A*x 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 end end
当您输入时
x1 = run_lsqr;
MATLAB®软件显示消息
LSQR在迭代11中汇总到具有相对残留3.5E-009的溶液
参考
[1] Barrett,R。,M。Berry,T。F. Chan等人,线性系统解决方案的模板:迭代方法的构建块,暹罗,费城,1994年。
[2] Paige,C。C.和M. A. Saunders,“ LSQR:用于稀疏线性方程和稀疏最小二乘的算法,”ACM Trans。数学。柔软的。,第8卷,1982年,第43-71页。