《古典迭代法中的Jacobi迭代法和SOR迭代法求解Hilbert矩阵方程组.doc》由会员分享,可在线阅读,更多相关《古典迭代法中的Jacobi迭代法和SOR迭代法求解Hilbert矩阵方程组.doc(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、优质文本燕山大学课 程 设 计 说 明 书题目:直接法求解Hilbert矩阵方程组学院系: 理学院 年级专业:学 号: 学生姓名: 指导教师: 教师职称: 教授 燕山大学课程设计论文任务书院系:理学院 基层教学单位: 学 号学生姓名专业班级设计题目古典迭代法求解Hilbert矩阵方程组设计技术参数分别利用古典迭代法中的Jacobi迭代法和SOR迭代法,求解Hilbert矩阵方程组,并及准确解进行比拟,得出结论,然后针对不同的n值重复进行计算并比拟所得的结果。设计要求写出相应的Matlab程序,执行程序得出的结果。通过结果比照分析并进行理论分析。工作量四周的时间掌握Hilbert矩阵的性质、Hi
2、lbert矩阵方程组的特点及其相关的求解方法,研究古典迭代法中的Jacobi迭代法和SOR迭代法并用这两种方法求解Hilbert矩阵方程组,分析这两种方法对解Hilbert矩阵方程组的效果如何;熟悉使用Matlab软件,上机求解给定题目。工作计划第一周:查阅资料,根本了解Jacobi迭代法和SOR迭代法的根本原理、解题步骤等,主要对Jacobi迭代法进行分析;第二周至第三周:根据其他组员编写的Jacobi迭代法的Matlab程序进行具体题目的计算并及其他同学负责的局部进行综合分析;第四周:整理和撰写报告,进行辩论。参考资料1谢进,李大美. MATLAB及计算方法实验M. 武汉大学出版社,201
3、6.2周品,何正风.MATLAB数值分析M. 机械工业出版社,2016.13林雪松,周婧,林德新.MATLAB7.0应用集锦M. 机械工业出版社,20064(美)John H.Mathews,Kurtis D.Frink数值方法M.电子工业出版社,20055李庆扬,王能超,易大义.数值分析M.华中科技大学出版社,2006.1指导教师签字基层教学单位主任签字说明:此表一式四份,学生、指导教师、基层教学单位、系部各一份。2012年01月09日 燕山大学课程设计评审意见表指导教师评语:成绩: 指导教师: 年 月 日辩论小组评语:成绩: 评阅人: 年 月 日课程设计总成绩:辩论小组成员签字:年 月 日
4、32 / 37优质文本目 录摘要2一、课题背景简介3二、数学模型描述3三、算法原理4 (一) Hilbert矩阵的来源及其正定性.4 (二)迭代法的根本思想.5 1Jacobi迭代法.6 2SOR方法 7四、算法程序8(一)Jacobi迭代法8(二) SOR方法 9五、求解过程10一第1题10二第2题12三第3题18六、心得体会20七、参考文献20摘要论文旨在阐述求解Hilbert矩阵方程方法中的古典迭代法应用于求解特殊矩阵的过程,其中主要包括Jacobi迭代法和SOR迭代法。文中从方法原理、算法的根本应用到理论的归纳及扩展。通过这一例题,可进一步领会数值分析的实际应用。同时为了考察读者对古典
5、迭代法的学习灵活度,例题的解答需要用到数值方法在MATLAB中的实现,包括数值方法在MATLAB中的函数实现,MATLAB编程和MATLAB绘图,使读者在上机练习中加深对数值分析算法原理的理解,通过对算法的思考和理论分析,掌握MATLAB的使用。关键词:Hilbert矩阵 古典迭代法 Jacobi迭代法 SOR迭代法 一、课题背景简介随着电子计算机的出现和迅速开展,在各门自然科学和工程技术科学的开展中,科学计算已经成为平行于理论分析和科学实验的第三种科学手段。数值计算是科学计算中的一个不可缺少的环节,而在数值计算中,一类很重要的问题就是线性方程组的求解。另外,数学和物理以及力学等学科和工程技术
6、中许多问题的最终解决都归结为解一个或一些大型系数矩阵的线性方程组。所以,大型线性方程组的求解是大规模科学及计算的核心,许多作者都对此作了研究。对线性方程组的求解,主要有直接求解法和迭代法求解。对于阶数不太高的线性方程组,用直接法比拟方便,高斯消元法和克兰姆法那么是直接解法里面最重要的解法。但是,随着科学技术的飞速开展,需要求解的问题的规模越来越大,迭代法已取代直接法成为求解大型线性组的最重要的一类方法。此时,迭代格式的收敛性和收敛速度成为一个很重要的问题,成为人们关注的焦点。不收敛的格式当然不能用,虽然收敛但是收敛的很慢的格式,不仅是人工和机器的时间比拟浪费,而且还不一定能解出结果,实际应用价
7、值太小。 通常用的迭代法有Jacobi,Gauss-Seidel等古典迭代法,还有SOR,AOR以及SAOR,SSOR等迭代法。这些迭代法的提出对大型线性方程组的求解提供了一条快速有效的途径。但是这些迭代法相对来说使用条件很苛刻,或者很繁琐。此外当迭代矩阵的谱半径比拟大,尤其接近1时,迭代速度将会很慢,极大的影响了方程组求解的时效性,从而使它们的应用受到了一定的限制。MATLAB是矩阵实验室Matrix Laboratory的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink
8、两大局部。MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创立用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理及通讯、图像处理、信号检测、金融建模设计及分析等领域。MATLAB的根本数据单位是矩阵,它的指令表达式及数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且mathwork也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也参加了对C,FOR
9、TRAN,C+ ,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。MATLAB的优势:1友好的工作平台和编程环境;2简单易用的程序语言;3强大的科学计算机数据处理能力;4出色的图形处理功能;5应用广泛的模块集合工具箱;6实用的程序接口和发布平台;7应用软件开发包括用户界面二、数学模型描述:古典的迭代法求解Hilbert矩阵方程组考虑方程组,其中系数矩阵为:假设由准确解确定向量。1选择n=6,分别用Jacobi迭代法和SOR迭代法等求解。将计算结果及准确解进行
10、比拟。2逐步增大n(n=8,10,),重复1的计算。比拟结果,结果说明什么?3对于计算过程中发现的问题,尝试用其他方法加以解决。三、算法原理:(一) Hilbert矩阵的来源及其正定性设,求n次多项式使得取最小值。其中,称为函数的最正确平方逼近多项式。由极值必要条件,对中的变量求导数,得令其为零,得方程组令,将方程组写为矩阵形式方程组的系数矩阵就是著名的Hilbert矩阵。多项式可表示为内积形式所以积分,得由此可知,Hilbert矩阵是对称正定矩阵。另外,Hilbert矩阵是著名的病态矩阵。(二)迭代法的根本思想对于大型方程组 1其中,。假设A非奇异,方程组有唯一解。将变形为等价的方程组 2由
11、此建立迭代公式 3给定初始向量,按此公式计算得近似解向量序列,称此方法为迭代法。假设对任意,当迭代次数无限增加时,序列都有相同的极限,即,也就是说,。显然有 4这是说迭代公式是收敛的,否那么说发散的,称迭代格式3中的矩阵B为迭代矩阵,对于不同的迭代矩阵得到不同的迭代格式。1Jacobi迭代法设有方程组 (),记作, 1A为非奇异矩阵。将A分解为,其中,将式1的第个方程用去除再移项,得到等价方程组,2简记作 其中,。对方程组2应用迭代法,得到解式1的Jacobi迭代公式 3其中为第k次迭代向量。设已经算出,由式(3)可计算下一次迭代向量。显然迭代公式3的矩阵形式为其中称为Jacobi迭代矩阵。2
12、SOR方法设有方程组 1其中为非奇异矩阵,且设,分解A为。 2设第k次迭代向量,及第k+1次迭代向量的分量,要求计算分量。首先用Gauss-Seidel迭代法定义辅助量 , 3再把取为及某个平均值及加权平均,即 4用式(3)代入式4即得到解方程组的逐次超松弛迭代公式 5其中称为松弛因子,或写为 6显然,当时,解式1的SOR方法就是Gauss-Seidel迭代法。当时,称式5为低松弛法,当时称式5为超松弛法。SOR迭代公式的矩阵形式,迭代公式5也可写为 7用式,那么,即.显然对于任何一个值,非奇异由设,于是也就是说,解式1设的SOR方法迭代公式为 8其中,.矩阵称为SOR方法的迭代矩阵。四、算法
13、程序一Jacobi迭代法function x,n=jacobi(A,b,x0,eps,varargin)if nargin=3 eps= 1.0e-6; M = 50000;elseif nargin=eps x0=x; x=B*x0+f; n=n+1; if(n=M) disp(Warning: 迭代次数太多,可能不收敛!); return; endend(二) SOR方法function x,n=SOR(A,b,x0,w,eps,M)if nargin=4 eps= 1.0e-6; M = 50000;elseif nargin4 error returnelseif nargin =5
14、M = 50000;endif(w=2) error; return;endD=diag(diag(A);L=-tril(A,-1);U=-triu(A,1);B=inv(D-L*w)*(1-w)*D+w*U);f=w*inv(D-L*w)*b;x=B*x0+f;n=1;while norm(x-x0)=eps x0=x; x =B*x0+f; n=n+1; if(n=M) disp(Warning: 迭代次数太多,可能不收敛!); return; endend五、求解过程一第1题1、MATLAB计算过程在Command Window中输入 H=hilb(6); xn=ones(6,1); b
15、=H*xn; x0=zeros(6,1)x0 = 0 0 0 0 0 0 x1,m1=jacobi(H,b,x0)x1 = Inf Inf NaN NaN NaN NaNm1 = 487 xx11,m11=SOR(H,b,x0,1)xx1 = 0.9999 1.0009 0.9981 0.9974 1.0089 0.9947m11 = 17406 xx21,m21=SOR(H,b,x0,1.25)xx21 = 1.0000 1.0003 1.0010 0.9922 1.0126 0.9939m21 = 16290 xx31,m31=SOR(H,b,x0,1.5)xx31 = 1.0000 0.
16、9995 1.0052 0.9829 1.0216 0.9907m31 = 16769 2、结果分析:从MATLAB输出的结果可以看出:当n=6时,取初始向量x0=(0,0,0,0,0,0),用Jacobi迭代法求解该矩阵方程经过m1=487次迭代所得结果x1 =(Inf,Inf,NaN,NaN,NaN,NaN),可见用Jacobi迭代法在这种情况下求解该矩阵方程是不收敛的。用SOR方法求解该矩阵方程,当松弛因子w=1时,经过m11=17406次迭代所得结果xx11 =(0.9999,1.0009,0.9981,0.9974,1.0089,0.9947),此结果及精确解比拟可得,可见此结果已经
17、很接近精确解了;当松弛因子w=1.25时,经过m21=16290次迭代所得结果xx21 =( 1.0000,1.0003,1.0010,0.9922,1.0126,0.9939),此结果及精确解比拟可得,可见此结果没有w=1所得的解接近精确解,但迭代次数比它少;当松弛因子w=1.5时,经过m31=16769次迭代所得结果xx31 =( 1.0000,0.9995,1.0052,0.9829,1.0216,0.9907),此结果及精确解比拟可得,可见此结果没有w=1和w=1.25所得的解接近精确解,迭代次数虽然比w=1时少,但比w=1.25多。二第2题1、MATLAB计算过程(1)取n=8在Co
18、mmand Window中输入 H=hilb(8); xn=ones(8,1); b=H*xn; x0=zeros(8,1)x0 = 0 0 0 0 0 0 0 0 x2,m2=jacobi(H,b,x0)x2 = -Inf NaN NaN NaN NaN NaN NaN NaNm2 = 396 xx12,m12=SOR(H,b,x0,1)xx12 = 1.0001 0.9974 1.0136 0.9794 0.9982 1.0141 1.0101 0.9870m12 = 8342 xx22,m22=SOR(H,b,x0,1.25)xx22 = 1.0002 0.9964 1.0179 0.9
19、726 1.0031 1.0130 1.0091 0.9877m22 = 17436 xx32,m32=SOR(H,b,x0,1.5)xx32 = 1.0001 0.9976 1.0119 0.9812 1.0043 1.0055 1.0079 0.9915m32 = 37921(2)取n=10在Command Window中输入 H=hilb(10); x1=ones(10,1); b=H*x1; x0=zeros(10,1)x0 = 0 0 0 0 0 0 0 0 0 0 x3,m3=jacobi(H,b,x0)x3 = Inf Inf Inf NaN NaN NaN NaN NaN Na
20、N NaNm3 = 347 xx13,m13=SOR(H,b,x0,1)xx13 = 1.0001 0.9982 1.0056 0.9993 0.9916 0.9968 1.0052 1.0087 1.0039 0.9904m13 = 26951 xx23,m23=SOR(H,b,x0,1.25)xx23 = 1.0001 0.9989 1.0022 1.0042 0.9903 0.9965 1.0042 1.0080 1.0039 0.9916m23 = 30092 xx33,m33=SOR(H,b,x0,1.5)xx33 = 1.0000 0.9997 0.9986 1.0109 0.98
21、50 0.9993 1.0020 1.0086 1.0033 0.9924m33 = 321742、结果分析:从MATLAB输出的结果可以看出:(1)用Jacobi迭代法求解该矩阵方程当n=8时,取初始向量x0=(0,0,0,0,0,0,0,0),经过m2=396次迭代所得结果x2 =( -Inf,NaN,NaN,NaN,NaN,NaN,NaN,NaN); 当n=10时,取初始向量x0=(0,0,0,0,0,0,0,0,0,0),经过m3=347次迭代所得结果x3 =( Inf,Inf ,Inf ,NaN,NaN,NaN,NaN,NaN,NaN,NaN),比照1题中所得结果可见无论n确何值用J
22、acobi迭代法在这种情况下求解该矩阵方程是不收敛的,其原因为其迭代矩阵 (其中D= diag(diag(H),L=-tril(H,-1),U=-triu(H,1)的谱半径不满足。2用SOR方法求解该矩阵方程:当n=8时,取初始向量x0=(0,0,0,0,0,0,0,0)当松弛因子w=1时,经过m12=8342次迭代所得结果xx12 =(1.0001,0.9974,1.0136,0.9794,0.9982,1.0141,1.0101,0.9870),此结果及精确解比拟可得;当松弛因子w=1.25时,经过m22=17436次迭代所得结果xx22 =( 1.0002,0.9964,1.0179,0
23、.9726,1.0031,1.0130,1.0091,0.9877),此结果及精确解比拟可得,;当松弛因子w=1.5时,经过m32=16769次迭代所得结果xx32 =( 1.0001,0.9976,1.0119,0.9812,1.0043,1.0055,1.0079,0.9915),此结果及精确解比拟可得;当n=10时,取初始向量x0=(0,0,0,0,0,0,0,0,0,0)当松弛因子w=1时,经过m13=2695次迭代所得结果xx13 =(1.0001,0.9982,1.0056,0.9993,0.9916,0.9968,1.0052,1.0087,1.0039,0.9904),此结果及
24、精确解比拟可得;当松弛因子w=1.25时,经过m23=30092次迭代所得结果xx23 =( 1.0001,0.9989,1.0022,1.0042,0.9903,0.9965,1.0042,1.0080,1.0039,0.9916),此结果及精确解比拟可得,;当松弛因子w=1.5时,经过m33=32174次迭代所得结果xx33 =( 1.0000,0.9997,0.9986,1.0109,0.9850,0.9993,1.0020,1.0086,1.0033,0.9924),此结果及精确解比拟可得,比照n=8,n=10时,w取相同值时的结果,当n=10时的迭代步骤比n=8都少,且所得解比起n=
25、8也精确。三第3题在1、2题中所得的结果看来无论n确何值用Jacobi迭代法在这种情况下求解该矩阵方程是不收敛的,而用SOR方法解题时,虽然迭代收敛,但需要迭代很屡次,针对这次问题,以下尝试采用另外一种古典迭代法Gauss-Seidel法解决此题:1、Gauss-Seidel法程序function x,n=gauseidel(A,b,x0,eps,M)if nargin=3 eps= 1.0e-6; M = 50000;elseif nargin = 4 M = 50000;elseif nargin=eps x0=x; x=G*x0+f; n=n+1; if(n=M) disp(Warnin
26、g: 迭代次数太多,可能不收敛!); return; endend2、MATLAB计算过程在Command Window中输入 H=hilb(6); x1=ones(6,1); b=H*x1; x0=zeros(6,1)x0 = 0 0 0 0 0 0 xxx,mnn=gauseidel(H,b,x0)xxx = 0.9999 1.0009 0.9981 0.9974 1.0089 0.9947mnn = 17406由此题结果可见,用此方法解题,及SOR方法,当松弛因子w=1时所得结果相同,正好验证了上面所说的:当松弛因子w=1时,SOR方法就是Gauss-Seidel法。虽然此方法并不比SO
27、R方法更简便,但对于不收敛的Jacobi迭代法来说,此方法是可以解出此题的。六、心得体会 通过这次专业综合训练,对题目的研究求解,对Hilbert矩阵方程组及其特点有了一定的了解,熟练掌握运用了古典迭代法中的Jacobi迭代法、SOR方法,并对Gauss-Seidel法也做了一定的了解,对这些这些古典迭代法的特性有了比拟系统的认识。对MATLAB软件的运用也更熟练了。七、参考文献1谢进,李大美. MATLAB及计算方法实验M. 武汉大学出版社,2016.2周品,何正风.MATLAB数值分析M. 机械工业出版社,2016.13林雪松,周婧,林德新.MATLAB7.0应用集锦M. 机械工业出版社,20064(美)John H.Mathews,Kurtis D.Frink数值方法M.电子工业出版社,20055李庆扬,王能超,易大义.数值分析M.华中科技大学出版社,2006.1