📄 newton.cpp
字号:
# include "iostream.h"
# include "math.h"
int const M=100; //均差表能容纳的最大维数
void main(void)
{
double e,xx;//所要达到的精度e,求值点xx
int n; //插值点数目
cout<<"请分别输入所要达到的精度、求值点、插值点数目:"<<endl;
cin>>e>>xx>>n;
double array[M][M];
//每行为均差表上所对应的行;第一列为插值点,第二列为零阶均差...
int i; //i表示均差表的行数
double r; //r表示所计算的实际误差
double t=1,p;
//t为临时变量,p为求值点处所计算的近似值
cout<<"按插值节点从小到大的顺序输入"<<endl;
for(int j=0;j<n;j++)
{
cout<<"输入第"<<j<<"个差值节点和所对应的函数值:";
cin>>array[j][0]>>array[j][1];
}
/* array[0][0]=0.4; array[0][1]=0.41075;
array[1][0]=0.55;array[1][1]=0.57815;
array[2][0]=0.65;array[2][1]=0.69675;
array[3][0]=0.8; array[3][1]=0.88811;
array[4][0]=0.9; array[4][1]=1.02652;
array[5][0]=1.05;array[5][1]= 1.25382;*/
p=array[0][1];
for(i=1;i<=n-1;i++)
{
for(int k=2;k<=i+1;k++)
{
array[i][k]=(array[i][k-1]-array[i-1][k-1])/(array[i][0]-array[i-k+1][0]);
}
if(fabs(array[i-1][i]-array[i][i])<e)
{
r=array[i][i+1]*(xx-array[i-1][0])*t;
cout<<"\n求值点"<<xx<<"处近似值"<<p<<";实际误差为"<<r<<";所用节点数为"<<i;
break;
}
t=t*(xx-array[i-1][0]);
p=p+array[i][i+1]*t;
}
if(i==n){
r=array[i][i+1]*(xx-array[n-1][0])*t;
cout<<"\n求值点"<<xx<<"处近似值"<<p<<";实际误差为"<<r<<";所用节点数为"<<i;
}
return ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -