牛顿插值法的分析与应用
学生:
班级:
学号:
:
指导教师:
成绩:
一.定义
)(x f 关于i x 的零阶差商
)(][i i x f x f = )(x f 关于i x ,j x 的一阶差商 i
j i j j i x x x f x f x x f --=
][][],[
依次类推,)(x f 关于i x ,1+i x ,……,k i x +的k 阶差商 i
k i k i i k i i k i i i x x x x f x x f x x x f --=
+-+++++]
,,[],,[],,,[111
二. 牛顿插值多项式
设给定的n+1个互异点))(,(k k x f x ,n k ,,1,0 =,j i x x ≠,j i ≠, 称满足条件
)()(k k n x f x N =,n k ,,1,0 =
的n 次多项式
)()](,,,[)](,[][)(10100100---++-+=n n n x x x x x x x f x x x x f x f x N
为Newton 插值多项式,称
],[,)(],,,[)()()(0
10b a x x x x x x f x N x f x E n
j j n n ∈-=-=∏=
为插值余项。
三.算法
步骤1:输入节点(xj ,yj ),精度ξ,计值点xx ,f0→p ,1→T ,1→i ; 步骤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)*T →T ,p+ f[x0,…,xi]*T →p ,转步骤4。
步骤4:若i<n ,则i+1→i ,转步骤2;否则终止。
四.流程
五.程序清单#include"stdio.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;i<n+1;i++)
for(j=0;j<2;j++)
scanf("%f",&a[i][j]);
for(j=1;j<n+2;j++)//计算各阶均差
for(i=j;i<n+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;i<n+1;i++)
{
for(j=0;j<n+2;j++)
printf("%6.5f ",a[i][j]);
printf("\n");
}
printf("输出牛顿插值表达式\n");
printf("N%d(x)=",n);
for(i=0;i<n+1;i++)
{
printf("%6.5f",a[i][i+1]);
for(j=0;j<i;j++)
printf("(x-%3.2f)",a[j][0]);
if(i==n)
break;
printf("+");
}
printf("\n");
printf("输入插值点x=");
scanf("%f",&x);
for(i=0;i<n+1;i++)//计算插值点的近似值 {
for(j=0;j<i;j++)
t*=(x-a[j][0]);s+=a[i][i+1]*t;
}printf("N%d(%4.3f)=%6.5f\n",n,x,s);} 六.程序实现
参考文献:
Richard L. Burden, J. Douglas Faires, Numerical Analysis (Seventh Edition), Brooks Pub. Co.,2001.
2. 蔡大用,白峰杉. 高等数值分析. 清华大学,,1998.
3. 邓建中,之行. 计算方法(第二版).交通大学,2001.
4. 旭里. 数值分析. 中南大学,2003.。