typedef struct data
{
float x;
float y;
5
}Data;
Data d[20]; //创建一个元素为20的d数组
float f(int s,int t) //牛顿插值法,用以返回插商
{
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);
}
float Newton(float x,int count)
{
int n;
cout<<\"请输入n值(即n次插值):\"; //获得插值次数
cin>>n;
6
float t=1.0;
float y=d[0].y;
float yt=0.0;
for(int j=1;j<=n;j++)
{
t=(x-d[j-1].x)*t;
yt=f(0,j)*t;
y=y+yt; //y求和
}
return y; //返回y的值
}
//========================================================
void main()
{
7
float x,y;
int count;
cout<<\"请输入x[i],y[i]的组数,不得超过20组:\";//要求用户输入数据组数
cin>>count;
for(int i=0;i{cout<<\"请输入第\"<cin>>d[i].x;
cout<<\"请输入第\"<cin>>d[i].y;
}
cout<<\"请输入x的值:\"; //获得插入变量x的值
cin>>x;
y=Newton(x,count);
8
cout<<\"Newton插值计算结果为:\"<cout<<\"x=\"<3.2. 运行结果:输入函数f(x)=x2的5个节点值,求x=3.73时的牛顿3次插值:
9