文档

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 \ xmfun(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

LSQR融合到所需的公差托尔最大迭代。

1

LSQR迭代最大时代但没有融合。

2

预处理m不适合条件。

3

LSQR停滞。(连续两个迭代率相同。)

4

计算的标量之一LSQR变得太小或太大而无法继续计算。

每当旗帜不是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页。

扩展功能

在R2006a之前引入