牛顿插值方法的实现

这篇博客介绍了如何用C语言实现牛顿插值方法。博主详细讲解了实验任务,即根据给定样本点估计函数值,并阐述了牛顿插值公式和算法步骤。在编程环境中使用DEV C++,并通过调试得到了实验结果,分析了插值点序列和插值函数的计算过程。
部署运行你感兴趣的模型镜像

一、实验任务

给定一系列样本点,采用牛顿差值公式估计样本点附近指定点的函数值。以教材p31例2.9为操作内容。
已知实验数据:
xi 0.4 0.55 0.65 0.80 0.90
yi 0.41075 0.57815, 0.69675 0.88811 1.02653
表 1-1 牛顿插值实验数据

二、编程环境

PC一台,C语言(DEV C++)

三、实验原理与算法

1、 Newton插值公式:
输入n,xi,yi(i=0,1,2,3…,n),对k=1,2,3,…,n,计算函数f(x)的各阶差商
F[x0,x1,…,xk],计算Newton插值函数值:
Nn(x)=f0(x0)+fx0,x1+…+fx0,x1,…xn(x-x1)…(x-xn-1)
2、算法
·输入参数:插值节点数(n+1),插值点序列(xk,yk),要计算函数点x。
·输出参数:Nn(x)的近似值或者错误信息。
·算法描述:
Step1:输入插值点序列(xk,yk)(k=0,1,…,n)令Nn(x)=0。
Step2:对k=1,2,…,计算f(x)的各阶插商f[x0,x1,…,xk],
f[x0,x1,…,xk]=(f[x1,…,xk]-f[x0,x1,…,xk-1])/(xk-xi)。
Step3:计算函数值 Nn(x)=f0(x0)+fx0,x1+…+fx0,x1,…xn(x-x1)…(x-xn-1)。
Step4:输出Nn(x)的近似值或输入不正确信息,保存程序。

四、程序流程图

流程图

五、程序

#include<stdio.h>
#define MAX 1024
#include<math.h>
int main()
{
/*	int n,n1;
	double X[MAX],Y[MAX];
	scanf("%d",&n);//输入n组数据
	for(n1=0;n1<n;n1++)
	   scanf("%lf,%lf",&X[n1],&X[n1]); *///输入其他数据,一次输入一组(xi,yi),用逗号隔开 
	double static x[5]={0.4,0.55,0.65,0.80,0.90};//测试数据 
	double static y[5]={0.41075,0.57815,0.69675,0.88811,1.02653};
	int i,k;
	double c,p;
//	printf("构造差商表:"); 
	for(k=1;k<=4;k++)//插商构造 
	{
//		printf("\n");
//		printf("%dth is\n",k);//输出每一步 
		for(i=4;i>=k;i--)
		{
			y[i]=(y[i]-y[i-1])/(x[i]-x[i-k]);
			printf("  %8.6lf",y[i]);//调试插商计算是否出错 
		}
	}
	c=0.596;
	p=y[4];
	for(i=4;i>=0;i--)
	    p=p*(c-x[i])+y[i];//牛顿插值公式 
/*y[0]+y[1]*(c-x[0])+y[2]*(c-x[0])*(c-x[1])+y[3]*(c-x[0])*(c-x[1])*(c-x[2])+y[4]*(c-x[0])*(c-x[1])*(c-x[2])*(c-x[3])+y[5]*(c-x[0])*(c-x[1])*(c-x[2])+y[4]*(c-x[0])*(c-x[1])*(c-x[2])*(c-x[3])*(c-x[4])*/
	printf("\nN4(%4.4lf)=%8.6lf\n",c,p); } 

六、实验结果及分析

通过调试,编译代码,得出结果:
图 1-1 编译结果
结果分析:
已知插值点序列:
x[5]={0.4,0.55,0.65,0.80,0.90} ,y[5]={0.41075,0.57815,0.69675,0.88811,1.02653};首先计算k阶插商:f[x0,x1,…,xk]=(f[x1,…,xk]-f[x0,x1,…,xk-1])/(xk-xi);之后利用差商建立牛顿插值多项式:
y[0]+y[1](c-x[0])+y[2](c-x[0])(c-x[1])+y[3](c-x[0])(c-x[1])(c-x[2])+y[4](c-x[0])(c-x[1])(c-x[2])(c-x[3])+y[5](c-x[0])(c-x[1])(c-x[2])+y[4](c-x[0])(c-x[1])(c-x[2])(c-x[3])(c-x[4]);最后把x的具体值带入,求出相应的函数值。
图1- 2 编译结果

七、心得体会

1、掌握牛顿差值公式,计算函数的各阶差商,计算牛顿插值函数值:
Nn(x)=f0(x0)+fx0,x1+…+fx0,x1,…xn(x-x1)…(x-xn-1)。
2、熟练C语言编程,编程前写好相应的算法步骤,通过C语言编程,调试代码,通过分析
发现求得的结果是近似值。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值