广义最小残余方法(与重启)
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
, 解决方案X
返回的是与上计算所有的迭代极小范残留。不显示任何消息,如果旗
输出被指定。
[X,旗,relres] = GMRES(A,B,...)
还返回相对残余范数(B-A * X)/常态(b)中
。如果旗
是0
,relres <= TOL
。第三个输出,relres
,是预处理系统的相对残留。
[X,旗,relres,ITER] = GMRES(A,B,...)
也返回两外侧和内侧迭代次数在该X
被计算,其中0 <= ITER(1)<=麦克斯特
和0 <= ITER(2)<=重启
。
[X,旗,relres,ITER,resvec] = GMRES(A,B,...)
还返回在每个内迭代的剩余规范的载体。这些是经过预调节的系统中的残留的规范。
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的溶液中
本实施例中代替了矩阵一个
在具有手柄的矩阵矢量乘积函数前面的例子好玩儿
和预处理器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);
FL3
,FL4
和FL5
都是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。