您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 实验3-求解线性方程组迭代法与插值法(完成版)
1数值分析实验报告三求解线性方程组的迭代方法和插值法(2学时)一实验目的1.掌握求解线性方程组的简单迭代法;2.掌握求解线性方程组的赛德尔迭代法。3.掌握不等距节点下的牛顿插值公式以及拉格朗日插值公式。二实验内容1.使用雅各比迭代法求解方程组(精度要求为610):301532128243220321321321xxxxxxxxx2.使用高斯赛德尔迭代法求解上述方程组(精度要求为610):3.已知函数表:x1.451.361.14y3.144.155.65用拉格朗日插值公式计算01.54.1yx以及所对应的近似值。4.已知函数表:X93.096.2100.00104.2108.7Y11.3812.8014.7017.0719.91用牛顿插值公式求)102(y的近似值。三实验步骤(算法)与结果1.雅各比迭代法求解2根据迭代格式2:111()(),(1,2,,)inijijiiiijjiiiiiiiaabxxxinaaa…即雅各比迭代法公式。利用C语言编程,得出结果如下图:(程序源代码见附录3.1)所以解得:x1=0.7674,x2=1.1384,x3=2.12542.高斯-赛德尔迭代法求解根据高斯-赛德尔迭代法迭代公式1(1)(1)()111[]inkkkiijjijjijjiiixaxaxba利用C语言编程,得出结果如下图:(程序源代码见附录3.2)所以x1=0.7674,x2=1.1384,x3=2.12543.拉格朗日插值公式计算求解由拉格朗日插值公式:1202010102010121011011()()()()()()()()()()()()()()()()()()()()()()()nnnnnnnnnnnxxxxxxxxxxxxfxfxfxxxxxxxxxxxxxxxxxxxfxRxxxxxxx…………………利用C语言编程,得出结果如下图:(程序源代码见附录3.3)3所以f(1.4)=3.734.牛顿插值公式求解由牛顿插值公式:00010101201201230101()()()[,]()()[,,]()()()[,,,]()()()[,,,]nnfxfxxxfxxxxxxfxxxxxxxxxfxxxxxxxxxxfxxx………利用C语言编程,得出结果如下图:(程序源代码见附录3.4)所以f(102)=15.7936四实验收获与教师评语1.实验收获:对于这次实验,我可以锻炼到上机实验的能力,并且感受到数学知识在现实生活中还是挺多应用,现在比较熟悉的运用计算机解决数学问题。另外,正是因为这次上机实验,让我重温了有些遗忘的编程知识。2.教师评语附录:43.1.雅各比迭代法#includeconio.h#includestdio.h#defineN10voidmain(){floata[N][N]={0},b[N],p[N]={0},x2[N]={0},x1[N]={0},sum=0;inti,j,n,k;printf(inputthenumberofroots:);scanf(%d,&n);printf(shuruxishujuzheng:\n);for(i=1;i=n;i++)for(j=1;j=n;j++)scanf(%f,&a[i][j]);printf(shurub(i):\n);for(i=1;i=n;i++){scanf(%f,&b[i]);p[i]=a[i][i];}for(i=1;i=n;i++)b[i]=b[i]/p[i];for(i=1;i=n;i++)for(j=1;j=n;j++)a[i][j]=-a[i][j]/p[i];for(i=1;i=n;i++)a[i][i]=0;printf(therootsarefollowing:\n);for(k=1;k=6;k++){for(i=1;i=n;i++){sum=0;for(j=1;j=n;j++)sum+=a[i][j]*x1[j];x2[i]=sum+b[i];}for(i=1;i=n;i++)x1[i]=x2[i];for(j=1;j=n;j++)printf(x(%d)=%-9.4f,j,x1[j]);printf(\n);}getch();}3.2.高斯赛德尔迭代法#includeconio.h#includestdio.h#defineN10voidmain(){floata[N][N]={0},b[N],p[N]={0},x1[N]={0},sum=0;inti,j,n,k;printf(inputthenumberofroots:);scanf(%d,&n);printf(shuruxishujuzheng:\n);for(i=1;i=n;i++)for(j=1;j=n;j++)scanf(%f,&a[i][j]);printf(shurub(i):\n);for(i=1;i=n;i++){scanf(%f,&b[i]);p[i]=a[i][i];}for(i=1;i=n;i++)b[i]=b[i]/p[i];for(i=1;i=n;i++)for(j=1;j=n;j++)a[i][j]=-a[i][j]/p[i];for(i=1;i=n;i++)a[i][i]=0;printf(therootsarefollowing:\n);for(k=1;k=6;k++){for(i=1;i=n;i++){sum=0;for(j=1;j=n;j++)sum+=a[i][j]*x1[j];x1[i]=sum+b[i];}for(j=1;j=n;j++)printf(x(%d)=%-9.4f,j,x1[j]);printf(\n);}getch();}53.3.拉格朗日插值公式#includestdio.h#defineN10floatfun(intn,floatnum,floatx[],floaty[]){inti,j;floatsum=0,an[N],m=1,p[N];for(i=1;i=N;i++)an[i]=p[i]=1;for(i=1;i=n;i++)m=m*(num-x[i]);for(j=1;j=n;j++)for(i=1;i=n;i++)if(x[j]!=x[i])p[j]=p[j]*(x[j]-x[i]);for(i=1;i=n;i++)an[i]=m/((num-x[i])*p[i]);for(i=1;i=n;i++)sum=sum+an[i]*y[i];returnsum;}voidmain(){intn,i;floatx[N]={0},y[N]={0},num;printf(pleaseinputthenumberofx:);scanf(%d,&n);printf(pleaseinputthevaluaofxandy:\n);for(i=1;i=n;i++)scanf(%f%f,&x[i],&y[i]);printf(inputthevariable'svalua:);scanf(%f,&num);printf(f(%g)=%f,num,fun(n,num,x,y)-1);getch();}3.4.牛顿插值公式#includestdio.h#includemath.h#defineN8voidmain(){floatx[N],y[N],f[N][N],xn[N],sum=0,sum1=1,t;inti,j,n;printf(thenumbersofx:);scanf(%d,&n);printf(inputthevaluaofx:\n);for(i=0;in;i++)scanf(%f,&x[i]);printf(inputthevaluaofy:\n);for(i=0;in;i++)scanf(%f,&y[i]);for(j=0,i=0;in-1;i++)f[i][j]=(y[i+1]-y[i])/(x[i+1]-x[i]);for(j=1;jn-1;j++)for(i=0;i=n-1-j;i++)f[i][j]=(f[i+1][j-1]-f[i][j-1])/(x[i+j+1]-x[i]);printf(chashangbiao:\n);for(j=0;jn-1;j++){for(i=0;in-1-j;i++)printf(%-9f,f[i][j]);printf(\n);}printf(inputvariablex,togetthevaluaoff(x):);scanf(%f,&t);xn[0]=t-x[0];for(i=1;in-1;i++)xn[i]=xn[i-1]*(t-x[i]);sum=y[0];for(i=0,j=0;jn-1;j++)sum=sum+xn[j]*f[i][j];printf(f(%g)=%g,t,sum);getch();}
本文标题:实验3-求解线性方程组迭代法与插值法(完成版)
链接地址:https://www.777doc.com/doc-8567968 .html