文档

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)返回* xafun (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 = by,在那里y = M * x。如果[]然后lsqr适用于没有预调节器。可以是一个函数mfun这样mfun (x, notransp)返回M \ xmfun (x,“透明”)返回M ' \ x

麦克斯特lsqr (A, b,托尔,M1, M2, x0)指定了n——- - - - - -1最初的猜测。如果x0[],然后lsqr使用默认的所有零向量。

[x,国旗]= lsqr (A, b,托尔,麦克斯特,M1, M2, x0)还返回一个收敛的旗帜。

国旗

收敛

0

lsqr聚集到所需的公差托尔麦克斯特迭代。

1

lsqr迭代麦克斯特次但没有收敛。

2

预调节器坏脾气的。

3

lsqr停滞不前。(两个连续的迭代是相同的)。

4

一个标量计算期间lsqr成为太小或太大继续计算。

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

之前介绍过的R2006a

这个主题有帮助吗?