您好,欢迎访问三七文档
雅可比迭代法求解线性方程组的实验报告一、实验题目分别利用雅可比迭代法和高斯-塞德尔迭代法求解以下线性方程组:使得误差不超过0.00001。二、实验引言1.实验目的①掌握用迭代法求解线性方程组的基本思想和步骤,熟悉计算机fortran语言;②了解雅可比迭代法在求解方程组过程中的优缺点。2.实验意义雅克比迭代法就是众多迭代法中比较早且较简单的一种,求解方便实用。三、算法设计1.雅可比迭代法原理:设有线性方程组Ax=b满足0iia,将方程组变形为:x=Bx+f,则雅可比(Jacobi)迭代法是指fBxXkk)1(,即由初始解逐步迭代即可得到方程组的解。算法步骤如下:步骤1.给定初始值)0()0(2)0(1,,,nxxx,精度e,最大容许迭代次数M,令k=1。步骤2.对i=1,2,…,n依次计算)0()1()0()1(11||)n,2,1,0(/)(iiiiiiiiijnijjijjxxxxeiaaxabx,步骤3.求出}{max1iniee,若e,则输出结果)n,,2,1()0(ixi,停止计算。否则执行步骤4.2.453.82102.7210321321321xxxxxxxxx步骤4.若,1,kkMk转步骤2继续迭代。若,Mk表明迭代失败,停止计算。2.算法流程图四、程序设计programjacobiimplicitnoneinteger::i,jinteger::ksavekreal,parameter::e=0.001integer,parameter::n=3real::x(n),y(n),b(n)datab/7.2,8.3,4.2/real::Dreal::a(n,n)open(unit=10,file='1.txt')dataa/10,-1,-1,-1,10,-1,-2,-2,5/write(10,*)**********矩阵A的形式为**********write(10,(1x,3f6.2,/))aforall(i=1:n)x(i)=0endforallk=0100D=0doi=1,ny(i)=b(i)doj=1,nif(i/=j)y(i)=y(i)-a(i,j)*x(j)enddoy(i)=y(i)/a(i,i)enddodoj=1,nD=abs(x(j)-y(j))enddoforall(i=1:n)x(i)=y(i)endforallif(D=e)thenk=k+1write(10,*)迭代次数为:,kgoto100elsegoto200endif200write(10,*)****************************************write(10,*)用jacobi方法解得的结果X[t]为:write(10,(1x,3f6.2,/))x(:)stopendprogram五、结果及讨论1.实验结果**********矩阵A的形式为**********10.00-1.00-1.00-1.0010.00-1.00-2.00-2.005.00迭代次数为:1迭代次数为:2迭代次数为:3迭代次数为:4迭代次数为:5迭代次数为:6迭代次数为:7****************************************用jacobi方法解得的结果X[t]为:1.101.201.302.讨论分析(1)误差从上述输出结果中可以看出,当迭代次数k增大时,迭代值x1,y1,z1会越来越逼近方程组的精确解x=1.0,y=1.2,z=1.3。(2)收敛性在本题目中,用雅可比迭代法和高斯-塞德尔迭代法分别求解该线性方程组,得到的近似根是收敛的六、算法评价优点:迭代法算法简单,编制程序比较容易。缺点:迭代法要求方程组的系数矩阵有某种特殊性质(譬如是所谓对角占优阵)以保证过程的收敛性。高斯—塞德尔迭代法比雅可比迭代法收敛快(达到同样的精度所需迭代次数少),但这个结论,在一定条件下才是对的,甚至有这样的方程组,雅可比方法收敛,而高斯—塞德尔迭代法却是发散的。在雅可比迭代法求解线性方程组时,只要误差截断设计的合理,原则上可以得到很正确的解。而通常我们选取设计误差限或设计最大迭代次数的方法来控制。由于它的准确性,故在实际应用中比较常见,对于解一般线性方程组非常有效准确。通过该算法以及编程对求解的过程,我们不难发现,雅克比迭代法的优点明显,计算公式简单,每迭代一次只需计算一次矩阵和向量的乘法,且计算过程中原始矩阵A始终不变,比较容易并行计算。然而这种迭代方式收敛速度较慢,而且占据的存储空间较大,所以工程中一般不直接用雅克比迭代法,而用其改进方法。附:高斯—赛德尔程序programG-Simplicitnoneinteger::i,jinteger::ksavekreal,parameter::e=0.001integer,parameter::n=3real::x(n),y(n),b(n)datab/7.2,8.3,4.2/real::Dreal::a(n,n)open(unit=10,file='1.txt')dataa/10,-1,-1,-1,10,-1,-2,-2,5/write(10,*)**********矩阵A的形式为**********write(10,(1x,3f6.2,/))aforall(i=1:n)x(i)=0endforallk=0100D=0doi=1,ny(i)=b(i)doj=1,nif(ij)y(i)=y(i)-a(i,j)*x(j)if(ij)y(i)=y(i)-a(i,j)*y(j)enddoy(i)=y(i)/a(i,i)enddodoj=1,nD=abs(x(j)-y(j))enddoforall(i=1:n)x(i)=y(i)endforallif(D=e)thenk=k+1write(10,*)迭代次数为:,kgoto100elsegoto200endif200write(10,*)****************************************write(10,*)用Gauss-seidel方法解得的结果X[t]为:write(10,(1x,3f6.2,/))x(:)stopendprogram**********矩阵A的形式为**********10.00-1.00-1.00-1.0010.00-1.00-2.00-2.005.00迭代次数为:1迭代次数为:2迭代次数为:3迭代次数为:4****************************************用Gauss-seidel方法解得的结果X[t]为:1.101.201.30
本文标题:雅可比迭代实验报告
链接地址:https://www.777doc.com/doc-1676684 .html