资源预览内容
第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
第9页 / 共11页
第10页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
实验报告实验项目插值法实验日期2016/9/30理论内容Lagrange插值与Newton插值授课日期实验室名称文理管203微机编号E1实验目的及要求:1、了解多项式差值公式的存在唯一性条件及其余项表达式的推导。2、了解拉格朗日插值多项式的构造、计算及其基函数的特点,牛顿插值多项式的构造与应用,差商、差分的计算及基本性质。实验内容:编与Lagrange插值法及Newton插值法通用子程序,依据数据表Xi0.320.340.36sinxi0.3145670.3334870.352274构造一个抛物插值多项式P2(x)及N2(x),计算sin0.3367的近似值并估计误差。最新范本,供参考!实验步骤及程序:1、Lagrange插值公式算法流程图2、Lagrange插值源程序importjava.util.Scanner;/*拉格朗日插值*/publicclassLagrange_interpolation/*拉格朗日插值法*/privatestaticdouble口Lag_method(doubleX口,doubleY口,doubleX0)intm=X.length;intn=X0.length;doubleY0=newdoublen;for(inti1=0;i1n;i1+)/遍历X0doublet=0;for(inti2=0;i2m;i2+)/遍历Ydoubleu=1;for(inti3=0;i3m;i3+)/遍历Xif(i2!=i3)u=u*(X0i1-Xi3)/(Xi2-Xi3);u=u*Yi2;t=t+u;Y0i1=t;returnY0;publicstaticvoidmain(Stringargs)/*输入插值点横纵坐标*/System.out.println(Inputnumberofinterpolationpoint:);Scannerscan=newScanner(System.in);intm=scan.nextInt();System.out.println(Inputnumberoftestpoint:);intn=scan.nextInt();doubleX=newdoublem;doubleY=newdoublem;doubleX0=newdoublen;System.out.println(InputtheelementsofX:);/已知插值点for(inti=0;im;i+)Xi=scan.nextDouble();System.out.println(InputtheelementsofY:);/已知插值点的函数值for(inti=0;im;i+)Yi=scan.nextDouble();System.out.println(InputtheelementsofX0:);/需要求的插值点的横坐标标值for(inti=0;in;i+)X0i=scan.nextDouble();doubleY0=Lag_method(X,Y,X0);/使用拉格朗日插值法求解得到需求插值点的纵坐标值System.out.println(拉格朗日插值法求解得:);for(inti=0;in;i+)System.out.println(Y0i+);System.out.println();最新范本,供参考!Newton插值源程序importjava.util.Scanner;publicclassNewton_interpolation/*拷贝向量*/privatestaticvoidcopy_vector(doublefrom,doubleto)intk=from.length;intk2=to.length;if(k!=k2)System.out.println(thetwovectorslengthisnotequal!);System.exit(0);for(inti=0;ik;i+)toi=fromi;/*牛顿插值法*/privatestaticdouble口Newton_inter_method(double口X,double口Y,doubleX0)intm=X.length;intn=X0.length;double口Y0=newdoublen;double口cp_Y=newdoublem;for(inti1=0;i1n;i1+)遍历X0doublet=0;intj=0;copy_vector(Y,cp_Y);intkk=j;/*求各级均差*/while(kkm-1)kk=kk+1;for(inti2=kk;i2m;i2+)cp_Yi2=(cp_Yi2-cp_Ykk-1)/(Xi2-Xkk-1D/*求插值结果*/doubletemp=cp_Y0;for(inti=1;i=m-1;i+)doubleu=1;intjj=0;while(jji)u*=(X0i1-Xjj);jj+;temp+=cp_Yi*u;Y0i1=temp;returnY0;publicstaticvoidmain(String口args)/*输入插值点横纵坐标*/System.out.println(Inputnumberofinterpolationpoint:);Scannerscan=newScanner(System.in);intm=scan.nextInt();System.out.println(Inputnumberoftestpoint:);intn=scan.nextInt();doubleX=newdoublem;doubleY=newdoublem;doubleX0=newdoublen;System.out.println(InputtheelementsofX:);/已知插值点for(inti=0;im;i+)Xi=scan.nextDouble();System.out.println(InputtheelementsofY:);/已知插值点的函数值for(inti=0;im;i+)Yi=scan.nextDouble();System.out.println(InputtheelementsofX0:);/需要求的插值点的横坐标标值for(inti=0;in;i+)X0i=scan.nextDouble();doubleY0=Newton_inter_method(X,Y,X0);/使用拉格朗日插值法求解得到需求插值点的纵坐标值System.out.println(拉格朗日插值法求解得:);for(inti=0;in;i+)System.out.println(Y0i+);最新范本,供参考!)System.out.println();)最新范本,供参考!结果分析与讨论:拉格朗日插值法求解得:0.3303743620375牛顿法解得0.33037436203751、Lagrange插值法和Newton插值法解决实际问题中关于只提供复杂的离散数据的函数求值问题,通过将所考察的函数简单化,构造关于离散数据实际函数f(x)的近似函数P(x),从而可以计算未知点出的函数值,是插值法的基本思路。2、实际上Lagrange插值法和Newton插值法是同一种方法的两种变形,其构造拟合函数的思路是相同的,而实验中两个实际问题用两种算法计算出结果是相同的。3、实验所得结果精确度并不高,一方面是因为所给数据较少,另一方面也是主要方面在Win32中C+中数据类型double精度只有7位,计算机在进行浮点运算时截断运算会导致误差。实际问题中,测量数据也可能导致误差。4、在解决实际问题中,更多是利用精确且高效的计算机求解。所以解决问题时不仅要构造可求解的算法,更重要是构造合理的可以编写成程序由计算机求解的算法,而算法的优化不仅可以节省时间空间,更能得到更为精确有价值的结果。实验报告评分标准评分项目满分得分评分项目满分得分实验步骤及程序10运行结果5结果分析与讨论5合计20【本文档内容可以自由复制内容或自由编辑修改内容期待你的好评和关注,我们将会做得更好】最新范本,供参考!
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号