您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > 《计算方法》实验报告
《计算方法》实验报告学号姓名班级实验项目名称计算方法实验一、实验名称实验一插值与拟合二、实验目的:(1)明确插值多项式和分段插值多项式各自的优缺点;(2)编程实现拉格朗日插值算法,分析实验结果体会高次插值产生的龙格现象;(3)运用牛顿插值方法解决数学问题。三、实验内容及要求(1)对于55,11)(2xxxf要求选取11个等距插值节点,分别采用拉格朗日插值和分段线性插值,计算x为0.5,4.5处的函数值并将结果与精确值进行比较。输入:区间长度,n(即n+1个节点),预测点输出:预测点的近似函数值,精确值,及误差(2)已知,,,392411用牛顿插值公式求5的近似值。输入:数据点集,预测点。输出:预测点的近似函数值四、实验原理及算法描述算法基本原理:(1)拉格朗日插值法计算机科学与工程学院2(2)牛顿插值法计算机科学与工程学院3算法流程计算机科学与工程学院4五、程序代码及实验结果(1)输出:A.拉格朗日插值法B.分段线性插值Xy(精确)y(拉格朗日)y(分段线性)误差(拉)误差(分)0.5000000.8000000.8434070.750000-0.0542590.0500004.5000000.0470591.5787200.0486425-32.547674-0.033649计算机科学与工程学院5(2)输出:Xy(精确)y(牛顿插值)误差(牛顿插值)5.000002.2360682.266670-0.013686源码:(1)A.拉格朗日插值法#includeiostream#includestring#includevectorusingnamespacestd;doubleLagrange(intN,vectordouble&X,vectordouble&Y,doublex);intmain(){doublep,b,c;chara='n';do{cout请输入差值次数n的值:endl;intN;cinN;vectordoubleX(N,0);vectordoubleY(N,0);cout请输入区间长度(a,b):endl;cinp;cinb;c=b-p;c=c/(N-1);for(inti=0;iN;i++){X[i]=p;Y[i]=1/(1+p*p);p=p+c;}cout请输入要求值x的值:endl;doublex;cinx;计算机科学与工程学院6doubleresult=Lagrange(N,X,Y,x);cout由拉格朗日插值法得出结果:resultendl;cout是否要继续?(y/n):;cina;}while(a=='y');return0;}doubleLagrange(intN,vectordouble&X,vectordouble&Y,doublex){doubleresult=0;for(inti=0;iN;i++){doubletemp=Y[i];for(intj=0;jN;j++){if(i!=j){temp=temp*(x-X[j]);temp=temp/(X[i]-X[j]);}}result+=temp;}returnresult;};B:分段线性插值#includeiostream#includestring#includevectorusingnamespacestd;doublefenduan(intN,vectordouble&X,vectordouble&Y,doublex,doublec);intmain(){doublep,b,c;chara='n';do{cout请输入差值次数n的值:endl;intN;cinN;vectordoubleX(N,0);vectordoubleY(N,0);cout请输入区间长度(a,b):endl;cinp;cinb;c=b-p;c=c/(N-1);for(inti=0;iN;i++){X[i]=p;Y[i]=1/(1+p*p);计算机科学与工程学院7p=p+c;}cout请输入要求值x的值:endl;doublex;cinx;doubleresult=fenduan(N,X,Y,x,c);cout由分段线性插值法得出结果:resultendl;cout是否要继续?(y/n):;cina;}while(a=='y');return0;}doublefenduan(intN,vectordouble&X,vectordouble&Y,doublex,doublec){doubleresult=0;intb;b=0;while(x-X[b]c){b=b+1;}result=Y[b]*(1-(x-X[b])/c)+Y[b+1]*((x-X[b])/c);returnresult;};(3)牛顿插值法#includeiostream#includestring#includevectorusingnamespacestd;doubleChaShang(intn,vectordouble&X,vectordouble&Y);doubleNewton(doublex,vectordouble&X,vectordouble&Y);intmain(){chara='n';do{intn;cout请输入插值点个数:endl;cinn;vectordoubleX(n,0);vectordoubleY(n,0);cout请输入插值点对应的值及函数值(Xi,Yi):endl;for(inti=0;in;i++){cinX[i]Y[i];}cout请输入要求值x的值:endl;doublex;计算机科学与工程学院8cinx;cout由牛顿插值法得出结果:Newton(x,X,Y)endl;cout是否要继续?(y/n):;cina;}while(a=='y');return0;}doubleChaShang(intn,vectordouble&X,vectordouble&Y){doublef=0;doubletemp=0;for(inti=0;in+1;i++){temp=Y[i];for(intj=0;jn+1;j++)if(i!=j)temp/=(X[i]-X[j]);f+=temp;}returnf;}doubleNewton(doublex,vectordouble&X,vectordouble&Y){doubleresult=0;for(inti=0;iX.size();i++){doubletemp=1;doublef=ChaShang(i,X,Y);for(intj=0;ji;j++){temp=temp*(x-X[j]);}result+=f*temp;}returnresult;}六、实验总结1.通过实验一数据发现,拉格朗日插值在低次插值时,同源函数偏差并不大,但在高次插值时同原函数偏差大、存在明显的龙格现象,而分段线性插值可以避免出现的龙格现象,与原函数比较吻合,但是分段线性插值由于其分段属性,使得插值函数失去光滑性,可以考虑采用Hermite插值优化。2.通过实验二计算过程发现,拉格朗日插值法的线性插值的计算过程没有继承性,即增加一个节点时整个计算工作必须重新开始。而牛顿插值则避免了这一问题,这样大量的节省了乘、除法运算次数,减少了计算的时间。因此,对于一些结构相当复杂的函数,牛顿插值法比拉格朗日插值法要占优势。五、教师评语(或成绩)教师签字:
本文标题:《计算方法》实验报告
链接地址:https://www.777doc.com/doc-3683039 .html