文档

GMRES

广义最小残余方法(与重启)

句法

X = GMRES(A,B)
GMRES(A,B,重新启动)
GMRES(A,B,重新启动,TOL)
GMRES(A,B,重新启动,TOL,麦克斯特)
GMRES(A,B,重新启动,TOL,麦克斯特,M)
GMRES(A,B,重新启动,TOL,麦克斯特,M1,M2)
GMRES(A,B,重新启动,TOL,麦克斯特,M1,M2,X0)
[X,旗] = GMRES(A,B,...)
[X,旗,relres] = GMRES(A,B,...)
[X,旗,relres,ITER] = GMRES(A,B,...)
[X,旗,relres,ITER,resvec] = GMRES(A,B,...)

描述

X = GMRES(A,B)试图解决线性方程系统A * X = B对于X。该ñ-通过-ñ系数矩阵一个必须是正方形,要大而稀疏。列向量b必须有长度ñ一个可以是一个函数句柄,好玩儿,这样afun(x)的回报斧头。对于这个语法,GMRES不重新启动;迭代的最大数目是分(N,10)

参数化功能介绍了如何给函数提供额外的参数好玩儿,以及预调节功能MFUN如下所述,如果需要的话。

如果GMRES收敛,则显示一条消息到该效果。如果GMRES未能迭代或暂停出于任何原因的最大数目后收敛,则输出警告消息显示所述相对残余范数(B-A * X)/常态(b)中和迭代号,在该方法停止或失败。

GMRES(A,B,重新启动)重新启动的方法每重新开始内迭代。外迭代的最大数目是分(N /重启,10)。总的迭代的最大数目是重启*分钟(N /重启,10)。如果重新开始ñ要么[], 然后GMRES不重新启动,总迭代的最大数量为分(N,10)

GMRES(A,B,重新启动,TOL)指定方法的耐受性。如果TOL[], 然后GMRES使用默认的,1E-6

GMRES(A,B,重新启动,TOL,麦克斯特)指定外迭代,即最大数目,迭代的总数目不超过重启*麦克斯特。如果麦克斯特[]然后GMRES使用默认的,分(N /重启,10)。如果重新开始ñ要么[],然后总迭代的最大数目是麦克斯特(代替重启*麦克斯特)。

GMRES(A,B,重新启动,TOL,麦克斯特,M)GMRES(A,B,重新启动,TOL,麦克斯特,M1,M2)使用预调节器中号要么M = M1 * M2有效地解决了系统INV(M)* A * X = INV(M)* B对于X。如果中号[]然后GMRES适用于无预条件。中号可以是一个函数句柄MFUN这样MFUN(x)的回报中号\ X

GMRES(A,B,重新启动,TOL,麦克斯特,M1,M2,X0)指定第一初始猜测。如果X0[], 然后GMRES使用默认的全零向量。

[X,旗] = GMRES(A,B,...)也返回一个收敛标志:

标志= 0

GMRES收敛到所需的公差TOL麦克斯特外迭代。

标志= 1

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

标志= 2

预调节器中号是病态。

标志= 3

GMRES停滞不前。(两个连续迭代是一样的。)

每当不是0, 解决方案X返回的是与上计算所有的迭代极小范残留。不显示任何消息,如果输出被指定。

[X,旗,relres] = GMRES(A,B,...)还返回相对残余范数(B-A * X)/常态(b)中。如果0relres <= TOL。第三个输出,relres,是预处理系统的相对残留。

[X,旗,relres,ITER] = GMRES(A,B,...)也返回两外侧和内侧迭代次数在该X被计算,其中0 <= ITER(1)<=麦克斯特0 <= ITER(2)<=重启

[X,旗,relres,ITER,resvec] = GMRES(A,B,...)还返回在每个内迭代的剩余规范的载体。这些是经过预调节的系统中的残留的规范。

例子

使用GMRES与矩阵输入

A =画廊( '威尔克',21);B =总和(A,2);TOL = 1E-12;麦克斯特= 15;M1 = DIAG([10:-1:1 1 1:10]);X = GMRES(A,B,10,TOL,麦克斯特,M1);

显示以下消息:

GMRES(10)会聚在外部循环2(内部迭代9)与相对残余3.3E-013的溶液中

使用GMRES与功能处理

本实施例中代替了矩阵一个在具有手柄的矩阵矢量乘积函数前面的例子好玩儿和预处理器M1带手柄的backsolve功能MFUN。的例子是包含在功能run_gmres

  • 呼叫GMRES与功能手柄@好玩儿作为第一个参数。

  • 包含好玩儿MFUN为嵌套函数,这样在所有变量run_gmres可用来好玩儿MFUN

下面显示的代码run_gmres

函数X1 = run_gmres N = 21;B = afun(个(N,1));TOL = 1E-12;麦克斯特= 15;X1 = GMRES(@ afun,B,10,TOL,麦克斯特,@ MFUN);函数y = afun(X)Y = [0;×(1:N-1)] + ... [((N-1)/ 2:-1:0)';(1:第(n-1)/ 2)'] * X + ... [X(2:N);0];端函数y = MFUN(R)Y = R ./ [((N-1)/ 2:-1:1)'; 1; (1:(n-1)/2)']; end end

当你进入

X1 = run_gmres;

MATLAB®软件显示消息

GMRES(10)会聚在外部循环2(内部迭代10)与相对残余1.1E-013的溶液中。

使用预调节,而不重新启动

这个例子演示了如何使用预处理器,无需重新启动GMRES

加载west0479,真正的479,由-479非对称稀疏矩阵。

加载west0479;A = west0479;

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

TOL = 1E-12;麦克斯特= 20;

确定b所以,真正的解决办法是全部为一向量。

B =全(总和(A,2));[X0,FL0,RR0,IT0,RV0] = GMRES(A,B,[],TOL,麦克斯特);

FL0是因为1GMRES不收敛到所需容限1E-12中所要求的20次迭代。最好的近似解决方案GMRES返回是最后一个(由所指示的IT0(2)= 20)。MATLAB存储的剩余历史RV0

情节的行为GMRES

semilogy(0:麦克斯特,RV0 /范数(b)中,'-o');xlabel(“迭代次数”);ylabel(“相对残存”);

该图显示,该解决方案收敛速度慢。预条件可提高疗效。

ILU以形成预处理器中,由于一个是不对称。

[L,U] = ILU(A,结构('类型''ilutp''droptol',1E-5));
错误使用ILU有一个枢轴等于零。考虑降低落忍或可考虑使用“udiag”选项。

注MATLAB不能构建不完全LU,因为这将导致一个奇异的因素,这是无用的预处理器。

正如错误消息指出,以减少的落忍再试一次。

[L,U] = ILU(A,结构('类型''ilutp''droptol',1E-6));[X1,FL1,RR1,IT1,RV1] = GMRES(A,B,[],TOL,麦克斯特,L,U);

FL1是0,因为GMRES驱动器的相对残留于9.5436e-14(的价值另外,rr)。相对残余小于规定公差1E-12在第六次迭代(的值IT1(2))当由所述不完全LU分解与一滴公差预处理1E-6。输出,RV1(1)范数(M \ b)中,其中M = L *ù。输出,RV1(7)范数(U \(L \(B-A * X1)))

按照进度GMRES通过在每次迭代从初始估计(迭代数0)开始绘制相对残差。

semilogy(0:IT1(2),RV1 /范数(b)中,'-o');xlabel(“迭代次数”);ylabel(“相对残存”);

使用具有重新启动预调节器

这个例子演示了如何使用预处理器与重启GMRES

加载west0479,真正的479,由-479非对称稀疏矩阵。

加载west0479;A = west0479;

确定b所以,真正的解决办法是全部为一向量。

B =全(总和(A,2));

构造一个不完全LU预条件如前面的示例所示。

[L,U] = ILU(A,结构('类型''ilutp''droptol',1E-6));

使用重启的好处GMRES是限制的存储器来执行该方法所需的量。如果没有重新启动,GMRES要求麦克斯特存储的载体,以保持Krylov子空间的基础。也,GMRES必须正交对所有在每个步骤之前的载体。重新启动限制使用的工作区的数量和工作的每个外迭代完成的工作量。请注意,即使预处理GMRES在上述六个迭代收敛,则算法允许多达二十基向量,并且因此,被分配的所有空间前面的。

执行GMRES(3)GMRES(4)GMRES(5)

TOL = 1E-12;麦克斯特= 20;RE3 = 3;[X3的,FL3,RR3,IT3,RV3] = GMRES(A,B,RE3,TOL,麦克斯特,L,U);RE4 = 4;[X4的,FL4,RR4,IT4,RV4] = GMRES(A,B,RE4,TOL,麦克斯特,L,U);RE5 = 5;[X5,FL5,RR5,IT5,RV5] = GMRES(A,B,RE5,TOL,麦克斯特,L,U);

FL3FL4FL5都是0,因为在每种情况下重新启动GMRES驱动相对残余为小于规定的公差1E-12

下面的图显示重新启动每个收敛历史GMRES方法。GMRES(3)在外部循环5中,内部迭代3收敛(IT3 = [5,3]),这将是相同的外迭代6,内部迭代0,因此对最终的刻度标记的标记6。

图semilogy(1:1/3:6,RV3 /范数(b)中,'-o');H1 = GCA;h1.XTick = [1:1/3:6];h1.XTickLabel = ['1';“”;“”;'2';“”;“”;'3';“”;“”;'4';“”;“”;'5';“”;“”;'6'];标题('GMRES(3)')xlabel(“迭代次数”);ylabel(“相对残存”);

图semilogy(1:1/4:3,RV4 /范数(b)中,'-o');H2 = GCA;h2.XTick = [1:1/4:3];h2.XTickLabel = ['1';“”;“”;“”;'2';“”;“”;“”;'3']。标题('GMRES(4)')xlabel(“迭代次数”);ylabel(“相对残存”);

图semilogy(1:1/5:2.8,RV5 /范数(b)中,'-o');H3 = GCA;h3.XTick = [1:1/5:2.8];h3.XTickLabel = ['1';“”;“”;“”;“”;'2';“”;“”;“”;“”]。标题('GMRES(5)')xlabel(“迭代次数”);ylabel(“相对残存”);

参考

巴雷特,R.,M。莓果,T.F。陈等人,构建模块的迭代方法:线性系统的解决方案模板,SIAM,费城,1994年。

萨阿德优素福和Martin H.舒尔茨,“GMRES:广义微小残留算法求解非对称线性系统,”SIAM J.科学。统计。COMPUT。,1986年7月,卷。7,第3号,第856-869。

R2006a前推出

是这个主题有帮助吗?