牛顿插值法的分析与应用.doc
文本预览下载声明
牛顿插值法的分析与应用
学生姓名:
班级:
学号:
电话:
指导教师:
成绩:
一.定义
关于的零阶差商
关于,的一阶差商
依次类推,关于,,……,的k阶差商
二. 牛顿插值多项式
设给定的n+1个互异点,,,,
称满足条件
,
的n次多项式
为Newton插值多项式,称
为插值余项。
三.算法
步骤1:输入节点(xj,yj),精度,计值点xx,f0p,1T,1i;
步骤2:对k=1,2,……,i依次计算k阶均差
f[xi-k,xi-k+1,…,xi] = (f[xi-k+1,…,xi]- f[xi-k,…,xi])/( xi -xi-k )
步骤3:(1)、若| f[x1,…,xi]- f[x0,…,xi-1]| ,则p为最终结果Ni-1(x),余项Ri-1= f[x0,…,xi](xx-xi-1)T。
(2)、否则(xx-xi-1)*TT,p+ f[x0,…,xi]*Tp,转步骤4。
步骤4:若in,则i+1i,转步骤2;否则终止。
四.流程
i+1i
YES
NO
YES
i+1 i
NO
五.程序清单#includestdio.h
#define n 4//牛顿插值的次数
void main()
{
float a[n+1][n+2]={0},s=0,t=1,x;
int i,j;
printf(请输入xi及yi的值//要求先输入xi再输入yi然后输入下一组\n);
for(i=0;in+1;i++)
for(j=0;j2;j++)
scanf(%f,a[i][j]);
for(j=1;jn+2;j++)//计算各阶均差
for(i=j;in+1;i++)
a[i][j+1]=(a[i][j]-a[i-1][j])/(a[i][0]-a[i-j][0]);
printf(输出xi,yi及各阶均差\n);
for(i=0;in+1;i++)
{
for(j=0;jn+2;j++)
printf(%6.5f ,a[i][j]);
printf(\n);
}
printf(输出牛顿插值表达式\n);
printf(N%d(x)=,n);
for(i=0;in+1;i++)
{
printf(%6.5f,a[i][i+1]);
for(j=0;ji;j++)
printf((x-%3.2f),a[j][0]);
if(i==n)
break;
printf(+);
}
printf(\n);
printf(输入插值点x=);
scanf(%f,x);
for(i=0;in+1;i
显示全部