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

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

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

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

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

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

#include"stdafx.h" #include<stdio.h> #include<stdlib.h> #include<iostream.h> typedefstructdata { floatx; floaty; }Data;//变量x和函数值y的结构 Datad[20]; 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; while(1) { cout<<"请输入n值(即n次插值):";//获得插值次数 cin>>n; if(n<=count-1)//插值次数不得大于count-1次 break; else system("cls"); } //初始化t,y,yt。 floatt=1.0; floaty=d[0].y; floatyt=0.0; //计算y值 for(intj=1;j<=n;j++) { t=(x-d[j-1].x)*t; yt=f(0,j)*t; //cout<<f(0,j)<<endl; y=y+yt; } returny; } floatlagrange(floatx,intcount) { floaty=0.0; for(intk=0;k<count;k++)//这儿默认为count-1次插值 { floatp=1.0;//初始化p for(intj=0;j<count;j++) {//计算p的值 if(k==j)continue;//判断是否为同一个数 p=p*(x-d[j].x)/(d[k].x-d[j].x); } y=y+p*d[k].y;//求和 } returny;//返回y的值 } voidmain() { floatx,y; intcount; while(1) { cout<<"请输入x[i],y[i]的组数,不得超过20组:";//要求用户输入数据组数 cin>>count; if(count<=20) break;//检查输入的是否合法 system("cls"); } //获得各组数据 for(inti=0;i<count;i++) { cout<<"请输入第"<<i+1<<"组x的值:"; cin>>d[i].x; cout<<"请输入第"<<i+1<<"组y的值:"; cin>>d[i].y; } cout<<"请输入x的值:";//获得变量x的值 cin>>x; while(1) { intchoice=3; cout<<"请您选择使用哪种插值法计算:"<<endl; cout<<"(0):退出"<<endl; cout<<"(1):Lagrange"<<endl; cout<<"(2):Newton"<<endl; cout<<"输入你的选择:"; cin>>choice;//取得用户的选择项 if(choice==2) { cout<<"你选择了牛顿插值计算方法,其结果为:"; y=Newton(x,count);break;//调用相应的处理函数 } if(choice==1) { cout<<"你选择了拉格朗日插值计算方法,其结果为:"; y=lagrange(x,count);break;//调用相应的处理函数 } if(choice==0) break; system("cls"); cout<<"输入错误!!!!"<<endl; } cout<<x<<","<<y<<endl;//输出最终结果 }