第1页数值分析实验报告(数值积分)姓名:学号:2006231011专业:材料学学院:云南省新材料制备与加工重点实验室授课教师:昆明理工大学第2页06工科硕士《数值分析》上机实验报告专业:材料物化姓名:学号:2006231011任课教师:作业完成实验室:实验成绩:理论描述(10)数值公式(10)程序流程图和程序结构(20)数据和结果(20)讨论(20)源程序(20)总分(100)实验内容:1.题目/要求:1、利用Lagrange插值公式knkiiikinknyxxxxxL00编写出插值多项式程序;2、给出插值多项式或分段三次插值多项式的表达式;3、根据节点选取原则,对问题(2)用三点插值或二点插值,其结果如何;对此插值问题用Newton插值多项式其结果如何2.作业环境(包括选用的程序语言、运行环境)VisualC++6.03.数学(理论背景)描述1.Lagrange插值多项式定义:若n次多项式上满足条件个节点在,1),1,0)((10njxxxnnjxl:当0)(1)(kjkjxljkxljk时;当时,其中nkj1,0,,就称这1n个次多项式)(),(),(10xlxlxln为节点nxxx10,上的n次插值基函数。插值多项式可表示为:)()(0xlyxLknkkn,称为Lagrange插值多项式。2.分段线形插值就是通过插值点用折线段连接起来逼近).(xf设已知节点第3页bxxxan10上的函数值nfff,,21,记kkkkkhhxxhmax,1求一折线函数)(xIh满足:为分段线形插值函数上是线形函数,则称在每个区间记)(,)(3),,2,1,0()(2,,)(11000xIxxxIkfxIbaCxIhkkhkhh4.数值计算公式Lagrange插值多项式knkiiikinknyxxxxxL00;分段线形插函数,在每个小区间1,kkxx上可表示为:1111)(kkkkkkkkhfxxxxfxxxxhI(1kkxxx)在整个区间ba,上为:)()(0xlfxIjnjjh其中基函数),1,0,()(nkjxljkkj,其形式是:,.,,,,0);(,);0(,)(11111111jjjjjjjjjjjjjxxxbaxnjxxxxxxxjxxxxxxxxl5.算法程序流程图第4页Lagrange插值算法程序流程图分段低次插值算法程序流程图1,0ps1ni1njji)/()(*jxitjxtpiyps*return(s)假真真真假假第5页6.程序结构(程序中的函数调用关系图6.实验数据和实验结果(打印或用屏幕图形拷屏表示,可加为附页)(1)jx0.40.550.650.800.951.05主函数main()子函数doubleLAG()调用程序执行完毕0iniu=(t-x[i])/(x[i+1]-x[i]);f=y[i]+u*(y[i+1]-y[i]);真return(f)第6页jy0.410750.578150.696750.901.001.25382Lagrange插值算法,62573238.0)596.0(f05422977.0)99.0(f分段低次插值算法,63270600.0)596.0(f10152800.1)99.0(f(2)jx1234567jy0.3680.1350.0500.0180.0070.0020.001Lagrange插值算法16476189.0)8.1(f00126583.0)15.6(f分段低次插值算法18160000.0)8.1(f00185000.0)15.6(f7.讨论(包括题目要求的讨论和方法的适用性讨论)对于插值多项式Ln(x),当n时,Ln(x)不一定收敛到f(x),此时需用分段线性插值比Ln(x)逼近f(x)好得多,题(2)就是一例。计算)15.6(f时,用分段线性插值算法的结果比用Lagrange插值算法的结果更接近题目所给数据0.00213348。另一种情况,当用拉格郎日插值多项式Ln(x)计算函数近似值,如精度不满足要求需增加插值节点,原来算出的数据均不能利用时,可用埃特金逐次线形插值算法。牛顿插值多项式较Lagrange插值多项式更有一般性,它对f是由离散点给出的情形或f导数不存在时均适用。且比Lagrange值计算量省,且便于程序设计。8.附—源程序(打包邮件)题一(Ⅰ)Lagrange插值算法源程序第7页#includestdio.h#includestdio.h#includemalloc.hdoubleLAG(intn,doublet,double*x,double*y){inti,j;doublep,s;s=0;for(i=0;i=n-1;i++)//外循环,累和{p=1;for(j=0;j=n-1;j++)//内循环,累积{if(i!=j)p*=(t-x[j])/(x[i]-x[j]);//循环语句}s+=p*y[i];}return(s);}doubleLAG(intn,doublet,double*x,double*y);voidmain(){intn;double*x,*y,t;n=6;t=0.99;//或t=0.596x=(double*)calloc(n,sizeof(double));if(x==NULL)printf(error);y=(double*)calloc(n,sizeof(double));if(y==NULL)printf(error);x[0]=0.4;x[1]=0.55;x[2]=0.65;x[3]=0.80;x[4]=0.95;x[5]=1.05;y[0]=0.41075;y[1]=0.57815;第8页y[2]=0.69675;y[3]=0.90;y[4]=1.00;y[5]=1.25382;printf(%10.8f\n,LAG(n,t,x,y));free(x);free(y);}(Ⅱ)分段低次插值算法程序#includestdio.h#includestdio.h#includemalloc.hdoubleLAG(intn,doublet,double*x,double*y){inti,j;doublep,s;s=0;for(i=0;i=n-1;i++)//外循环,累和{p=1;for(j=0;j=n-1;j++)//内循环,累积{if(i!=j)p*=(t-x[j])/(x[i]-x[j]);//循环语句}s+=p*y[i];}return(s);}doubleLAG(intn,doublet,double*x,double*y);voidmain(){intn;double*x,*y,t;n=6;t=0.99;//或t=0.596x=(double*)calloc(n,sizeof(double));if(x==NULL)printf(error);y=(double*)calloc(n,sizeof(double));第9页if(y==NULL)printf(error);x[0]=0.4;x[1]=0.55;x[2]=0.65;x[3]=0.80;x[4]=0.95;x[5]=1.05;y[0]=0.41075;y[1]=0.57815;y[2]=0.69675;y[3]=0.90;y[4]=1.00;y[5]=1.25382;printf(%10.8f\n,LAG(n,t,x,y));free(x);free(y);}题二(Ⅰ)Lagrange插值算法源程序#includestdio.h#includemalloc.hdoubleLAG(intn,doublet,double*x,double*y){intk,i;doublep,s;s=0;for(k=0;k=n-1;k++)//外循环,累和{p=1;for(i=0;i=n-1;i++)//内循环,累积{if(i!=k)p*=(t-x[i])/(x[k]-x[i]);//循环语句}s+=(p*y[k]);}return(s);第10页}doubleLAG(intn,doublet,double*x,double*y);voidmain(){intn;double*x,*y,t;n=7;t=1.8;//或t=6.15x=(double*)calloc(n,sizeof(double));if(x==NULL)printf(error);y=(double*)calloc(n,sizeof(double));if(y==NULL)printf(error);x[0]=1;x[1]=2;x[2]=3;x[3]=4;x[4]=5;x[5]=6;x[6]=7;y[0]=0.368;y[1]=0.135;y[2]=0.050;y[3]=0.018;y[4]=0.007;y[5]=0.002;y[6]=0.001;printf(%10.8f\n,LAG(n,t,x,y));free(x);free(y);}(Ⅱ)分段低次插值算法程序#includestdio.h#includemalloc.hdoubleLIP(intn,doublet,double*x,double*y){inti=0;第11页doubleu,f;for(i=0;in;i++){if(t=x[i]&&t=x[i+1]){u=(t-x[i])/(x[i+1]-x[i]);f=y[i]+u*(y[i+1]-y[i]);}}return(f);}doubleLIP(intn,doublet,double*x,double*y);voidmain(){intn;double*x,*y,t;n=7;t=6.15;//或1.8x=(double*)calloc(n,sizeof(double));if(x==NULL)printf(error);y=(double*)calloc(n,sizeof(double));if(y==NULL)printf(error);x[0]=1;x[1]=2;x[2]=3;x[3]=4;x[4]=5;x[5]=6;x[6]=7;y[0]=0.368;y[1]=0.135;y[2]=0.050;y[3]=0.018;y[4]=0.007;y[5]=0.002;y[6]=0.001;printf(%10.8f\n,LIP(n,t,x,y));free(x);第12页free(y);}#includestdio.h#includestdio.h#includemalloc.hdoubleLAG(intn,doublet,double*x,double*y){inti,j;doublep,s;s=0;for(i=0;i=n-1;i++)//外循环,累和{p=1;for(j=0;j=n-1;j++)//内循环,累积{if(i!=j)p*=(t-x[j])/(x[i]-x[j]);//循环语句}s+=p*y[i];}return(s);}doubleLAG(intn,doublet,double*x,double*y);voidmain(){intn;double*x,*y,t;n=6;t=0.99;//或t=0.596x=(double*)calloc(n,sizeof(double));if(x==NULL)printf(error);y=(double*)calloc(n,sizeof(double));if(y==NULL)printf(error);x[0]=0.4;x[1]=0.55;第13页x[2]=0.65;x[3]=0.80;x[4