step2:dijjj)=f八x)=0,l,.,n 计算k阶差商 fork=I to for j=n tok 马-k step3:对给定的x,由 N(r)=f(xo)+(x-ro)fro,1]+(x-xo)(I-z1)f[xo,1,x2] +.+(x-x0)(x-x1.(x-x-ifx0,x1,.,xn] 计算N(x)的值 stcp4:输出Nn(x)。 程序源码 Purpose:(x.i,y.i)的牛顿插值多项式,i记f(x)=y.i/W #include <stdio.h> #define MAX.N 20 /定义(x.i,y-i)的最大维数 typedef struct tagPOINT /点的结构 double double y: !POINT: int main() int n; int i.i: POINT points[MAX.N+1];double diff(MAX.N+1]; double×,tp,newton=0: printf(\n Input n value:); /输入被插值点的数目 scanf(%d,&n); if (n>MX.N) printf("The inputn is larger than MAX.N,please redefine the MAX_N.\n); return 1; if (n<=0) printf("Please input a number between 1 and %d.\n,MAX_N); return 1; /输人被插值点(x.i,y.) printf("Now input the (xi,y-i).i=0.%d:n',n); for (i=0:i<=ni i+) scanf("%ff.&pointsl il.x.&pointsl i].y): printf("Now input thex value:; /输人计算牛顿插值多项式的x值 scanf(“%1f,&x): for (i=0;i<=n;i+)diff[i]=points[i].y; for (k=0;i<n:i++) /计算k阶差商 ·21
for (j=n;j>i;j-) diff[j]=(diff[j]-diff[j-1])/(points[j].x-points[j-1-k].x); tmp=1:pewton=diff[ol: for (i=0:i<n) tmp=tmp*(x-points[i].x); newton=newton+tmp diff[i+1]; printf("newton(%f)=%newton); 输出 return 0; 计算实例 给定sinl1°=0.190809,$in12°=0.207912,sin13°=0.224951,构造牛顿插值函数计 算sin1130'。 程序输入输出 Ipput n value:2 Now input the (x.i,y-i).i=0. 2 10.190809120.207912130.224951 Now input the x value:11.5 newton(11.500000)=0.199369 程序2给定(:,),i=0,l,n,用Neville迭代构造插值多项式Pn(x),其中 Pn(x,)=y,i=0,1,.,n。输人要计算的函数点x,并计算Pn(x)的值。 算法描述 sepl:输入n值,及(x,y),i=0,l,.,n:记Q.0=f(x)=y: 输人T。 step2:fori=l,2,.,n forj=1,2,.,i 计算Q=-)01-(x-)Q xi-xi-j step3:输出Q,i=0,1,.,n,j=0,1,.,i 输出Pn(x)=Qn,o 程序源码 Purpose::Neville迭代插值 include <stdio.h> define MAX N 20 /定义(x1,y.)的最大维数 typedef struct tagPOIN /点的结构 ;double x: double y: I FOINT: int main() ,22
int n; int i.j POINT points[MAX.N+1]:double Q[MAX_N+1][MAX_N+1]: doublex: printf(\nInput n value:"); /输人被插值点的数目 scanf("%d,&n); if (n>MAX N) printf("The input n is larger than MAX-N,please redefine the MAX-N.\n) return 1; if(n<=0) printf("Please input a nunber between 1 and %d.n,MAX.N); return 1; printf("Now input the (xi,y-i),=0.%d:\n,n) /输人被插值点(xi,y.) for (i=0;i<=n;it+) scanf(%f,&points[].x,&points[i].y); printf("Now input the xvalue:"); /输人计算插值多项式的x值 canf(“%1f,&x): for (i=0:i<=n:i++)oli][o]=points[i].y; for (i=1;i<=n;i++) 1for(1=1:<=i:j++) []=((x-points[i-j].x)o[i][j-]- (x-points[i].x)*Q[i-1J[j-1])/八points[i】.x-points[i-j】.x): /计算(i,) for (i=0;i<=ni i++) I for(j=0;j<=;j++) printf("Q(%d,%d)=]j]) /输出Qi,) printf("P(%f)=%f\n,x,QIn][n]): return 0; 计算实例 给定sin11°=0.190809,sin12°=0.207912,sin13°=0.224951,用Neville迭代构造 插值函数以计算sin11"30'。 程序输人输出 Input n value:2 Now input the (x-i,y-i),i=0.2: ·23
110.190809120.207912130.24951 Now input the x value:11.5 Q(0.0)=0.190809 Q(1.0)=0.207912 Q(1,1)=0.19936 Q(2,0)=0.224951 0(2.1)=0.199393 Q(2,2)=0.199369 P(11.500000) =0.199369 上机习题(自选编程语言) 【.用牛顿插值计算埃尔米特插值。 输入:插值点数n,插值点{,f(x),∫(x:),i=0,1,n;要计算的函数点 t。 输出:N(x)的值 2.分别用5次多项式和样条函数构造下列函数在[0,2]上的插值多项式,并同时画 出被插函数和插值函数: (1)f(r)=x7-1.2x5+2.3x4+2.3x3-5.6x+1.9 1.4习题 1.1作出插值点(-1.00,3.00),(2.00,5.00),(3.00,7.00)的二次拉格朗日插 值多项式并计算L2(2.1)。 1.2已知sin0.32=0.314567,sin0.34=0.333487,sin0.36=0.352274,用线性插 值及二次插值计算sin0.3367的值并估计截断误差。 1.3给出f(x)=nx的数值表: 0.4 0.5 0.6 0.7 0.8 0.9 -0.916291-0.693147-0.510826-0.356675 -0.223144-0.105361 (1)以0.5,0.6为节点,用拉格朗日线性插值计算n0.52的近似值: (2)以{0.4,0.5,0.6为节点,用拉格朗日二次插值计算1n0.52的近似值; (3)以10.7,0.8,0.9为节点,用牛顿二次插值计算ln0.78的近似值,并估计误差。 1.4给出下列函数表: ·24·
r 0.2 0.3 0.4 f(,) 0.0399893 0.0898785 0.159318 f(x) 0.39968 0.597572 0.789782 (1)以10.2,0.3为节点,用埃尔米特插值计算H13(0.27): (2)以10.3,0.4为节点,用埃尔米特插值计算H23(0.36)。 1.5制作函数1ogx的函数值表,10≤x≤20,已知表值有五位小数的近似值,要求 用线性插值引起的截断误差不超过表值的舍人误差,试决定其最大允许步长。 1.6给出下列函数表: I 0 2 3 4 5 f(a.) 7 5 26 65 128 (1)做出差商表: (2)写出牛顿插值多项式。 1,7给出函数表: 1.05 1.10 1.15 1.20 y 2.12 2.20 2.17 2.32 构造分段线性函数,并计算f(1.075)和f(1.175)的近似值 1.8给定数据f(0),f(1),f(1),做出二次插值多项式。 1.9做出满足插值条件f(2.0)=0.6,f(3.0)=1.3,f(3.0)=0.9的二次插值多 项式,并计算f(2.2)的近似值。 1.10做出满足插值条件H(0)=f(0),H(1)=f(1),H(2)=f(2),H(1)=f(1) 的三次插值多项式,并写出插值余项。 1.11做出满足插值条件f(-1)=0,f(0)=1.0,f(1)=0,∫(1)=0的三次插值 多项式H(x),并计算f(0.5)的近似值。 1.12设f(x)=x5-2x2+x-1,计算差商: (1)f2°,2],20,2,.,251,f[2,2,.,2] (2)f[0,1],f[1,2,.,6],f[0,1,.,6] 1.13求一个次数不高于4次的插值多项式P4(x),使它满足 P4(0)=P4(0)=0,P4(1)=-0.5,P4(2)=-2.0,P4(2)=2 1.14给定如下插值条件和端点条件M0=0,M3=0,构造M关系式三次样条插值 西数。 25