第三次作业第八题
取b=(1,1,1,...1)T,x0=0,停机准则为10-6。
1)当取A1=(a ij)=1/(i+j-1)时,取阶数n=50,m=20时,得到收敛曲线如下
结果表明,重启的GMRES算法没有重启就得到了非常精确的结果。
这是由于该矩阵在n 较小时的数值正定特性有关。
取n=500 m=20计算结果如下,该图为重启次数与残差之间的关系曲线
可以看出,该方法重启100步都无法收敛到10-6。
提高m的值为m=100,计算如下
从结果中可以看出,第一次计算(未重启)就得到了精确的结果。
该方法是数值qi
下面将阶数增为1000,m=20计算如下
图中可以看出,重启的GMRES已经无法收敛,并且残差下降非常慢,没有再进行计算的必要。
将m增为100,结果依然如前面,在一次重启就解出了结果。
2)当取A=A2
◆当n=100时,对该矩阵使用GMRES方法,迭代20步即得到结果。
使用GMRES(m),当m=10时,重启一次即可得到类似精度的结果,与GMRES方法的迭代步数一致(但是GMRES(m)代价小)。
◆当n=500时,m=10时,重启一次得到结果,残差变化如下图
⏹当n=500时,m=10时,收敛速度与前一次相同,重启动一次即可得到结果
对于条件数较小,且规则的矩阵,求解速度很快,总迭代次数几乎不随m或n变化。
3)对于A3矩阵,当n=1000阶时,当m=10时,经过九次重启即可得到精确的结果,重启时的残差与重启次数的关系如下图
总结:
1.GMRES方法比GMRES(m)方法收敛性好,GMRES(m)方法延迟了收敛。
2.但是GMRES方法随着迭代次数增大,代价急剧增大,求解越来越慢。
GMRES(m)方法则可能在非常小的代价下求得适合精度的结果。
3.GMRES(m)方法虽然代价小,但是求解结果不一定收敛,与m值的取值和本身的问题有关。
4.GMRES和GMRES(m)方法均满足残差单调不增的原则,但是重启的GMRES(m)方法在重启点处可能会发生残差增大的现象。
第三次作业第四题
按照题目要求编程求解,得到的结果如下: ● 当n=100,m=10时,曲线的残差如下所示
从图中可以看出,方法仅在第一步减小,随着步长增加,残差rk 以及x-x*不再变化,方法失效。
01234
567891011101
迭代次数
||x k
-x *||
||x k -x *||的变化曲线
12345
67891011
10
0.21
10
0.23
10
0.25
10
0.27
100.29
10
0.31
10
0.33
迭代次数
||b -A x m
||
||b-Ax m ||的变化曲线
● 当n=100,m=100时,方法一步收敛,||b-Ax m ||以及||x m -x*||精度为机器精度。
经过多次实验,改变n 和m 的值,总结实验现象如下:
● 在m<n 时,这个方法对于这个A 和b 矩阵来说,是失效的,无论进行多少步也无法收敛; ● 当m=n 时,方法一步收敛,得到精确解。