拉格朗日牛顿插值法实验报告(共10页).docx
精选优质文档-倾情为你奉上标题:实验一 拉格朗日插值法算法与牛顿插值算法一、 实验目的:1. 体会并了解拉格朗日插值法,用计算机插入x值,输出相应的y值。2. 体会并了解牛顿插值法,用计算机插入x值,输出相应的y值。二、实验原理:1. 拉格朗日插值法的插值公式:Lnx=k=0nykx-x0x-x1(x-xn)x-xkxk-x0xk-xk-1xk-xk+1(xk-xn)2牛顿插值法的插值公式:Pnx=fx0+fx0,x1x-x0+fx0,x1,x2x-x0x-x1+fx0,x1,xnx-x0x-xn-1fx0,x1,xk=j=0kf(xj)xj-x0xj-xj-1xj-xj+1xj-xk三、算法设计与程序流程图:1. 拉格朗日插值法算法分析:a. 输入节点的个数j。b. 输入节点的横纵坐标。c. 输入新插入的节点的横坐标。d. 通过两次循环求得新插入节点的纵坐标。 程序流程图:开 始输入插值个数j输入插入的x 、y k=0;k<=j-1;k+b1=xk,b2=yki=0;i<=j-1;i+a=xi;c=newx-a;w1=w1*c;e=b1-a;e=0?w2=w2*ew2=w2*(e+1)d=newx-b1;f=d*w2;l=b2*w1/f;L=L+l;w1=1;w2=1;输出newy结 束2. 牛顿插值算法分析:a.输入节点的个数j。b.输入节点的横纵坐标。c.输入新插入的节点的横坐标。d.通过两次循环求得新插入节点的纵坐标。 程序流程图: 开 始输入插入个数j输入插入的x 、y f=0;f<=j-1;f+k=0;k<=f;k+b1=xk;b2=yki=0;i<=f;i+a=xi;e=b1-ae=0?w1=w1*ew1=w1*(e+1)l=b2/w1;L=L+l;w1=1;c=newx-b1;w2*cd=L*w2/c;w2=1;P=P+d;L=0;输出newy结 束四、 源程序:#include "stdafx.h"#include "stdio.h"int main()float x20,y20;int k,j,i,flag;float a,b1,b2,c,d,e,f,w1,w2,l,L,newx,P;w1=1;w2=1;L=0;P=0;printf("请输入数据,不得超过20组。n");printf("输入的数据为几组:");scanf("%d",&j);for(i=0;i<=j-1;i+)printf("第%d组为:n",i+1);printf("x=");scanf("%f",&xi);printf("y=");scanf("%f",&yi);printf("请选择:1,拉格朗日插值。2,牛顿插值。0,退出。n"); scanf("%d",&flag);if(flag=1)printf("请输入插入的数值:");scanf("%f",&newx);for(k=0;k<=j-1;k+)b1=xk;b2=yk;for(i=0;i<=j-1;i+)a=xi; c=newx-a; w1=w1*c;e=b1-a; if(e!=0)w2=w2*e; if(e=0)e=e+1;w2=w2*e;d=newx-b1;f=d*w2;printf("f=%fn",f);l=b2*w1/f;printf("l=%fn",l);L=L+l;w1=1;w2=1;printf("newy=%f",L);if(flag=2)printf("请输入插入的数值:");scanf("%f",&newx);for(f=0;f<=j-1;f+)for(k=0;k<=f;k+)b1=xk;b2=yk;for(i=0;i<=f;i+)a=xi;e=b1-a;if(e!=0)w1=w1*e;else if(e=0) e=e+1; w1=w1*e;l=b2/w1;L=L+l;w1=1;c=newx-b1;w2=w2*c;d=L*w2/c;w2=1;P=P+d;L=0;printf("newy=%f",P);if(flag=0)return 0;五、 程序执行情况:1. 拉格朗日插值法:2. 牛顿插值法:六、 结果分析:引用课本例2进行拉格朗日插值法验证,与课本上的结果相一致,引用课本例4进行牛顿插值法验证,与课本答案相差0.,是因为课本的有效数字与计算机取得不同,所以经过计算、运行基本达到了预期效果。此程序可以用做数学计算。七、 实验体会:经过此次实验基本上了解了拉格朗日插值法的算法和牛顿插值法算法的过程,对以后算法的运用和其他算法的理解有帮助,而且有助于编程能力的提高和实际问题的理解。专心-专注-专业