主要内容

tfqmr

求解线性方程系统 - 无转型准剩余残余方法

描述

例子

x= tfqmr (一个,b试图解线性方程组a * x = bx使用无转置的准 - 最小残余方法.当尝试成功时,tfqmr显示确认收敛的消息。如果tfqmr由于出于任何原因,未能在最大迭代次数或停止之后收敛,它显示包括相对残差的诊断消息规范(B-A * x)/常规(b)以及方法停止的迭代次数。

例子

x= tfqmr (一个,b,指定该方法的公差。默认容差是1 e-6

例子

x= tfqmr (一个,b,,Maxit.指定要使用的最大迭代次数。tfqmr如果无法在内部收敛,则显示诊断消息Maxit.迭代。

例子

x= tfqmr (一个,b,,Maxit.,指定一个预安全判断程序矩阵和计算x通过有效地求解该系统 一个 - 1 y b y,在那里 y x .利用预处理矩阵可以改善问题的数值性质,提高计算效率。

例子

x= tfqmr (一个,b,,Maxit.,M1,M2指定预处理矩阵的因子这样M = M1 *平方米

例子

x= tfqmr (一个,b,,Maxit.,M1,M2,x0指定解向量的初始猜测x.默认值是零的向量。

例子

x,旗帜) = tfqmr (___返回指定算法是否成功收敛的标志。当国旗= 0,融合成功了。您可以使用此输出语法与任何以前的输入参数组合使用。当您指定时旗帜输出,tfqmr不显示任何诊断消息。

例子

x,旗帜,relres.) = tfqmr (___还返回相对残差规范(B-A * x)/常规(b).如果旗帜0,然后Relres <= tol

例子

x,旗帜,relres.,iter) = tfqmr (___也返回迭代数iter当时x是计算。

例子

x,旗帜,relres.,iter,resvec) = tfqmr (___还返回每次迭代的残余标准的向量,包括第一个残差规范(b * x0)

例子

全部收缩

解决方形线性系统使用tfqmr使用默认设置,然后调整解决方案流程中使用的容忍度和迭代次数。

创建一个随机稀疏矩阵一个密度为50%。还创建一个随机向量b右边的 斧头 b

rng.默认的5 = sprand (400400);=“*;b =兰德(400 1);

解决 斧头 b 使用tfqmr.输出显示包括相对残差误差的值 b - 斧头 b

x = tfqmr (A, b);
TFQMR在迭代40处停止而不会聚到所需的公差1E-06,因为达到了最大迭代次数。返回的iterate(编号13)的相对残差为0.3。

默认情况下tfqmr使用40次迭代和公差1 e-6,算法在这40次迭代中无法收敛。由于残差仍然很大,这是一个很好的指示,说明需要更多的迭代(或预处理矩阵)。您还可以使用更大的容忍度,以使算法更容易收敛。

用容差再次解系统1的军医和100的迭代。

x = tfqmr (A, b, 1 e - 4100);
由于达到了最大迭代次数,TFQMR在迭代200时停止,没有收敛到期望的公差0.0001。返回的iterate(编号13)的相对残差为0.3。

即使具有宽松的公差和更多的迭代,剩余错误也不会改善太多。当以这种方式停止迭代算法停止时,它是需要预处理器矩阵的良好指示。

计算的不完全Cholesky分解一个,并使用L'作为预处理输入的因子tfqmr

l = iChol(a);X = TFQMR(A,B,1E-4,100,L');
TFQMR在迭代32时收敛到一个相对残差为5.2 -05的解。

使用预处理器提高了问题的数值tfqmr能够收敛。

用下列方法检查使用预处理矩阵的效果tfqmr解决线性系统。

加载west0479,一个实的479 × 479非对称稀疏矩阵。

负载West0479.A = West0479;

定义b所以真正的解 斧头 b 是所有的矢量。

b = sum(a,2);

设置容差和最大迭代次数。

托尔= 1 e-12;麦克斯特= 20;

tfqmr在请求的容忍和迭代次数上找到解决方案。指定五个输出以返回有关解决方案过程的信息:

  • x算出的解是a * x = b

  • fl0表示算法是否收敛。

  • RR0.是计算答案的相对残余x

  • it0迭代次数是什么时候x是计算。

  • rv0是一个残存的历史向量吗 b - 斧头

[x, fl0 rr0, it0 rv0] = tfqmr (A, b,托尔,麦克斯特);fl0
fl0 = 1
RR0.
RR0 = 0.9845.
it0
it0 = 10

fl0是1,因为tfqmr不收敛到所要求的容忍度1 e-12在请求的20次迭代中。第十次迭代是最好的近似解决方案,并且是如此返回的解决方案it0 = 10

为了帮助缓慢的收敛,您可以指定一个预处理器矩阵。自从一个非对称,使用ilu生成预处理器 l U .指定删除容差,以忽略小于的值1 e-6.解预处理系统 一个 - 1 x b 通过指定lU作为输入tfqmr

设置=结构('类型','ilutp','droptol',1E-6);[l,u] = ilu(a,设置);[X1,FL1,RR1,IT1,RV1] = TFQMR(A,B,TOL,MAXIT,L,U);FL1.
fl1 = 0.
RR1.
RR1 = 4.3298E-14
it1
IT1 = 3.

使用ilu预处理器产生比规定的耐受性更少1 e-12在第三次迭代。输出RV1(1)规范(b),输出rv1(结束)规范(b * x1)

你可以跟着进度tfqmr通过在每次迭代时绘制相对残差。绘制每个解决方案的剩余历史,具有指定公差的线。注意bicgstab,tfqmr跟踪一半迭代。

semilogy(0:长度(rv0) 1, rv0 /规范(b),“o”) 抓住semilogy(0:长度(rv1) 1, rv1 /规范(b),“o”) yline(托尔,“r——”);传奇(“没有预调节器”,'ilu preconditcher','宽容','地点','东')Xlabel('迭代号')ylabel(“相对残差”

图中包含一个坐标轴。轴包含三个对象的类型线,恒线。这些对象代表No preconditioner、ILU preconditioner、Tolerance。

检查供应的效果tfqmr初步猜测解决方案。

创建一个三对角稀疏矩阵。用每一行的和作为右边的向量 斧头 b 所以预期的解决方案 x 是一个1的向量。

n = 900;e =那些(n,1);a = spdiags([e 2 * e e], -  1:1,n,n);b = sum(a,2);

tfqmr来解决 斧头 b 两次:一次是默认的初始猜测,另一次是正确的初始猜测。对这两种解决方案使用200次迭代和默认容忍。万博 尤文图斯指定第二个解中的初始猜想为一个所有元素都等于的向量0.99

麦克斯特= 200;x1 = tfqmr (A, b,[],麦克斯特);
TFQMR在迭代19时收敛到一个相对残差为9.6e-07的解。
x0 = 0.99 * e;x2 = tfqmr(a,b,[],maxit,[],[],x0);
TFQMR在迭代4时收敛到一个相对残差为7.9e-07的解。

在这种情况下,提供初始猜测启用tfqmr更快地聚合。

返回中间结果

您还可以通过调用初始猜测来获得中间结果tfqmr在一个循环。对求解器的每次调用都执行几次迭代,并存储计算出的解决方案。然后使用该解决方案作为下一批迭代的初始向量。

例如,这段代码执行四次100次迭代,并在For循环中每次传递后存储解决方案向量:

x0 =零(尺寸(a,2),1);tol = 1e-8;maxit = 100;k = 1:4 [x,标志,relres] = tfqmr(a,b,tol,maxit,[],[],x0);x(:,k)= x;r(k)= resrres;x0 = x;结束

X (:, k)迭代时是否计算了解向量kfor循环的r(k)是该解决方案的相对残余。

通过提供解一个线性方程组tfqmr使用计算的函数句柄斧头代替系数矩阵一个

由威尔金森测试矩数之一产生画廊是一个21×21个三角形矩阵。预览矩阵。

一个=画廊('威尔克',21)
一个=21日×2110 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 8 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0121000000 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 ⋮

威尔金森矩阵有一个特殊的结构,所以你可以表示这个操作斧头功能手柄。当一个乘以向量,得到的矢量中的大多数元素是零。结果中的非零元素对应于非零三角形元素一个.此外,仅主对角线具有不等于1的非安利斯。

表达方式 斧头 就变成:

斧头 10. 1 0 0 0 1 9 1 0 0 0 1 8 1 0 0 1 7 1 0 0 1 6 1 0 0 1 5 1 0 0 1 4 1 0 0 1 3. 0 0 0 1 0 0 0 1 10. x 1 x 2 x 3. x 4 x 5 x 21 10. x 1 + x 2 x 1 + 9 x 2 + x 3. x 2 + 8 x 3. + x 4 x 19. + 9 x 20. + x 21 x 20. + 10. x 21

得到的向量可以写成三个向量的和:

斧头 0 + 10. x 1 + x 2 x 1 + 9 x 2 + x 3. x 2 + 8 x 3. + x 4 x 19. + 9 x 20. + x 21 x 20. + 10. x 21 + 0 0 x 1 x 20. + 10. x 1 9 x 2 10. x 21 + x 2 x 21 0

在MATLAB®中,写一个创建这些向量的函数并将它们添加在一起,从而提供值斧头

功能y = afun(x)y = [0;x(1:20)] +...[(10:-1:0)';(1:10)']。* x +...[x(2:21);0];结束

(此函数在示例结束时保存为本地功能。)

现在,解线性方程组 斧头 b 通过提供tfqmr使用计算的函数句柄斧头.使用公差1 e-12和50迭代。

b = inton(21,1);托尔= 1 e-12;maxit = 50;x1 = tfqmr(@ afun,b,tol,maxit)
TFQMR在迭代10时收敛到一个相对残差为6.7e-15的解。
x1 =21日×10.0910 0.0899 0.0999 0.1109 0.1241 0.1443 0.1544 0.2383 0.1309 0.5000⋮

检查一下afun (x1)生成一个矢量。

afun (x1)
ans =21日×11.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000⋮

本地函数

功能y = afun(x)y = [0;x(1:20)] +...[(10:-1:0)';(1:10)']。* x +...[x(2:21);0];结束

输入参数

全部收缩

系数矩阵,指定为方矩阵或功能手柄。该矩阵是线性系统中的系数矩阵a * x = b.一般来说,一个是一个大的稀疏矩阵或函数句柄,返回大稀疏矩阵和列向量的乘积。

指定一个作为函数句柄

您可以可选地将系数矩阵指定为函数句柄而不是矩阵。功能手柄返回矩阵矢量产品,而不是形成整个系数矩阵,使得计算更有效。s manbetx 845

要使用函数句柄,请使用函数签名函数y = fun(x)参数化功能解释如何向函数提供附加参数好玩儿,如果必要的。函数调用Afun(x)必须返回值斧头

数据类型:|function_handle
复数的支持:万博1manbetx是的

线性方程的右边,指定为列向量。的长度b必须等于大小(1)

数据类型:
复数的支持:万博1manbetx是的

方法公差,指定为正标量。使用此输入来权衡计算的准确性和运行时间。tfqmr必须在允许的迭代次数内达到容忍度。较小的价值意味着计算成功的计算必须更精确。

数据类型:

最大迭代次数,指定为正标量整数。增加价值Maxit.允许更多的迭代tfqmr满足宽容.一般来说,较小的值意味着需要更多的迭代才能成功完成计算。

预处理器矩阵,指定为矩阵或函数句柄的单独参数。您可以指定一个预处理器矩阵或者它的矩阵因子M = M1 *平方米改进线性系统的数值方面,使之更容易tfqmr迅速收敛。您可以使用不完整的矩阵分解功能iluichol.生成预处理器矩阵。你也可以使用平衡在因数分解之前改进了条件数的系数矩阵。有关前置条件的更多信息,请参见线性系统的迭代方法

tfqmr将未指定的前置数视为单位矩阵。

指定作为函数句柄

您可以任意指定,M1,或M2作为函数处理而不是矩阵。功能手柄执行矩阵矢量操作,而不是形成整个预处理器矩阵,使得计算更有效。

要使用函数句柄,请使用函数签名函数y = mfun(x)参数化功能解释如何向函数提供附加参数MFUN.,如果必要的。函数调用mfun (x)必须返回值M \ x或者M1、M2 \ (x)

数据类型:|function_handle
复数的支持:万博1manbetx是的

初始猜测,指定为具有长度等于的列向量大小(2).如果你能提供tfqmr有一个更合理的初步猜测x0与默认的零向量相比,它可以节省计算时间,帮助算法更快地收敛。

数据类型:
复数的支持:万博1manbetx是的

输出参数

全部收缩

线性系统解,返回为列向量。这个输出给出了线性系统的近似解a * x = b.如果计算成功(国旗= 0),然后relres.是小于还是等于

每当计算不成功(国旗〜= 0),解决方案x返回tfqmr是具有所有迭代的最小残余标准的那个。

融合标志,作为此表中的标量值之一返回。收敛标志指示计算是否成功并区分了几种不同形式的故障。

标志值

收敛

0

成功——tfqmr收敛到期望的公差之内Maxit.迭代。

1

失败- - - - - -tfqmr迭代Maxit.迭代但没有收敛。

2

失败 - 前提者矩阵或者M = M1 *平方米是病态的。

3.

失败- - - - - -tfqmr连续两次迭代后都是相同的。

4

失败 - 由此计算的标量数之一tfqmr算法变得太小或太大而无法继续计算。

相对残余错误,作为标量返回。相对残差误差Relres = Norm(B-A * x)/常规(b)表明答案有多准确。如果计算收敛到公差之内Maxit.迭代,然后Relres <= tol

数据类型:

迭代数,作为标量返回。该输出指示计算的答案所在的迭代数x计算了。每个外部迭代tfqmr包含两个内部迭代,所以iter可以返回十进制迭代数。

数据类型:

残余错误,作为向量返回。剩余错误规范(b * x)揭示算法如何为给定值融合x.元素的数量resvec等于迭代次数。您可以检查的内容resvec帮助决定是否更改值或者Maxit.

数据类型:

更多关于

全部收缩

无转置的准 - 最小残余方法

正如开发CGS方法以避免使用BICG中的系数矩阵的转置一样,开发了TFQMR方法以避免在QMR中使用转置。与“不起调”版本(BICG和QMR)相比,这些“平方”方法需要每步额外的矩阵矢量产品,因此它们略微效率略低。

TFQMR方法与CGS方法相当,但收敛更为平滑。然而,由于TFQMR最终使用的是BiCG多项式,所以无论CGS什么时候使用它,它都会失效[1]

提示

  • 大多数迭代方法的收敛性取决于系数矩阵的条件数,COND(A).您可以使用平衡改进的条件数一个,并且本身使最迭代求解器更容易收敛。但是,使用平衡当你随后分解均衡矩阵时,也会得到质量更好的预处理矩阵B = R * P * * C

  • 您可以使用矩阵重排序函数,例如解剖symrcm释放系数矩阵的行和列,并使因子矩阵被考虑为生成预处理器时最小化非安利斯的数量。这可以减少随后解决预处理线性系统所需的内存和时间。

参考

[1] Barrett, R., M. Berry, t.f. Chan, et al.,线性系统解的模板:迭代方法的构建块,暹罗,费城,1994年。

扩展功能

在R2006A之前介绍