⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 newton.cpp

📁 数值分析牛顿插值经典源码
💻 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 + -