一、实验任务
给定一系列样本点,采用牛顿差值公式估计样本点附近指定点的函数值。以教材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); }
六、实验结果及分析
通过调试,编译代码,得出结果:

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

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

被折叠的 条评论
为什么被折叠?



