资源描述:
《华科计算方法实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、课程实验报告课程名称:计算方法计算机科学与技术学院目录实验一LAGRANGE插值1实验内容与要求32公式与算法描述33程序源码44实验结果55实验小结5实验二牛顿插值1实验内容与要求52公式与算法描述63程序源码64实验结果75实验小结7实验三复化SIMPSON公式1实验内容与要求82公式与算法描述83程序源码84实验结果105实验小结10实验四变步长梯形法1实验内容与要求102公式与算法描述113程序源码114实验结果135实验小结13实验一、Lagrange插值1.实验内容与要求利用三次Lagrange插值多项式计算函
2、数值,编写C程序实现其功能。已知函数表如下:Xi0.561600.562800.564010.56521Yi0.827410.826590.825770.82495试用lagrange插值多项式求X=0.5635时的函数值。2.公式与算法描述Lagrange插值基函数Lagrange插值公式开始↓输入已知点个数n输入已知点的X坐标以及输入已知点的Y坐标↓调用函数lagrange函数↓输出结果↓3程序源码#include#include#includefloatlag
3、range(float*x,float*y,floatxx,intn)/*拉格朗日插值算法*/{inti,j;float*a,yy=0.0;/*a作为临时变量,记录拉格朗日插值多项式*/a=(float*)malloc(n*sizeof(float));for(i=0;i<=n-1;i++){a[i]=y[i];for(j=0;j<=n-1;j++)if(j!=i)a[i]*=(xx-x[j])/(x[i]-x[j]);yy+=a[i];}free(a);returnyy;}intmain(){inti;intn;floa
4、tx[20],y[20],xx,yy;printf("Inputn:");scanf("%d",&n);if(n>=20){printf("Error!Thevalueofnmustin(0,20).");getch();return1;}if(n<=0){printf("Error!Thevalueofnmustin(0,20).");getch();return1;}for(i=0;i<=n-1;i++){printf("x[%d]:",i);scanf("%f",&x[i]);}printf("");for(i=
5、0;i<=n-1;i++){printf("y[%d]:",i);scanf("%f",&y[i]);}printf("");printf("Inputxx:");scanf("%f",&xx);yy=lagrange(x,y,xx,n);printf("x=%f,y=%f",xx,yy);getch();}4.实验结果5.实验小结本次实验,我用C语言实现了Langrange插值。本实验算法简单,只是有很多地方的细节需要注意,比如变量类型要用float,如果使用double型,则对于本实验的数据来说太大了。本次实验
6、简单,也很快解决了问题。只要解决了精度和实现了Lagrange插值函数,一切都迎刃而解。实验二、牛顿插值1.实验内容与要求用C语言实现f(x)的n阶差商f[x0,x1,x2…xn],并由此实现Newton插值:对输入的任一X,用Newton插值计算其函数值。已知函数表如下:Xi0.40.550.650.80.9Yi0.410750.578150.696750.888111.02652试用Newton插值多项式求X=0.596和X=0.895时的函数值。1.公式与算法描述Newton插值公式差商:由线性知f[x0,x1,x2
7、…xn]=不含(xj-xj)项构造差商表2.程序源码#includevoidmain(void){intj,i,k;floatx,p,y[20],xx[20],li[20],c[20],result;p=1;printf("thevalueofx:");for(i=0;i<5;i++){scanf("%f",&xx[i]);}printf("thevalueofy:");for(i=0;i<5;i++){scanf("%f",&y[i]);}for(i=0;i<5;i++){c[i]=0;li[i]=1.
8、0;}for(k=0;k<5;k++)for(i=0;i<=k;i++){for(j=0;j<=k;j++)if(i!=j)li[k]*=xx[i]-xx[j];c[k]+=y[i]/li[k];li[k]=1;}c[0]=y[0];for(i=0;i<5;i++)printf("第%d阶差商为:%f