清华大学高等数值分析_第二次实验作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二次实验作业
清华大学 高等数值分析 贾仲孝老师作业
第一题:构造例子特征值全部在右半平面时,观察基本的Arnoldi 方法和GMRES 方法的数值性态,和相应重新启动算法的收敛性。 答:
1、计算初始条件
1) 矩阵A 的生成
根据实Schur 分解,构造矩阵如下形式
11112222
/2/2/2/2n n
A n n n n ⨯-⎛⎫
⎪ ⎪ ⎪- ⎪= ⎪ ⎪ ⎪
- ⎪ ⎪⎝
⎭ 其中,A 由n/2个块形成,每个对角块具有如下形式,对应一对特征向量i i i αβ+
i
i i i A α
ββα-⎛⎫
= ⎪⎝⎭
、 这里,取n=1000,得到矩阵A 。经过验证,A 的特征值分布均在右半平面,如下图所示
50
100
150
200250300
350
400
450
500
-500-400-300-200-1000100200
300400500
复平面中A 的特征值分布情况
实部 Im(x)
虚部 R e (x )
特征值
2) b 的初值为 b=(1,1,1,1..1)T 3) 迭代初值为 x 0=0 4) 停机准则为 ε=10-6
2、基本的Arnoldi 和GMRES 方法
代入前面提到的初始值A 、b 、x0,得到的收敛结果如下
100200
300400500600
10-7
10
-6
10
-5
10
-4
10
-3
10
-2
10
-1
10
两种基本算法的||r k ||收敛曲线 (阶数n=1000)
迭代次数
||r k ||/||b ||
基本的Arnoldi 算法基本的GMRES 算法
结果讨论:从图中可以看出,基本的Arnoldi 方法经过554步收敛,基本的GMRES 方法经过535步收敛。这是由于GMRES 具有残差最优性,会略快于Arnoldi 方法,但是,由于两种方法的基本原理近似,GMRES 方法不会实质性的提速。
此外,从收敛曲线上看,由于特征值均处在右半平面,收敛曲线平滑,收敛速度(收敛因子)比较均匀。
3、重启动的GMRES 和Arnoldi 算法
对上述A 、b 、x0使用重启动的Arnoldi 和GMRES 算法。变化m 经过多次实验,得到如下结果: 1. 总迭代步长与m 之间的关系
50
100
150
9001000110012001300140015001600
170018001900两种重启算法总 迭代步长 与m 的关系曲线比较
总迭代次数
m
重启GMRES 重启Aronldi
从表中数据可以看出,结果相差并不大
2. 重启次数与m 之间的关系
50
100150
050
100
150
200
250
两种重启算法 重启次数 与m 的关系曲线比较
重启次数
m
重启GMRES 重启Aronldi
3. 计算时间与m 之间的关系
050
100150
3
3.5
4
4.5
5
5.5
重启的Arnoldi 算法 求解运行时间 与m 的关系曲线
求解运行时间(s )
m
50
100150
34
5
6
7
8
9
10
重启的GMRES 算法 求解运行时间 与m 的关系曲线
求解运行时间(s )
m
从上述结果中看到在m=40左右时,同时有求解时间和迭代总步长最小的结果。当m=40时,得到的收敛曲线结果如下图所示:
510
1520253035
10-7
10
-6
10
-5
10
-4
10
-3
10
-2
10
-1
10
两种重启算法的||r k ||收敛曲线 (m=40)
重启次数
||r k ||/||b ||
重启GMRES 重启Aronldi
200400
600800100012001400
10-7
10
-6
10
-5
10
-4
10
-3
10
-2
10
-1
10
两种重启算法的||r k ||收敛曲线 (m=40)
总迭代次数
||r k ||/||b ||
重启GMRES 重启Aronldi
160180200220
240260280300320340
10
-2
两种重启算法的||r k ||收敛曲线 (m=40)
总迭代次数
||r k ||/||b ||
重启GMRES 重启Aronldi
4. 结论
从上述结果中分析可得如下结论:
1) 对于这两种算法来说,重启动算法的总迭代步长要大于基本的算法,这个很容易理解,这
是由于在重启动时,会丢掉一些之前算过的信息,从另一个点我们认为更好(其实不一定好)的初值x0重新开始计算。
2) 这两种重启动算法,在两次重启动的交接点处都会产生不连续。GMRES 在两次重启动之间不
满足残差单调不增,然而在单次重启的内部计算过程中,则满足单调不增的原则。Arnodli 过程由于不具有残差二范数最小的性质,所以在以上两个位置处都可能会发生跳动。 3) 一般来说,重启次数随着m 的增大不断减小,当m 非常大的时候,就过度到了基本的不启动
算法。
4) 随着m 的增大,迭代总次数并不是单调下降的。重新启动的Arnoldi 方法在m=40时迭代次数
最少,重新启动的GMRES 方法m=30或40时迭代次数最少。
5) 计算代价(用运算时间估算)与m 不成线性关系,存在一个最优值,当m 大到一定程度,虽
然重启次数很小,但是每步代价很大,随着m 的进一步增加,代价逐渐增大。 6) 重启的算法如果收敛的话,代价可能会远远小于不重启的算法。但是最合适的m 的选取因问
题不同而不同,不好把握。
7) 对于同样的矩阵A ,GMRES 方法的收敛速度一般比相应的Arnoldi 方法快。这是由于其残差具
有最优性,而且在迭代步数相同的情况下,GMRES 方法的相对残差比相应的Arnoldi 方法的相对残差要小。
第二题。对于1中的矩阵,将特征值进行平移,使得实部有正有负,和1的结果进行比较,方法的收敛速度会如何?基本的Arnoldi 算法有无峰点?若有,基本的GMRES 算法相应地会怎样? 答:
1. 使用如下方法对第一题中的A 矩阵进行平移
'A A I μ=-
则得到的矩阵的特征值为'
i i λλμ=-。
2. 对第一题的A ,分别取μ=1.5、2.5、5.5、20.5、50.5、100.5、200.5、400.5、600.5、900.5、950.5,得到的
负特征值分别为1、2、5、20、50、100、200、400、600、900、950个。分别求解上述矩阵,得到的结果如下