预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

PAGE\*MERGEFORMAT4 Lagrange插值与Newton插值算法编程 专业:电路与系统姓名:邹鑫 学号:2012021716 程序流程 用C++编程实现函数的插值计算,由用户依次输入节点个数(设为20个节点以内)以及各个节点对应的x值和y值来描述已知函数的插值,最后输入所求的x值,程序就分别用公式计算出所求插值x对应的函数y值。 Lagrange插值 源程序: #include<iostream.h> #include<math.h> typedefstructdata { floatx; floaty; } Data; Datad[20]; //创建一个元素为20的d数组 floatlagrange(floatx,intcount) { floaty=0.0; //先清零y for(intk=0;k<count;k++) //这儿默认为count-1次插值 { floatp=1.0; for(intj=0;j<count;j++) { if(k==j) continue; p=p*(x-d[j].x)/(d[k].x-d[j].x); } y=y+p*d[k].y; //y求和 } returny; //返回y的值 } //===主函数=================================================== voidmain() { floatx,y; intcount; cout<<"请输入x[i],y[i]的组数,不得超过20组:";//要求输入数据组数 cin>>count; //获得总共有几组的组数 for(inti=0;i<count;i++)//获取x与y数组的各元素值 { cout<<"请输入第"<<i+1<<"组x的值:"; cin>>d[i].x; cout<<"请输入第"<<i+1<<"组y的值:"; cin>>d[i].y; } cout<<"请输入x的值:"; //获得插入变量x的值 cin>>x; cout<<"拉格朗日插值计算结果为:"<<endl; //提示语 y=lagrange(x,count); cout<<"x="<<x<<"时,"<<"y="<<y<<endl; //输出最终结果 } 运行结果: 输入函数f(x)=x2的5个节点值,求x=3.73时的拉格郎日插值: Newton插值 源程序: #include<iostream.h> #include<math.h> typedefstructdata { floatx; floaty; }Data; Datad[20]; //创建一个元素为20的d数组 floatf(ints,intt) //牛顿插值法,用以返回插商 { if(t==s+1) return(d[t].y-d[s].y)/(d[t].x-d[s].x); else return(f(s+1,t)-f(s,t-1))/(d[t].x-d[s].x); } floatNewton(floatx,intcount) { intn; cout<<"请输入n值(即n次插值):"; //获得插值次数 cin>>n; floatt=1.0; floaty=d[0].y; floatyt=0.0; for(intj=1;j<=n;j++) { t=(x-d[j-1].x)*t; yt=f(0,j)*t; y=y+yt; //y求和 } returny; //返回y的值 } //======================================================== voidmain() { floatx,y; intcount; cout<<"请输入x[i],y[i]的组数,不得超过20组:";//要求用户输入数据组数 cin>>count; for(inti=0;i<count;i++) //依次读取原函数的x与y值 { cout<<"请输入第"<<i+1<<"组x的值:"; cin>>d[i].x; cout<<"请输入第"<<i+1<<"组y的值:"; cin>>d[i].y; } cout<<"请输入x的值:"; //获得插入变量x的值 cin>>x; y=Newton(x,count); cout<<"Newton插值计算结果为:"<<endl; //提示语 cout<<"x="<<x<<"时,"<<"y="<<y<<endl; //输出最终结果 运行结果: 输入函数f(x)