lsqr
LSQR法
语法
x = lsqr (A, b)
lsqr (A, b, tol)
lsqr (A, b,托尔,麦克斯特)
lsqr (A, b,托尔,麦克斯特米)
麦克斯特lsqr (A, b,托尔,M1, M2)
麦克斯特lsqr (A, b,托尔,M1, M2, x0)
[x,国旗]= lsqr (A, b,托尔,麦克斯特,M1, M2, x0)
[x,国旗,relres] = lsqr (A, b,托尔,麦克斯特,M1, M2, x0)
[x,国旗,relres, iter] = lsqr (A, b,托尔,麦克斯特,M1, M2, x0)
[x,国旗,relres, iter resvec] = lsqr (A, b,托尔,麦克斯特,M1, M2, x0)
[x,国旗,relres, iter resvec, lsvec] = lsqr (A, b,托尔,麦克斯特,M1, M2, x0)
描述
x = lsqr (A, b)
试图解决线性方程组A * x =
为x
如果一个
是一致的,否则它试图解决最小二乘解x
,最大限度地减少规范(b * x)
。的米
——- - - - - -n
系数矩阵一个
不需要广场但它应该大而稀疏。列向量b
一定的长度米
。您可以指定一个
作为处理函数,afun
,这样afun (x, notransp)
返回* x
和afun (x,“透明”)
返回‘* x
。
参数化功能解释如何提供额外的参数函数afun
,以及预调节器的功能mfun
下面描述,如果必要的。
如果lsqr
收敛,显示一条信息。如果lsqr
无法收敛后最大迭代次数或停止任何理由,一条警告消息打印显示相对剩余规范(b * x) /规范(b)
和迭代次数的方法停止或失败。
lsqr (A, b, tol)
指定的公差的方法。如果托尔
是[]
,然后lsqr
使用默认的,1 e-6
。
lsqr (A, b,托尔,麦克斯特)
指定的最大迭代数。
lsqr (A, b,托尔,麦克斯特米)
和麦克斯特lsqr (A, b,托尔,M1, M2)
使用n
——- - - - - -n
预调节器米
或M = M1 *平方米
和有效地解决系统*发票(M) * y = b
为y
,在那里y = M * x
。如果米
是[]
然后lsqr
适用于没有预调节器。米
可以是一个函数mfun
这样mfun (x, notransp)
返回M \ x
和mfun (x,“透明”)
返回M ' \ x
。
麦克斯特lsqr (A, b,托尔,M1, M2, x0)
指定了n
——- - - - - -1
最初的猜测。如果x0
是[]
,然后lsqr
使用默认的所有零向量。
[x,国旗]= lsqr (A, b,托尔,麦克斯特,M1, M2, x0)
还返回一个收敛的旗帜。
国旗 |
收敛 |
---|---|
0 |
|
1 |
|
2 |
预调节器 |
3 |
|
4 |
一个标量计算期间 |
每当国旗
不是0
,解决方案x
返回的是剩余所有迭代计算以最小的标准。不显示如果您指定的消息国旗
输出。
[x,国旗,relres] = lsqr (A, b,托尔,麦克斯特,M1, M2, x0)
还返回一个估计的相对剩余规范(b * x) /规范(b)
。如果国旗
是0
,relres < =托尔
。
[x,国旗,relres, iter] = lsqr (A, b,托尔,麦克斯特,M1, M2, x0)
还返回的迭代次数x
计算,0 < = iter < =麦克斯特
。
[x,国旗,relres, iter resvec] = lsqr (A, b,托尔,麦克斯特,M1, M2, x0)
还返回一个向量的残留标准估计在每一次迭代,包括规范(b * x0)
。
[x,国旗,relres, iter resvec, lsvec] = lsqr (A, b,托尔,麦克斯特,M1, M2, x0)
还返回一个向量的估计了正规方程残留在每一次迭代:规范((*发票(M))”* (b * X)) /规范(A *发票(M),“来回”)
。注意的估计规范(*发票(M),“来回”)
变化,希望改善,在每一个迭代。
例子
示例1
n = 100;= 1 (n, 1);一个= spdiags (——) [2 * 4 *, 1:1, n, n);b =和(2);托尔= 1 e-8;麦克斯特= 15;M1 = spdiags(/(2)上,1:0,n, n);M2 = spdiags (——) [4 *, 0:1, n, n);x = lsqr (A, b,托尔,麦克斯特,M1, M2);
显示以下信息:
lsqr聚集在迭代11与相对剩余3.5 e - 009的解决方案
示例2
这个例子中取代了矩阵一个
在例1的乘积函数的句柄afun
。中包含的例子是一个函数run_lsqr
那
调用
lsqr
函数处理@afun
作为第一个参数。包含
afun
嵌套函数,这样所有的变量run_lsqr
可用于afun
。
以下显示的代码run_lsqr
:
函数x1 = run_lsqr n = 100;= 1 (n, 1);一个= spdiags (——) [2 * 4 *, 1:1, n, n);b =和(2);托尔= 1 e-8;麦克斯特= 15;M1 = spdiags(/(2)上,1:0,n, n);M2 = spdiags (——) [4 *, 0:1, n, n);x1 = lsqr (@afun, b,托尔,麦克斯特,M1, M2);函数y = afun (x, transp_flag)如果比较字符串(transp_flag‘透明’)% y =“* 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.5 e - 009的解决方案
引用
[1]巴雷特,R。,米。Berry, T. F. Chan, et al.,线性系统的解决方案模板:迭代方法的构建块、暹罗、费城1994人。
Paige [2], c . c和m·a·桑德斯”LSQR:一个稀疏线性方程和稀疏最小二乘算法,”ACM反式。数学。柔软。Vol.8, 1982年,页43 - 71。