病态线性方程组的求解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
病态线性方程组的求解
理论分析表明,数值求解病态线性方程组很困难。
考虑求解如下的线性方程组的求解Hx = b ,期中H 是Hilbert 矩阵,()ij n n H h ⨯=,1
1
ij h i j =+-,i ,j = 1,2,…,n
1. 估计矩阵的2条件数和阶数的关系
2. 对不同的n ,取(1,1,
,1)n
x =∈
,分别用Gauss 消去,Jacobi 迭代,Gauss-seidel 迭
代,SOR 迭代和共轭梯度法求解,比较结果。
3. 结合计算结果,试讨论病态线性方程组的求解。
1)估计矩阵的2-条件数和阶数的关系
矩阵的2-条件数定义为:1
222
()Cond A A A
-=⨯,将Hilbert 矩阵带入有:
1222
()Cond H H H -=⨯。
使用MA TLAB 自带的cond2函数进行计算并画出log10
(cond2)和阶数n 的关系曲线如下:
可见当n 小于13的时候,条件数的对数与阶数有较好的线性关系,但是随着阶数的提高,
条件数趋于“稳定”地振荡。
但是事实上,n较大时,H矩阵已经奇异,直接使用cond函数计算结果可能存在不准确性。
原因是对于条件数过大的矩阵使用inv函数求逆矩阵是不可靠的,应该使用invhilb函数进行求逆,并代入定义式中求解,生成的结果如下所示。
线性度较好,可知,Hilbert矩阵的2-条件数会随其阶数n的增加呈指数增大趋势,因此当n较大时Hilbert矩阵将是严重病态的。
对不同的n,采用各种方法求解方程
编写程序,选取n=2,3,5,10,15,20,迭代条件为迭代100000次或者是计算精度达到1e-6,若迭代次数少于设定最大值,表示相邻两次迭代达到精度要求,或者是计算结果超出范围。
X0取零向量,w取1.2,计算结果如下所示:
由上可见,当n大于2时,Jacobi法已经不收敛,故其迭代次数已经没有意义。
当n=15时,Gauss消去法已经不收敛。
并且随着阶数的上升,gauss消去法的误差也随之上升。
对于各种方法的收敛速度的比较,当迭代的精度都是1e-6时,预处理共轭梯度法的收敛速度最快,接着是GS法,然后是SOR法(此时w取值为1.2)。
当w取值0.9时,SOR 的迭代次数大大降低,以15阶为例,SOR的迭代次数下降为14810,仅为w=1.2时的一半。
此时SOR的迭代次数稍小于GS法。
一般来说,SOR的迭代次数高于GS法。
3.综合讨论
通过以上的计算,总结求解病态线性方程的特点:
1、收敛速度慢,收敛性取决于迭代方法
对于Hilbert矩阵,Jacobi法在n大于2就不收敛了,而gauss消去法在高阶时也同样不收敛。
对于GS法和SOR法,虽然可以收敛(事实上这是由于Hilbert矩阵是
正定对称的,所以决定了GS法以及SOR法一定收敛),但是它们的迭代次数都较高,说明迭代速度较慢。
而预处理后的收敛速度较之有很大的提升。
2、计算的精度低,高阶误差大
由于病态方程的条件数交大,因此对于微小的扰动有很大的反应,造成计算结果
的偏差,特别是阶数较高时,计算误差也随之增加。
对于这个问题,PCG法较好
地解决了条件数高的问题。
在50阶矩阵时,PCG法也仅仅需要12次的迭代次
数。
因此,在求解病态方程组时,应优先考虑进行预处理,降低条件数。
对于低阶求解,可以直接使用gauss消去法,但是需要保证其收敛性的前提。