中北大学数字分析5-8实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验类别:数值分析专业:信息与计算科学班级:13080241学号:1308024120姓名:杨燕中北大学理学院-1-实验五线性方程组的迭代解法【实验内容】分别选用Jacobi迭代法,Gauss-Seidol迭代法和SOR方法计算下列方程组的解。1231231238322041133631236xxxxxxxxx【实验方法与步骤】1、用C语言对Jacobi迭代法编程如下:#includestdio.h#includemath.h#defineMax_N10#defineMax_M100#defineepsilon1e-6main(){inti,j,k=0,n;doublea[Max_N][Max_N+1],x[Max_N],y[Max_N+1];doubles,temp;printf(\nPleaseinputnvalue(dimofAx=b):);do{scanf(%d,&n);if(nMax_N)printf(\nPleasere-inputnvalue:);}while(nMax_N||n=0);/*输入Ax=b的[A|b]矩阵*/printf(InputtheA(i,j):\n);for(i=0;in;i++)for(j=0;jn+1;j++)scanf(%lf,&a[i][j]);-2-for(i=0;in;i++)x[i]=0;while(1){temp=0.0;k++;for(i=0;in;i++){s=0;for(j=0;jn;j++){if(j==i)continue;s+=a[i][j]*x[j];}y[i]=(a[i][n]-s)/a[i][i];temp+=fabs(y[i]-x[i]);}if(tempepsilon){printf(Diedaicishuis:%d\n,k);printf(Sloveis:);for(i=0;in;i++)printf(x[%d]=%f\n,i,x[i]);break;}if(k=Max_M){printf(Themethodisdisconvergent!);-3-return;}for(i=0;in;i++)x[i]=y[i];}}2、用C语言对Gauss-Seidol迭代法编程如下:#includestdio.h#includemath.h#defineMax_N10#defineMax_M100#defineepsilon1e-6main(){inti,j,k=0,n;doublea[Max_N][Max_N+1],x[Max_N],y[Max_N+1];doubles,temp;printf(\nPleaseinputnvalue(dimofAx=b):);do{scanf(%d,&n);if(nMax_N)printf(\nPleasere-inputnvalue:);}while(nMax_N||n=0);/*输入Ax=b的[A|b]矩阵*/printf(InputtheA(i,j):\n);for(i=0;in;i++)for(j=0;jn+1;j++)scanf(%lf,&a[i][j]);for(i=0;in;i++)-4-x[i]=0;do{for(i=0;in;i++){s=0;for(j=0;jn;j++){s+=a[i][j]*x[j];}temp=(a[i][n]-s)/a[i][i];x[i]+=temp;}if(k=Max_M){printf(Themethodisdisconvergent!);return;}k++;}while(fabs(temp)epsilon);printf(Diedaicishuis:%d\n,k);printf(Sloveis:);for(i=0;in;i++)printf(x[%d]=%f\n,i,x[i]);}3、用C语言对SOR方法编程如下:#includestdio.h#includemath.h-5-#defineMax_N10#defineMax_M100#defineepsilon1e-6#definew1.2main(){inti,j,k=0,n;doublea[Max_N][Max_N+1],x[Max_N],y[Max_N+1];doubles,temp;printf(\nPleaseinputnvalue(dimofAx=b):);do{scanf(%d,&n);if(nMax_N)printf(\nPleasere-inputnvalue:);}while(nMax_N||n=0);/*输入Ax=b的[A|b]矩阵*/printf(InputtheA(i,j):\n);for(i=0;in;i++)for(j=0;jn+1;j++)scanf(%lf,&a[i][j]);for(i=0;in;i++)x[i]=0;do{for(i=0;in;i++){s=0;for(j=0;jn;j++)-6-{s+=a[i][j]*x[j];}temp=w*(a[i][n]-s)/a[i][i];x[i]+=temp;}if(k=Max_M){printf(Themethodisdisconvergent!);return;}k++;}while(fabs(temp)epsilon);printf(Diedaicishuis:%d\n,k);printf(Sloveis:);for(i=0;in;i++)printf(x[%d]=%f\n,i,x[i]);}4、分别对不同精度要求,如34510,10,10由迭代次数体会各个迭代法的收敛快慢;5、对方程组使用SOR方法时,选取松弛因子ω=0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者;6、给出各种算法的设计程序和计算结果。【实验结果】1、方程组分别用Jacobi迭代法,Gauss-Seidol迭代法,SOR方法求得的结果如下:-7-2、34510,10,10时,方程组用Jacobi迭代法求得的结果分别如下:-8-由以上可知,当310时迭代次数最少,但是收敛效果没有510的时候好。3、34510,10,10时,方程组用Gauss-Seidol迭代法求得的结果分别如下:由以上可知,当310时迭代次数最少,但是收敛效果没有510的时候好。4、34510,10,10时,方程组用SOR法求得的结果分别如下:-9-由以上可知,当310时迭代次数最少,但是收敛效果没有510的时候好。5、ω=0.8,0.9,1,1.1,1.2时,方程组用SOR方法求得的结果分别如下:-10-由以上可知,ω=1时收敛速度最快,效果也好。【思考】1.Jacobi迭代法与Gauss-Seidol迭代法的联系与区别?Gauss-Seidol迭代法是Jacobi迭代法的改进。Gauss-Seidol迭代法在Jacobi迭代法公式的基础上利用已经计算出来的最新分量(1)(1,2,,1)kjxji,Gauss-Seidol迭代法每迭代一次只需计算一次矩阵与向量的乘法,提高了程序的运行效率。2.Gauss-Seidol迭代法与SOR法的联系与区别?SOR法是Gauss-Seidol迭代法的改进。SOR法是在Gauss-Seidol迭代法公式的基础上加入了松弛因子,SOR法每迭代一次主要运算量是计算一次矩阵与向量的乘法。3.三种方法优缺点的比较?Jacobi迭代法计算是三种方法中最简单的,但是同时误差也是相对较大的,-11-而且它的收敛性由矩阵决定;Gauss-Seidol迭代法的误差较Jacobi迭代法来说要小一点,同时收敛性的判定比Jacobi迭代法要容易一点,但是计算量也要比Jacobi迭代法复杂一些;SOR法是三种方法误差最小的,而且它的收敛性由松弛因子决定,但是它的计算过程也是最复杂的,而且松弛因子的选取没有准确的定理,一般都要靠自己去找哪个的收敛速度最快。4.松弛因子怎样合理选取?利用SOR方法最佳松弛因子理论。实验类别:数值分析专业:信息与计算科学班级:13080241学号:1308024120姓名:杨燕中北大学理学院-1-实验六非线性方程求根【实验内容】设方程013)(3xxxf有三个实根*11.8793x,*20.34729x,*31.532088x,现采用下面四种不同计算格式,求0)(xf的根。1、231xxx2、313xx3、331xx4、331xx【实验方法与步骤】1、编制一个程序进行运算,给出每种迭代格式的敛散情况(1)迭代公式为231xxx,用C语言编写迭代程序如下:#includestdio.h#includemath.h#definee1e-10doublef(doublex){return((3*x+1)/(x*x));}voidmain(){inti;doublex1,x2=-3;for(i=0;fabs(x2-x1)=e;i++){x1=x2;x2=f(x1);}printf(thesolveis:\n);printf(x=%20.16lf\ni=%d\n,x2,i);}-2-(2)迭代公式为313xx,用C语言编写迭代程序如下:#includestdio.h#includemath.h#definee1e-10doublef(doublex){return((x*x*x-1)/3);}voidmain(){inti;doublex1,x2=1.3;for(i=0;fabs(x2-x1)=e;i++){x1=x2;x2=f(x1);}printf(thesolveis:\n);printf(x=%20.16lf\ni=%d\n,x2,i);}(3)迭代公式为331xx,用C语言编写迭代程序如下:#includestdio.h#includemath.h#definee1e-10doublef(doublex){return(pow(3*x+1,1.0/3));}voidmain()-3-{inti;doublex1,x2=1;for(i=0;fabs(x2-x1)=e;i++){x1=x2;x2=f(x1);}printf(thesolveis:\n);printf(x=%20.16lf\ni=%d\n,x2,i);}#includestdio.h#includemath.h#definee1e-10doublef(doublex){return(pow(3*x-1,1.0/3.0));}voidmain(){inti;doublex1,x2=1.5;for(i=0;fabs(x2-x1)=e;i++){x1=x2;x2=f(x1);}printf(thesolveis:\n);printf(x=%20.16lf\ni=%d\n,-x2,i);}(4)迭代公式为331xx,用C语言编写迭代程序如下:#includestdio.h#includemath.h#definee1e-10doublef(doublex)-4-{return(sqrt(3+1/x));}voidmain(){inti;doublex1,x2=-3.0;for(i=0;fabs(x2-x1)=e;i++){x1=x2;x2=f(x1);}printf(thesolveis:\n);printf(x=%20.16lf\ni=%d\n,x2,i);}2、用事后误差估计1kkxx来控制迭代次数,并且打印出迭代的次数;3、分析初始值的选取对迭代收敛有何影响;4、分析迭代收敛和发散的原因。【实验结果】1、(1)迭代格式为231xxx,用C语言编写迭代程序结果如下:又因为迭代公式231xxx的导数为332'

1 / 25
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功