资源描述:
《迭代法实验报告_米瑞琪_图文》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、数值实验报告II实验名称迭代法求解Poisson方程实验时间2016年4月10日姓名米瑞琪班级信息1303学号1309010304成绩一、实验目的,内容1、理解并掌握二类迭代方法(Jacobi,Gauss-Siedel,SOR)迭代方法的构造原理;2、了解矩阵在matlab中不同的存储方式会导致不同的计算效率,学会采用最高效的方式存储矩阵;3、学会在计算机上实现迭代法,并比较不同方法的效率与误差;二、算法描述(―)Jacobi迭代对于线性方程组:Au=b(1)为了构造迭代格式,可将上式改写为:u=Tu+d(2)假定A的对角元均不为0,将A分裂为:A=D-B(3)其
2、中D为:D=diag(i4llzA2zrA33,…,^nn)⑷则(1)式可写为:Du=Bu+b(5)形成Jacobi迭代:酬+1=o^B^+D^b(6)为了在迭代格式中不出现B,将B=D-A代入⑹式有:i?+i=(I-+D~xb(7)为了保证迭代格式的收敛,需要使迭代矩阵的谱半径p(T)Vl・(二)SOR迭代对于(1)式中的线性方程组,将A分裂为:A=D-L-U(8)其中L,U分别为A对应的上三角与下三角矩阵的负值。由Gauss-Siedel迭代格式的中间步骤:=Luk+1+Ruk+f(9)引入非零参数3作为松弛因子,则有:uk+i=uk+a)(uk+1—(10)
3、将(9)式代入(10)式,整理之后可以得到SOR迭代格式:(11)uk+1=(D-讥)一开(1一a))D+a)R]uk+(D-心一®计算可得最佳松弛因子为:21+V1-M2(12)其中“=cosnh(13)(三)Gauss-Siedel迭代(14)在SOR方法中令松弛因子3=1,则有ufe+1=则有迭代格式:Duk+1=Luk+1+Ruk+f(15)可见Jacobi迭代与Gauss-Siedel迭代的区别在于Jacobi迭代麻A分解为D,L+R,Gauss-Siedel迭代将A分解为D-L,Ro三.程序代码按照上述三种格式分别在matlab中实现,代码如下:(一)
4、Jacobi迭代说明:u为最终的运算结果,A为系数矩阵,tol为允许的最大迭代步数,steps记录当前已经经过的迭代步数,eps为规定的计算精度,uO为初值function[u.steps]=Jacobian_Iteration(A,uO,b,eps,tol)%uisthefinalresult,Aistheiterationmatrix,tolisthepermittedbiggeststep,%stepsshowshowmanystepsoftheiteration,epsistheprecisionofthe%result%u0为初值ifnargin<5to
5、l=100000;endifnargin<4eps=le-5;endsteps=0;[m,n]=size(A);ifm〜=nfprintfC^thenumberofcolumnsandrowsareunequal1);returnend%生成对角矩阵D,采用稀疏存储spdiags而不是diag可以大大节省内存空间并提高计算效率d二diag(A);el=ones(n,l);e2=zeros(nj);D=spdiags([e2de2],[-l0l],n,n);I=spdiags([e2ele2],[-l0l],n,n);%生成迭代矩阵M=I-(DA);%{[vecv
6、al]=eig(M);spec_r=max(max(abs(val)));%检矗迭代法是否收敛的话需要添加此段代码if(spec_r>=1)fprintfClnvaliditeration:thespectralradiusislargerthanV);u=u0;k=0;return;end%}d=Db;en-A^u0-b;%误差的计算采用前后两步迭代之间向量的差,提高计算效率whilemax(abs(eiT))>eps&&steps=tol)fpri
7、ntfCIterationexceedslimitJacobian);stepsu=u0;return;endu=uO;end(二)SOR迭代function[u,steps]=SOR_Iteration(A,uO,b,eps,tol)ifnargin<5tol=10000;endifnargin<4eps=le-5;end%检查矩阵是否是方阵[m,n]=size(A);ifm〜fprintfC^nvalidA:matrixdimentionsshouldagree1);endsteps=0;%生成迭代矩阵d=diag(A);el=zeros(nj);e2=one
8、s(n,l