《数值分析实验一——拉格朗日插值算法报告》由会员分享,可在线阅读,更多相关《数值分析实验一——拉格朗日插值算法报告(4页珍藏版)》请在金锄头文库上搜索。
1、拉格朗日插值算法的实现实验报告 姓名:* 年级:* 专业:计算机科学与技术科目:数值分析 题目:拉格朗日插值算法的实现实验时间: 2014年5月27日 实验成绩: 实验教师:一、 实验名称:拉格朗日插值算法的实现二、 实验目的: a. 验证拉格朗日插值算法对于不同函数的插值b. 验证随着插值结点的增多插值曲线的变化情况。三、 实验内容:拉格朗日插值基函数的一般形式:也即是: 所以可以得出拉格朗日插值公式的一般形式: 其中, n=1时,称为线性插值,P1(x) = y0*l0(x) + y1*l1(x) n=2时,称为二次插值或抛物插值,精度相对高些,P2(x) = y0*l0(x) + y1*
2、l1(x) + y2*l2(x) 四、 程序关键语句描写 double Lagrange(int n,double X,double Y,double x)double result=0;for (int i=0;in;i+)double temp=Yi;for(int j=0;jn;j+)/插值基函数乘以相应的y值if(i!=j)temp=temp*(x-Xj);temp=temp/(Xi-Xj);result+=temp;/求出Pn(x)return result;五、 实验源代码:#include#includeusing namespace std;int main()double L
3、agrange(int n,double X,double Y,double x); /插值函数double x;/要求插值的x的值double result;/插值的结果char a=n;double X20,Y20;docout请输入插值次数n的值:n; cout请输入插值点对应的值及函数值(xi,yi):endl;for(int k=0;kXkYk;cout请输入要求值x的值:x;result=Lagrange(n,X,Y,x);cout由拉格朗日插值法得出结果:resultendl;couta;while(a=yes);return 0;double Lagrange(int n,do
4、uble X,double Y,double x)double result=0;for (int i=0;in;i+)double temp=Yi;for(int j=0;jn;j+)/插值基函数乘以相应的y值if(i!=j)temp=temp*(x-Xj);temp=temp/(Xi-Xj);result+=temp;/求出Pn(x)return result;六、 实验用测试数据和相关结果:1、线性插值:书上例2。2、 抛物插值:书上例3。3、 三次插值:七、 实验体会对于现在的许多实际问题来说,我们并不知道f(x)的具体形式,所对应的函数值可能是由测量仪器或其他设备中直接读出来的,f(x)只是一个数学概念意义下的函数。(比如:图像的方法处理,天气预报,机床加工等方面)解答这类问题的方法就是插值方法。泰勒插值要求提供f(x)在点x0处的各阶导数值,这项要求很苛刻,函数f(x)的表达式必须相当简单才行。如果仅仅给出一系列节点上的函数值f(xi) = yi(i=0,1,2,n),则插值问题可表述如下:求作 n 次多项式 Pn(x),使满足条件Pn(x)= yi,i = 0,1,n 。这就是所谓拉格朗日( Lagrange)插值。通过本次实验,我不仅学会了如何用程序实现拉格朗日插值的算法,而且更深刻的理解了拉格朗日插值的原理及方法。4