主要内容

qmr

解线性方程组,quasi-minimal残留的方法

描述

例子

x= qmr (一个,b)试图解决线性方程组A * x =x使用Quasi-minimal残留方法。当尝试成功,qmr显示一条消息确认收敛。如果qmr无法收敛后最大迭代次数或停止任何理由,它显示诊断消息,其中包括相对剩余规范(b * x) /规范(b)停止和迭代次数的方法。

例子

x= qmr (一个,b,托尔)指定的公差的方法。默认的公差是1 e-6

例子

x= qmr (一个,b,托尔,麦克斯特)指定要使用的最大迭代数。qmr显示诊断消息如果不能收敛麦克斯特迭代。

例子

x= qmr (一个,b,托尔,麦克斯特,)指定一个预处理矩阵和计算x通过有效地解决系统 1 一个 x = 1 b 。使用一个预调节器矩阵可以提高问题的数值属性和计算的效率。

例子

x= qmr (一个,b,托尔,麦克斯特,M1,平方米)指定预处理矩阵的因素这样M = M1 *平方米

例子

x= qmr (一个,b,托尔,麦克斯特,M1,平方米,x0)指定一个初始猜解向量x。默认是零的向量。

例子

(x,国旗)= qmr (___)返回一个标记,用于指定是否该算法成功地融合。当国旗= 0,收敛是成功的。您可以使用这个输出语法与任何以前的输入参数组合。当你指定国旗输出,qmr不显示任何诊断消息。

例子

(x,国旗,relres)= qmr (___)还返回相对剩余规范(b * x) /规范(b)。如果国旗0,然后relres < =托尔

例子

(x,国旗,relres,iter)= qmr (___)返回迭代的数量iter在这x是计算。

例子

(x,国旗,relres,iter,resvec)= qmr (___)还返回一个向量的残留标准在每个迭代中,包括第一个残留规范(b * x0)

例子

全部折叠

解决一个平方线性系统使用qmr默认设置,然后调整解决方案中使用的宽容和迭代次数的过程。

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

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

解决 斧头 = b 使用qmr。输出显示包括相对残留误差的值 b - - - - - - 斧头 b

x = qmr (A, b);
qmr停在迭代20不收敛所需的公差1 e-06因为迭代的最大数量。返回的迭代(20)数量相对剩余0.12。

默认情况下qmr使用20个迭代和宽容的1 e-6,该算法无法在那些40迭代收敛这个矩阵。由于残余还大,这是一个很好的指标,需要更多的迭代(或预调节器矩阵)。您还可以使用更大的宽容使算法更容易收敛。

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

x = qmr (A, b, 1 e - 4100);
qmr停在100年迭代不收敛所需的公差0.0001因为达成的最大迭代数。返回的迭代(编号为100)相对剩余0.061。

即使有宽松的公差和更多的迭代剩余误差不会太大改善。当一个迭代算法停滞在这种方式,它是一个好迹象,预处理矩阵是必要的。

不完整的柯列斯基分解的计算一个,并使用L '作为预调节器输入因子qmr

L = ichol(一个);x = qmr (A, b, e - 4100 L ');
qmr聚集在迭代58与相对剩余8.4 e-05解决方案。

使用预调节器足够的问题,提高了数值属性qmr能收敛。

检查使用预处理矩阵的影响qmr解决一个线性系统。

负载west0479,一个真正的479 - 479年-非对称稀疏矩阵。

负载west0479一个= west0479;

定义b所以,真正的解决方案 斧头 = b 是一个向量的。

b =和(2);

宽容和最大迭代数。

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

使用qmr找到一个解决方案在请求的宽容和迭代次数。指定返回5个输出的信息解决方案过程:

  • x计算解决方案吗A * x =

  • fl0是一个标志指示是否算法融合。

  • rr0的相对剩余计算答案x

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

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

[x, fl0 rr0, it0 rv0] = qmr (A, b,托尔,麦克斯特);fl0
fl0 = 1
rr0
rr0 = 0.7984
it0
it0 = 17

fl0是1,因为qmr不收敛到所请求的宽容1 e-12在要求20迭代。17迭代是最好的近似解和返回的it0 = 17

援助与收敛速度慢,您可以指定一个预处理矩阵。自一个非对称,使用ilu生成预调节器 = l U 。指定公差忽略nondiagonal条目下降值小于1 e-6。解决了预处理系统 - - - - - - 1 一个 x = - - - - - - 1 b 通过指定lU作为输入,qmr

设置=结构(“类型”,“ilutp”,“droptol”1 e-6);[L U] = ilu(一个,设置);(x1, fl1 rr1、it1 rv1] = qmr (A, b,托尔,麦克斯特,L, U);fl1
fl1 = 0
rr1
rr1 = 4.1558 e-14
it1
it1 = 6

的使用ilu预调节器产生一个相对剩余不到规定的公差1 e-12在第六个迭代。输出rv1 (1)规范(b),输出rv1(结束)规范(b * x1)

你可以遵循的进步qmr通过绘制相对残差在每个迭代。情节的残余历史的每个解决方案指定的公差。

semilogy(0:长度(rv0) 1, rv0 /规范(b),“o”)举行semilogy(0:长度(rv1) 1, rv1 /规范(b),“o”)yline(托尔,“r——”);传奇(“没有预调节器”,ILU预处理的,“宽容”,“位置”,“东”)包含(的迭代次数)ylabel (的相对剩余的)

图包含一个坐标轴对象。坐标轴对象包含3线类型的对象,constantline。这些对象代表没有预调节器,ILU预调节器,宽容。

检查供应的影响qmr解决方案的初始猜测。

创建一个三对角稀疏矩阵。使用每一行的总和作为向量的右边 斧头 = b 因此,预期的解决方案 x 是一个向量的。

n = 900;e =的(n - 1);一个= spdiags ([e 2 * e e], 1:1, n, n);b =和(2);

使用qmr来解决 斧头 = b 两次:一次使用默认初始猜测,和一个解决方案的时间和一个很好的初始估计。使用200次迭代和默认的对这两个解决方案。金宝搏官方网站指定初始猜测第二个解决方案作为一个向量的所有元素等于0.99

麦克斯特= 200;x1 = qmr (A, b,[],麦克斯特);
qmr聚集在迭代27与相对剩余9.5 e-07解决方案。
x0 = 0.99 * e;x2 = qmr(麦克斯特,A, b, [] [], [], x0);
qmr聚集在迭代7与相对剩余6.7 e-07解决方案。

在这种情况下提供一个初始猜测使qmr更快地收敛。

返回中间结果

你也可以使用初始猜得到中间结果通过调用qmr在一个循环。每次调用解算器执行几个迭代计算并存储解决方案。然后使用这个解决方案的初始矢量迭代的下一批。

例如,这段代码执行四次100次迭代和存储解决方案向量每次通过For循环:

x0 = 0(大小(2),1);托尔= 1 e-8;麦克斯特= 100;k = 1:4 [x,国旗,relres] = qmr (A, b,托尔,麦克斯特[],[],x0);X = X (:, k);R (k) = relres;x0 = x;结束

X (:, k)在迭代解向量计算吗kfor循环的R (k)是解决方案的相对剩余。

解一个线性系统通过提供qmr计算一个函数处理* x‘* x的系数矩阵一个

创建一个非对称三对角矩阵。预览矩阵。

一个=画廊(“wilk”21)+诊断接头(1(20日1),1)
一个=21日×2110 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 8 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 7 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 6 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 2 0 0 0 0 0 0 0 0 0 0⋮

因为这三对角矩阵有一个特殊的结构,你可以代表操作* x一个函数处理。当一个乘以一个向量,大部分结果向量中的元素是0。结果中的非零元素对应的非零三对角元素一个

表达式 一个 x 就变成:

一个 x = ( 10 2 0 0 1 9 2 0 0 1 2 0 0 1 0 0 1 0 2 0 0 1 10 ] ( x 1 x 2 x 3 x 21 ] = ( 10 x 1 + 2 x 2 x 1 + 9 x 2 + 2 x 3 x 19 + 9 x 20. + 2 x 21 x 20. + 10 x 21 ]

结果向量可以写成三个向量的总和:

一个 x = ( 10 x 1 + 2 x 2 x 1 + 9 x 2 + 2 x 3 x 19 + 9 x 20. + 2 x 21 x 20. + 10 x 21 ] = ( 0 x 1 x 2 x 20. ] + ( 10 x 1 9 x 2 9 x 20. 10 x 21 ] + 2 ( x 2 x 3 x 21 0 ]

同样地,的表达式 一个 T x 就变成:

一个 T x = ( 10 1 0 0 2 9 1 0 0 2 1 0 0 2 0 0 1 0 1 0 0 2 10 ] ( x 1 x 2 x 3 x 21 ] = ( 10 x 1 + x 2 2 x 1 + 9 x 2 + x 3 2 x 19 + 9 x 20. + x 21 2 x 20. + 10 x 21 ]

一个 T x = ( 10 x 1 + x 2 2 x 1 + 9 x 2 + x 3 2 x 19 + 9 x 20. + x 21 2 x 20. + 10 x 21 ] = 2 ( 0 x 1 x 2 x 20. ] + ( 10 x 1 9 x 2 9 x 20. 10 x 21 ] + ( x 2 x 3 x 21 0 ]

在MATLAB®,编写一个函数,创建这些向量并将它们添加在一起,从而赋予的价值* x‘* x,这取决于国旗输入:

函数y = afun (x,国旗)如果比较字符串(国旗,“notransp”)%计算* x(y = 0;x (1:20))+ ((10:1:0)';(1:10)”)。* x+ 2 * (x(2:结束);0);elseif比较字符串(国旗,“透明”)' * x %计算y = 2 * [0;x (1:20))+ ((10:1:0)';(1:10)”)。* x+ (x(2:结束);0);结束结束

(这个函数保存为本地函数结束时的例子。)

现在,解决线性系统 斧头 = b 通过提供qmr计算的函数处理* x‘* x。使用一个公差1 e-6和25个迭代。指定 b 行总结 一个 所以,真正的解决方案 x 是一个向量的。

b =全(sum (A, 2));托尔= 1 e-6;麦克斯特= 25;x1 = qmr (@afun, b,托尔,麦克斯特)
qmr聚集在迭代19与相对剩余4.7 e-07解决方案。
x1 =21日×11.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000⋮

本地函数

函数y = afun (x,国旗)如果比较字符串(国旗,“notransp”)%计算* x(y = 0;x (1:20))+ ((10:1:0)';(1:10)”)。* x+ 2 * (x(2:结束);0);elseif比较字符串(国旗,“透明”)' * x %计算y = 2 * [0;x (1:20))+ ((10:1:0)';(1:10)”)。* x+ (x(2:结束);0);结束结束

输入参数

全部折叠

系数矩阵,指定为一个方阵或函数句柄。这个矩阵是线性系统的系数矩阵A * x =。一般来说,一个是一个大型稀疏矩阵或函数句柄返回产品大型稀疏矩阵的列向量。

指定一个作为处理函数

您可以选择性地指定系数矩阵作为处理函数,而不是一个矩阵。函数处理返回矩阵向量的产品,而不是形成整个系数矩阵,计算效率更高。下载188bet金宝搏

要使用一个函数处理,使用函数签名函数y = afun (x,选择)参数化功能解释如何提供额外的参数函数afun,如果必要的。这个函数afun必须满足以下条件:

  • afun (x, notransp)返回的产品* x

  • afun (x,“透明”)返回的产品‘* x

可接受的函数的一个例子是:

函数y = afun (x,选择,B, C, n)如果比较字符串(选择,“notransp”)y = [B * x (n + 1:结束);C * x (1: n)];其他的* x y = [C”(n + 1:结束);B * x (1: n)];结束
这个函数afun使用的值BC来计算* x‘* x(根据指定的标志)没有形成整个矩阵。

数据类型:|function_handle
复数的支持:金宝app是的

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

数据类型:
复数的支持:金宝app是的

公差的方法,指定为一个积极的标量。使用该输入平衡精度和运行时的计算。qmr必须符合公差在允许迭代的数量才能成功。一个较小的值托尔意味着答案必须更精确的计算才能成功。

数据类型:

最大迭代次数,指定为一个积极的标量整数。增加的价值麦克斯特允许更多的迭代qmr为了满足公差托尔。一般来说,一个更小的值托尔意味着更多的迭代需要成功地完成计算。

预处理矩阵,矩阵或作为单独的参数指定的函数处理。您可以指定一个预处理矩阵或其矩阵因素M = M1 *平方米提高数值方面的线性系统和方便qmr快速收敛。对于平方系数矩阵,您可以使用不完整的矩阵分解的功能iluichol生成预调节器矩阵。你也可以使用平衡分解前改善系数矩阵的条件数。有关预调节器的更多信息,请参阅线性系统的迭代方法

qmr将未指明的预调节器视为单位矩阵。

指定作为处理函数

你可以指定任何,M1,或平方米作为函数处理代替矩阵。函数处理执行矩阵向量操作而形成整个预处理矩阵,使计算更加高效。

使用一个函数处理,首先创建一个函数的签名函数y = mfun (x,选择)参数化功能解释如何提供额外的参数函数mfun,如果必要的。这个函数mfun必须满足以下条件:

  • mfun (x, notransp)回报的价值M \ xM1、M2 \ (x)

  • mfun (x,“透明”)回报的价值M ' \ xM1 ' \”(M2 \ x)

可接受的函数的一个例子是:

函数y = mfun (x,选择a, b)如果比较字符串(选择,“notransp”)y = x。*;其他的y = x。* b;结束结束
在本例中,函数mfun使用一个b来计算M \ x = x *M ' \ x = x * b(根据指定的标志)没有形成整个矩阵

数据类型:|function_handle
复数的支持:金宝app是的

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

数据类型:
复数的支持:金宝app是的

输出参数

全部折叠

线性系统的解决方案,作为一个列向量返回。这个输出给出了近似解的线性系统A * x =。如果计算成功(国旗= 0),然后relres小于或等于什么托尔

当计算不成功(国旗~ = 0),解决方案x返回的qmr是微小残留标准计算所有迭代。

收敛国旗,作为一个标量值的表返回。计算的收敛性标志指示是否成功和区分几种不同形式的失败。

标志值

收敛

0

成功——qmr聚集到所需的公差托尔麦克斯特迭代。

1

失败- - - - - -qmr迭代麦克斯特迭代,但没有收敛。

2

失败——预调节器矩阵M = M1 *平方米是病态的。

3

失败- - - - - -qmr停滞不前之后连续两个迭代是相同的。

4

失败——一个标量计算的qmr算法变得太小或太大继续计算。

相对残差,作为一个标量返回。相对残差relres =规范(b * x) /规范(b)表明如何准确的答案是。如果计算收敛宽容托尔麦克斯特迭代,然后relres < =托尔

数据类型:

迭代数,作为一个标量返回。这个输出表明迭代计算的答案x计算了。

数据类型:

剩余的错误,作为一个向量返回。剩余误差规范(b * x)揭示了如何接近给定值的算法是收敛的x。元素的数量resvec等于迭代的数量。您可以检查的内容resvec帮助决定是否更改的值托尔麦克斯特

数据类型:

更多关于

全部折叠

Quasi-minimal残留方法

QMR算法被开发成一种改进BiCG。虽然gmr使用维子空间的正交基,计算最小剩余的解决方案,QMR只使用一个双正交基,因此计算quasi-minimal剩余的解决方案。

比BiCG QMR通常收敛更顺利,它还使用先行的技术来避免故障在几乎所有的情况下。计算BiCG QMR只是略高于成本[1]

提示

  • 大多数迭代方法的收敛性取决于系数矩阵的条件数,气孔导度(A)。当一个是广场,你可以使用吗平衡自行改善其条件数,这使得大多数迭代解决者更容易收敛。然而,使用平衡时也会导致更好的质量矩阵预调节器随后因素平衡矩阵B = R * P * * C

  • 您可以使用矩阵重新排序等功能解剖symrcm来交换系数矩阵的行和列的数量,减少非零系数矩阵分解时生成一个预调节器。这可以减少所需的内存和时间随后预先处理解决线性系统。

引用

[1]巴雷特,R。,米。Berry, T. F. Chan, et al.,线性系统的解决方案模板:迭代方法的构建块、暹罗、费城1994人。

[2]Freund,罗兰·w·诺埃尔·m·不能“QMR: quasi-minimal残余non-Hermitian线性系统的方法,”暹罗杂志:号码。数学。60,1991年,页315 - 339。

扩展功能

版本历史

之前介绍过的R2006a