📄 ma_ndf.cpp
字号:
#include<iostream.h>
#include<math.h>
double DataX[50];//存放输入的数据
double DataY[50];
double X[50]; //存放整理后的数据
double Y[50];
double factor(int m); //--------------求阶乘的函数声明
double delt(int i,int j);//--------------求差分的函数声明
void main()
{
double s,x,t,D,Dt;
int n,i,num1,num2;
char k;
cout<<"请输入X数据的个数:";
cin>>num1;
for(int c=1;c<=num1;c++)//------------数据输入
{
cout<<"X"<<c<<"=";
cin>>DataX[c];
cout<<"Y"<<c<<"=";
cin>>DataY[c];
}
star: cout<<"请输入x:"; //x可以是在表的范围内的任意数
cin>>x;
//------------------------------------------------------------------对数据进行整理
if(DataX[1]<DataX[num1])//-------X是从小到大排列的情况
{
if((x>=DataX[1])&&(x<=DataX[num1]))
{
for(i=1;i<=num1;i++)//找x在表中的位置
{
if(DataX[i]>x) break;
}
}
else
{ cout<<"你输入的X不在表的范围之内。请重新输入X"<<endl;goto star;
}
}
if(DataX[1]>DataX[num1])//-------X是从大到小排列的情况
{
if((x<=DataX[1])&&(x>=DataX[num1]))
{
for(i=1;i<=num1;i++)//找x在表中的位置
{
if(DataX[i]<x) break;
}
}
else
{ cout<<"你输入的X不在表的范围之内。请重新输入X"<<endl;goto star;
}
}
if(i<=(((double)num1/2)+1)) //如果x在表的前半段
{
num2=num1-i+2;
for(int c=1;c<=num2;c++)//将x的前一个数截取为表头
{
X[c]=DataX[i+c-2];
Y[c]=DataY[i+c-2];
}
}
else if(i>(((double)num1/2)+1)) //如果x在表的后半段
{
num2=i;
for(int c=1;c<=num2;c++)//将数据倒置并将x的前一个数截取为表头
{
X[c]=DataX[i-c+1];
Y[c]=DataY[i-c+1];
}
}//------------------------------------------------------------------------
//**************************************************牛顿向前插值法
t=(x-X[1])/(X[2]-X[1]);
s=Y[1]; D=1;
for(n=1;n<num2;n++)
{
Dt=t;
for(int i=2;i<=n;i++)
{Dt=Dt*(t-i+1);}
D=(Dt/factor(n))*delt(n,1);
s=s+D;
if((fabs(D))<=0.0001)//精确到0.0001退出循环
{D=0.0001;break;}
}//*************************************************牛顿向前插值法
cout<<"结果:f("<<x<<")="<<s<<" 精确到:"<<fabs(D)<<endl;
cout<<"是否继续算下一个值?Y/N";
cin>>k;
if(k!='n') goto star; //k=n时退出程序
}
double factor(int m) //--------------求m的阶乘
{
if(m==0)
return 1;
return m*factor(m-1);
}
double delt(int i,int j) //-------------求i阶差分
{
if(i==1)
return (Y[j+1]-Y[j]);
return delt(i-1,j+1)-delt(i-1,j);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -