1、1,第5章 插值法,拉格朗日插值 差商与牛顿插值 差分与牛顿差分插值 埃尔米特插值 分段插值,2,5.1 引言,在实际应用中可能遇到某些难求的函数。插值法的主要思想是构造易求的函数,如果易求的函数和难求的函数在某一区间内足够接近,那么在这一区间内就可以用易求的函数代替难求的函数进行计算。,插值的几何意义,就是在仅知道函数曲线上若干点的情况下进行作图,用一条曲线经过这些已知点,尽量使这条曲线接近原来的函数曲线,并把这条曲线近似地认为是原来的函数曲线。,常常在以下2种情况下,用插值法求f(x)。 情况一:f(x)同时满足下列条件。 不知道或不存在函数f(x)的具体形式。 知道f(x)上某些离散的点
2、。 情况二:f(x)同时满足下列条件。 知道函数f(x)的具体形式。 对于任意的x求f(x)较为困难。 对于某些特定的x求f(x)较为容易。,3,5.1 引言,定义:设f(x)是区间a,b上的连续函数,已知f(x)在a,b上x=x0,x1,xn处的函数值(设ax0x1xnb,共n1个互异点),若存在函数p(x),满足p(xi)=f(xi),其中i=0,1,2,n,则称: x0,x1,xn为插值节点(插值基点),所求点x为插值点。 a,b为插值区间,插值点x插值区间a,b为内插,否则为外推。 p(x)为插值函数,f(x)为被插函数。 p(xi)=f(xi),(其中i=0,1,2,n),为插值条件
3、。 R(x)=f(x)p(x)为插值余项。 插值函数的构造方法为插值法。,常见的函数类型有幂函数、指数函数、三角函数等。在选择插值函数的类型时,应尽量遵循以下原则: 对任意插值条件,插值函数存在且唯一。 易构造插值函数。 易估计误差。 幂函数除了满足以上条件之外,还具有高阶可导、可积,易手工计算,易编程实现等优点,是使用较广泛的插值函数。,4,5.1 引言,定义:代数插值(多项式插值)的插值函数是幂函数。设插值节点共有n1个,依次为x0,x1,xn,那么插值函数p(x)是次数不超过n次的代数多项式,称p(x)为n次(代数)插值多项式,它的一般形式为:p(x)=a0a1xa2x2anxn。,由克
4、莱姆法则,a0,a1,an存在且唯一,因此插值多项式p(x)存在且唯一。,本章介绍代数插值、带导数的埃尔米特插值和分段插值。本章内容是第6章数值积分的基础。,5,本章介绍的代数插值有拉格郎日插值和牛顿插值。由代数插值的存在唯一性可知,拉格郎日插值插值多项式和牛顿插值插值多项式在化为标准形式后是相同的,二者的区别是构造插值多项式的过程不同。,5.2 拉格朗日插值,一、拉格郎日插值函数一般形式,过n1个插值节点(x0,y0),(x1,y1),(xn,yn)的n次拉格郎日插值函数的一般形式为: Ln(x)= =l0(x)y0+l1(x)y1+ln(x)yn,其中li(x)= =,式中i=0,1,2,
5、n。称li(x)为拉格郎日插值基函数。,对2个插值节点(x0,y0),(x1,y1)的1次拉格郎日插值函数(即线性拉格郎日插值函数) 的几何含义为经过这2个插值节点的直线。,对3个插值节点(x0,y0),(x1,y1),(x2,y2)的2次拉格郎日插值函数(即抛物线拉格郎日插值函数) 的几何含义为经过这3个插值节点的抛物线。,6,拉格郎日插值余项函数Rn(x)=被插函数f(x)插值函数Ln(x)。,5.2 拉格朗日插值,二、拉格郎日插值函数的余项,定理:拉格郎日插值余项函数Rn(x)= Wn(x), 其中Wn(x)= =(x-x0)(x-x1)(x-x2)(x-xn), 当xa,b时,a,b,
6、且与x有关。,7,5.2 拉格朗日插值,三、n次拉格郎日插值的算法,8,5.2 拉格朗日插值,n次拉格郎日插值对应的程序(1/2),#include #include #define MAXSIZE 50 void input(double xMAXSIZE,double yMAXSIZE,long n); void main(void) double xMAXSIZE,yMAXSIZE,_x,_y,t;long n,i,j;printf(“n请输入插值节点的个数:“); scanf(“%ld“,9,5.2 拉格朗日插值,n次拉格郎日插值对应的程序(2/2),void input(double
7、 xMAXSIZE,double yMAXSIZE,long n) long i;for(i=0;i=n-1;i+)printf(“n请输入插值节点x%ld,y%ld:“,i,i);scanf(“%lf,%lf“, ,10,牛顿插值是代数插值的另外一种实现方法。牛顿插值多项式与拉格郎日插值多项式是一致的,只是构造插值多项式的过程不同。当增加插值节点时,牛顿插值能避免重复的计算,这是牛顿插值的优点。,5.3 差商与牛顿插值,一、差商的递归定义,定义:f(x)在x0点处的0阶差商fx0=f(x0),f(x)在x0,x1点处的1阶差商fx0,x1=,f(x)在x0,x1,x2点处的2阶差商为fx0,
8、x1,x2=,f(x)在x0,x1,xn处的n阶差商fx0,x1,xn=,说明:定义中要求当ij时xixj,除此之外,对点xi具体代表哪一点没有限制(可以把xi换成任意1点),对各点的次序也没有限制(即不要求x0x1xn)。,实现牛顿插值需要用到差商。,11,性质1 如果f(x)是代数多项式,那么对f(x)求1次差商,降1次幂。,5.3 差商与牛顿插值,二、差商的性质,对m阶多项式f(x)=a0a1xa2x2amxm求n阶差商fx,x0,x1,xn-1, nm时, fx,x0,x1,xn-1是x的mn次多项式; n=m时, fx,x0,x1,xn-1是f(x)的m阶项amxm的系数am; nm
9、时, fx,x0,x1,xn-1恒为0。,如果f(x)不能用有限次多项式精确表示(如f(x)为三角函数),那么可能无论对f(x)求多少次差商,结果也不会恒为0。,性质2 f(x)在x0,x1,xn处的n阶差商也可以定义为:,fx0,x1,xn=,由性质2可知,交换节点的次序,不改变差商的值。,性质3 如果f(x)在a,b上存在n阶导数,节点x0,x1,xna,b,那么至少有1点a,b,满足fx,x0,x1,xn-1=,12,5.3 差商与牛顿插值,三、差商表,差商表对节点的次序没有限制。当新增加节点时,可以把新增节点添加到差商表最下1行,原有节点的数据不变。,13,5.3 差商与牛顿插值,四、
10、牛顿插值函数和余项,过n1个插值节点(x0,f(x0),(x1,f(x1),(xn,f(xn)的n次牛顿插值函数的一般形式为:,Nn(x)=fx0fx0,x1(x-x0)fx0,x1,x2(x-x0)(x-x1) fx0,x1,xn(x-x0) (x-x1)(x-xn-1),牛顿插值余项函数Rn(x)=被插函数f(x)插值函数Nn(x) =fx,x0,x1,xn(x-x0) (x-x1)(x-xn)=fx,x0,x1,xnWn(x) 其中Wn(x)=(x-x0) (x-x1)(x-xn),由代数插值的存在唯一性,经过n1个插值节点(x0,y0),(x1,y1),(xn,yn)的n次拉格郎日插值
11、函数与n次牛顿插值函数是一致的,因此它们的余项函数也是一致的。,因此Rn(x)=fx,x0,x1,xnWn(x)= Wn(x),与差商的性质3吻合。,14,5.3 差商与牛顿插值,五、n次牛顿插值的算法,15,5.3 差商与牛顿插值,n次牛顿插值对应的程序(1/2),#include #include #define MAXSIZE 50 void input(double xMAXSIZE,double fMAXSIZEMAXSIZE,long n); void main(void) double xMAXSIZE,fMAXSIZEMAXSIZE,_x,_y;long n,i,j;print
12、f(“n请输入插值节点的个数:“); scanf(“%ld“,16,5.3 差商与牛顿插值,n次牛顿插值对应的程序(2/2),void input(double xMAXSIZE,double fMAXSIZEMAXSIZE,long n) long i;for(i=0;i=n-1;i+)printf(“n请输入插值节点x%ld,y%ld:“,i,i);scanf(“%lf,%lf“, ,17,定义:如果某插值过程的插值节点位于x=x0,x1,xn处,且xi-xi-1=h(i=1,2,n),h0,那么这个插值就是等距节点插值,h为步长。,5.4 差分与牛顿差分插值,一、差分和等距节点插值的定义
13、,等距节点插值的满足xi=x0+ih(i=0,1,2,n),且x0x1xn。,在做等距节点插值时,差商演变为差分,牛顿插值简化为牛顿差分插值。差分有向前差分和向后差分。,其中1阶向前差分1yi可以简记为yi,1阶向后差分1yi可以简记为yi 。,18,5.4 差分与牛顿差分插值,二、差分表,向 前 差 分 表,向 后 差 分 表,19,性质1 对相同插值节点构造的向前差分表各项和向后差分表各项按位置对应相等,对应关系式为kyi=kyi+k,或者表示为kyi=kyi-k 。,5.4 差分与牛顿差分插值,三、差分的性质,显然,向前差分表各项与向后差分表各项按位置对应相等。,推论1 如果对m阶代数多
14、项式求n阶差分,且nm,那么结果恒为0;如果对其他类型的函数求差分,那么可能无论求多少次差分,结果也不会恒为0。,推论2 y=f(x)在xi,xi+1,xi+n处的n阶差分也可以定义为:,nyi=nyi+n=,推论3 对f(x)做等距节点插值,设插值节点为xi,xi+1,xi+n,如果f(x)在xi,xi+n上存在n阶导数,那么至少有1点xi,xi+n,满足nyi=hnf(n)()。这是n阶向前差分与n阶导数的关系式。,20,5.4 差分与牛顿差分插值,四、牛顿差分插值函数和余项,设插值节点为x0,x1,xn,且xixi-1=h(i=1,2,n),步长h0,那么xi=x0ih(i=0,1,2,
15、n),且x0x1xn, 若插值点x=x0th,插值节点为(x0,y0),(x1,y1),(xn,yn),则n次牛顿前插公式的一般形式为:,Nn(x)=Nn(x0+th)=y0+ty0+ 2y0+ 3y0 + ny0,余项函数Rn(x)=Rn(x0+th)= hn+1f(n+1)()。, 若插值点x=xnth,插值节点为(x0,y0),(x1,y1),(xn,yn),则n次牛顿后插公式的一般形式为:,Nn(x)=Nn(xn+th)=yn+tyn+ 2yn+ 3yn + nyn,余项函数Rn(x)=Rn(xn+th)= hn+1f(n+1)()。,21,某些插值问题不仅给出了插值节点的坐标位置,还
16、给出了某些插值节点处的若干阶导数值。它不仅要求插值曲线经过插值节点,还要求插值曲线在插值节点处的各阶导数值与给出的各阶导数值相等。满足这种要求的多项式插值称为埃尔米特(Hermite)插值。,5.5 埃尔米特插值,一、埃尔米特插值简介,定义:若存在不超过2n1次的多项式函数H(x),使H(x)与被插函数f(x)在插值节点x=x0,x1,xn(设x0x1xn)处的函数值和1阶导数值相等,即H(xi)=f(xi)且H(xi)=f(xi) ,其中i=0,1,2,n,则称H(x)为带1阶导数的埃尔米特插值函数,称这种插值为带1阶导数的埃尔米特插值。,带1阶导数的埃尔米特插值函数是唯一的。,由埃尔米特插
17、值的定义,可以由待定系数法求解埃尔米特插值函数。,22,2点3次埃尔米特插值是一种使用广泛的插值方法。仅有2个插值节点的带1阶导数的埃尔米特插值函数是1个3次代数多项式函数,因此又称为2点3次埃尔米特插值。,5.5 埃尔米特插值,二、2点3次埃尔米特插值,设插值节点在x=x0,x1处,对被插函数f(x)的2点3次埃尔米特插值函数的一般形式为:,H(x)=h0(x)f(x0)+h1(x)f(x1)+0(x)f(x0)+1(x)f(x1),23,上述2点3次埃尔米特插值可以推广到n1个插值节点的带1阶导数的埃尔米特插值。,5.5 埃尔米特插值,三、带1阶导数的埃尔米特插值,设插值节点在x=x0,x
18、1,xn,处,对被插函数f(x)的带1阶导数埃尔米特插值函数的一般形式为:,H(x)= +,其中辅助函数hi(x)=(1-2li(xi)(x-xi)li2(x),i(x)=(x-xi)li2(x),li(x)为拉格郎日插值基函数,即li(x)=,式中i=0,1,2,n。,24,5.5 埃尔米特插值,n个插值节点带1阶导数的埃尔米特插值的算法,25,5.5 埃尔米特插值,n个插值节点带1阶导数的埃尔米特插值的程序(1/2),#include #define MAXSIZE 50 void input(double x,double f,double df,long n); void main(v
19、oid) double xMAXSIZE,fMAXSIZE,dfMAXSIZE,_x,_y,l,dl;long n,i,j;printf(“n请输入插值节点的个数:“); scanf(“%ld“,26,5.5 埃尔米特插值,n个插值节点带1阶导数的埃尔米特插值的程序(2/2),void input(double x,double f,double df,long n) long i;for(i=0;i=n-1;i+)printf(“n请输入插值节点x%ld,f%ld,df%ld:“,i,i,i);scanf(“%lf,%lf,%lf“, ,27,对于平滑的被插函数曲线,2次、3次代数插值往往比
20、1次代数插值的逼近程度更好,但并不是说代数插值的阶次越高,对被插函数的逼近程度就一定越好。,5.6 分段插值,代数插值阶次过高导致的插值节点之间逼近很差的现象称为龙格现象。,如果被插函数是代数多项式函数,那么阶次足够高的代数插值函数的余项为0;如果被插函数不是代数多项式函数,那么为了减小误差而盲目地增加代数插值函数的阶次是不合适的。因此,很少使用超过6次的代数插值。当插值节点较多时,一般采用分段插值。,分段插值是指把插值区间分为若干个子区间,在每个子区间上用较低阶次的代数插值函数逼近被插函数。常见的分段插值有分段线性插值和分段3次埃尔米特插值等等。,分段线性插值是指每2个相邻的插值节点构成1个
21、子区间,在每个子区间上做1次代数插值。插值函数的图形是一些首尾相连的直线段形成的折线,直线段的端点为插值节点。分段线性插值的几何意义是用这一折线逼近被插函数曲线。,28,本章介绍了以下代数插值方法: 1拉格郎日插值法。拉格郎日插值公式的含义较直观。在本章之后的某些章节还会用到它。 2牛顿插值法。实现牛顿插值需要用到差商。当增加插值节点时,牛顿插值能避免重复的计算。 牛顿插值函数与拉格郎日插值函数是一致的,只是构造插值插值函数的过程不同。 3牛顿差分插值法。在做等距节点插值时,差商演变为差分,牛顿插值简化为牛顿差分插值。 4埃尔米特插值法。本章只讨论带1阶导数的埃尔米特插值。2点3次埃尔米特插值较常用。 5分段代数插值法。它用于较大区间、较高精度的代数插值。 本章内容是第6章数值积分的基础。,第5章 插值法 小结,