1、分段插值,我们已经知道插值有多种方法:Lagrange 插值、 Newton插值等方法。插值的目的就是数值逼近的一种手段,而数值逼近,为的是得到一个数学问题的精确解或足够精确的解。那么,是否插值多项式的次数越高(即插值节点越多),越能够达到这个目的呢?现在,我们来讨论一下这个问题。,6,一、高次插值的病态分析,1901年龙格(Runge) 给出一个例子:,我们已经知道:f(x)在n+1个节点x0, x1, xn 上的n次插值多项式Pn (x) 的余项为:,表达式上看,当节点数增多时,由插值余项可知,当f(x)充分光滑时,余项随n增大应该趋于0的,也就是说节点越多精度应该越高。那么实际情况是这样
2、吗?,定义在区间-1,1上函数,它的任意阶导数都存在,对应一条光滑曲线,对它在-1,1上作等距节点插值时,插值多项式情况如下图:,1901年龙格(Runge) 给出一个例子:定义在区间-1,1上,它的任意阶导数都存在,对应一条光滑曲线,对它在-1,1上作等距节点插值时,插值多项式情况如下图:,从图中可以看出,在靠近-1或1时,余项会随n的增大而增大,如|P12(0.96)|=36!但f(0.96)=0.0416,实验4.1(观察龙格(Runge)现象实验) 实验目的:观察拉格朗日插值的龙格(Runge)现象. 实验内容: 1、给出拉格朗日插值多项式的算法流程和相关程序; 2、对于函数 进行拉格
3、朗日插值,取不同的节点数,在区间-5,5上取等距间隔的节点为插值点,把f(x)和插值多项式的曲线画在同一张图上进行比较。(a可以取任意值)具体步骤: 1) a=1时, i)取n=4,作出f(x)和插值多项式的曲线图;ii)取n=10,作出f(x)和插值多项式的曲线图; 2)a=0.5时,i)取n=4,作出f(x)和插值多项式的曲线图;ii)取n=10,作出f(x)和插值多项式的曲线图; 3、分析上述曲线图,你可以得出什么结论?,在MATLAB命令窗口输入,x0=-5:2:5; y0=5./(1+x0.2); x=-5:0.1:5; y=lagrange(x0,y0,x); y1=5./(1+x
4、.2); plot(x,y,-r) hold on plot(x,y1,-b) hold off,n=5,n=5,从图中,可看出,在0附近插值效果是好的,即余项较小,另一种现象是插值多项式随节点增多而振动更大。,6,x0=-5:1:5; y0=5./(1+x0.2); x=-5:0.1:5; y=lagrange(x0,y0,x); y1=5./(1+x.2); plot(x,y,-r) hold on plot(x,y1,-b) hold off,n=10,x0=-5:2:5; y0=5./(1+x0.2); x=-5:0.1:5; y=lagrange(x0,y0,x); y1=5./(1
5、+x.2); plot(x,y,-r) hold on plot(x,y1,-b) hold off,n=5,n=10,从图中,可看出,在0附近插值效果是好的,即余项较小,另一种现象是插值多项式随节点增多而振动更大。,虽然P10(x)在11个插值节点上取与所逼近函数f(x)相同的值 ,但整体逼近效果较差,越靠近端点逼近的效果就越差。这种现象称为龙格(Runge)现象。,n=5,在MATLAB命令窗口输入,函数,的图象,x0=-5:2:5; y0=5./(1+x0.2); x=-5:0.1:5; y=lagrange(x0,y0,x); y1=5./(1+x.2); plot(x,y,-r) h
6、old on plot(x,y1,-b) hold off,(5等分区间),9,x0=-5:2.5:5;,(4等分区间),在MATLAB命令窗口输入,x0=-5:1:5; y0=5./(1+x0.2); x=-5:0.1:5; y=lagrange(x0,y0,x); y1=5./(1+x.2); plot(x,y,-r) hold on plot(x,y1,-b) hold off,11,n=10,12,1901年龙格(Runge) 给出一个例子:定义在区间-1,1上,它的任意阶导数都存在,对应一条光滑曲线,对它在-1,1上作等距节点插值时,插值多项式情况如下图:,从图中可以看出,在靠近-1
7、或1时,余项会随n的增大而增大,如|P12(0.96)|=36!但f(0.96)=0.0416,这个任意阶可导的函数(光滑曲线)之所以出现这种现象,跟它在复平面上有奇点有关: x=1/5是奇点。,上述现象和定理告诉我们,并不是插值多项式的次数越高(即插值节点越多)精度越高,从数值计算上可解释为高次插值多项式的计算会带来舍入误差的增大,从而引起计算失真。因此,实际应用做插值时一般只用一次、二次最多用三次插值多项式。 那么如何提高插值精度呢?采用分段插值是一种办法。,俄罗斯数学家伯恩斯坦在1916年还给出如下定理: 定理:函数f(x)=|x|在-1,1上取n+1个等距节点x0= -1, xn=1,
8、构造n次插值多项式Pn (x),当n增大时,除了-1,0,1三点外,在-1,1中任何点处Pn(x)都不收敛于|x|。(新教材P26定理5.1特例),二、分段线性插值,所谓分段线性插值就是在每个小区间xi,xi+1上应用线性插值,即在插值点用折线段连接起来逼近f(x),这样可避免龙格现象的发生。,分段线性插值曲线图,可以看出,如果以每个小区间的端点为插值节点的话,那么相邻区间的两个插值函数在节点处将保持连续。即P(x)是一连续函数,但在节点处一阶二阶导数并不一定连续。,实际上,用一分段不光滑的低次多项式去逼近f(x)比用任何光滑的高次多项式去逼近f(x)效果要好。,15,x0=-5:2.5:5;
9、 y0=5./(1+x0.2); x=-5:0.1:5; y1=5./(1+x.2); plot(x0,y0,*,x0,y0,x,y1,r),n=4,16,x0=-5:1:5; y0=1./(1+x0.2); x=-5:0.1:5; y1=1./(1+x.2); plot(x0,y0,*,x0,y0,x,y1,r),n=10,17,To MATLAB xch11,xch12,xch13,xch14,例,用分段线性插值法求插值,并观察插值误差.,1.在-6,6中平均选取5个点作插值(xch11),4.在-6,6中平均选取41个点作插值(xch14),2.在-6,6中平均选取11个点作插值(xch
10、12),3.在-6,6中平均选取21个点作插值(xch13),18,1.在-6,6中平均选取5个点作插值(xch11),19,2.在-6,6中平均选取11个点作插值(xch12),20,3.在-6,6中平均选取21个点作插值(xch13),21,4.在-6,6中平均选取41个点作插值(xch14),设f(x)在n+1个节点a=x0x1.xn=b上的函数值为 f(xk)= yk (k=0,1,2,.,n),1、分段线性插值的构造:,在每个小区间xk,xk+1(k=0,1,2,.,n)上作线性插值,即连接插值点(xk,yk,)与(xk+1,yk+1)的直线。若记L(x)为分段线性插值函数,L(x)
11、在每个小区间xk,xk+1上表达式为:,=lk(x)yk+lk+1(x)yk+1,(lk(x),lk+1(x)为以xk,xk+1为节点的插值基函数),(xkxxk+1),23,L(x)在每个小区间xk,xk+1上表达式为:,=lk(x)yk+lk+1(x)yk+1,(lk(x),lk+1(x)为以xk,xk+1为节点的插值基函数),(xkxxk+1),L(x)在每个小区间xk-1,xk上表达式为:,=lk-1(x)yk-1+lk(x)yk (xk-1xxk),(lk-1(x),lk(x)为以xk-1,xk为节点的插值基函数),L(x)在每个小区间xk-1,xk上表达式为:,=lk-1(x)yk
12、-1+lk(x)yk (xk-1xxk),(lk-1(x),lk(x)为以xk-1,xk为节点的插值基函数),L(x)在每个小区间xk,xk+1上表达式为:,=lk(x)yk+lk+1(x)yk+1,(lk(x),lk+1(x)为以xk,xk+1为节点的插值基函数),(xkxxk+1),其中,0, xa,b, x xk-1, xk+1,lk(x)=,称L(x)为f(x)的分段线性插值函数。,若用插值基函数表示,则L(x)在a,b上表达式,27,(x0xx1),(x1xx2),(xn-1xxn),28,计算量与n无关; n越大,误差越小.,分段插值函数就是连接xk,xk+1两节点的直线段,注2:
13、分段线性插值基函数lk(x)只在xk附近不为0,在其它地方均为0,这种性质称为局部非零性。当插值点有误差时,这种局部非零性质将误差控制在一个局部区域内。即误差不会随着节点的增加而扩散。,注1: L(x)显然满足以下条件: (1)L(x)在每个小区间xk,xk+1上是线性函数; (2) L(xk)=yk=f (xk) (k=0,1,2,.,n); (3) L(x)在插值区间a,b上为连续函数.,余项如何估计?,证明:由Lagrange 余项公式,当xxi, xi+1时|f(x)- L(x) |=|R(x)| = |f()(x-xi)(x- xi+1 )|/2!,定理:设f(x)在a,b上有二阶连
14、续导数f(x) ,且| f(x)| m2,记: h = max |xi+1-xi|, 则有估计式:,故|R(x)| m2*max|(x-xi)(x-xi+1)|/ 2m2h2/8 上式右端与小区间的位置无关,证毕。,令xi+1-xi=hi, x= xi+t hi , 0t1 则,(|hi|h),易证,当0 t 1时,|t(t-1)|的最大值为1/4,,2、分段插值的余项估计,注意: h(所有小区间长度最大者)与小区间的位置无关, 且随分段增多而减少,因此用分段插值法提高精度是很好的途径.,分段线性插值函数的误差估计式,对于分段线性插值,插值节点越多误差越小!,例:设 -1 x 1 (1)将-1
15、,1 10 等分,用分段线性插值近似计算f(-0.96)。 (2)将-1,1 n 等分,用分段线性插值近似计算,问如何选择步长h可使近似计算误差R10-4?,解:(1)插值节点为xi= -1+ i/5 (i=0,1,10),h=1/5 因为 -0.96-1,-0.8,取此区间为线性插值区间,其上的插值函数为,所以f(-0.96) L(-0.96)=0.04253,(2)插值节点为xi=-1+ ih (i=0,1,n),h=(b-a)/n=2/n 由分段线性插值的余项估计:,x=0时f (x)取最大值50,误差R10-4,34,例:设 -1 x 1 (1)将-1,1 10 等分,用分段线性插值近
16、似计算f(-0.96)。 (2)将-1,1 n 等分,用分段线性插值近似计算,问如何选择步长h可使近似计算误差R10-4?,(2)将-1,1 n 等分,用分段线性插值近似计算,问将-1,1区间 多少 等分可使近似计算误差R10-4?,n500,即,如何选择n可使近似计算误差R10-4?,*分段二次插值:选取跟x最近的三个节点xi-1,xi, xi+1进行二次插值,即在区间xi-1, xi+1,取:,这种分段的低次插值叫分段二次插值,在几何上就是用分段抛物线代替y=f(x),故分段二次插值又称分段抛物插值。,36,原始数据的散点图,x=0 1 2 3 4 5 6 7 8 9 10; y=1 2.
17、3 2.1 2 4.6 4.7 4.3 8.1 9.2 9.8 10.3; plot(x,y,*),实验:求下列数据的多项式插值函数,37,原始数据的折线图, plot(x,y,*,x,y),分段线性插值,思考:如何作分段的多项式插值函数?,38,分四段插值,3次,3次,2次,2次,39,40,x1=0 : 3 ;y1=1 2.3 2.1 2; x0=0:0.1:3; y0=lagrange(x1,y1,x0) x2=3 : 6 ;y2= 2 4.6 4.7 4.3 ;x20=3:0.1:6; y20=lagrange(x,y,x20); x3= 6 :8;y3= 4.3 8.1 9.2;x3
18、0=6:0.1:8; y30=lagrange(x3,y3,x30); x4= 8 : 10;y4= 9.2 9.8 10.3;x40=8:0.1:10; y40=lagrange(x4,y4,x40); plot(x0,y0,-r,x1,y1,*,x20,y20,-r,x2,y2,*,x30,y30,-r,x3,y3,*,x40,y40,-r,x4,y4,*),41,分四段插值,3次,3次,2次,2次,42,用MATLAB作插值计算,一维插值函数:,y=interp1(xi,yi,x,method),nearest :最邻近插值linear :分段线性插值; spline : 三次样条插值
19、cubic : 立方插值。 缺省时: 分段线性插值,注意:所有的插值方法都要求xi是单调的,并且x不能够超过xi的范围,即:x1x2xn,且 minxixmaxxi,43,原始数据的折线图, plot(x,y,*,x,y),分段线性插值,44,45,分四段插值,3次,3次,2次,2次,46,To MATLAB xch11,xch12,xch13,xch14,例,用分段线性插值法求插值,并观察插值误差.,1.在-6,6中平均选取5个点作插值(xch11),4.在-6,6中平均选取41个点作插值(xch14),2.在-6,6中平均选取11个点作插值(xch12),3.在-6,6中平均选取21个点作
20、插值(xch13),47,48,例:在1-12的11小时内,每隔1小时测量一次温度,测得的温度依次为:5,8,9,15,25,29,31,30,22,25,27,24。试估计每隔1/10小时的温度值。,To MATLAB (temp),hours=1:12; temps=5 8 9 15 25 29 31 30 22 25 27 24; h=1:0.1:12; t=interp1(hours,temps,h,spline); %三次样条插值 plot(hours,temps,+,h,t,hours,temps,r:) %作图 xlabel(Hour),ylabel(Degrees Celsiu
21、s),49, temps=5 8 9 15 25 29 31 30 22 25 27 24; hours=1:12; temps=5 8 9 15 25 29 31 30 22 25 27 24; h=1:0.1:12; t=interp1(hours,temps,h,spline); plot(hours,temps,+,h,t,hours,temps,r:) xlabel(Hour),ylabel(Degrees Celsius),摄氏温度,50,51,例 已知飞机下轮廓线上数据如下,求x每改变0.1时的y值。,To MATLAB(plane),返回,52,实验4.2 分段插值实验 实验目
22、的:分段插值计算,会使用一维插值函数 ,寻找最佳的插值方法。 实验内容:在112的11小时内,每隔1小时测量一次温度,测得的温度依次为:5,8,9,15,25,29,31,30,22,25,27,24。 1)试估计每隔1/10小时的温度值.(某小时内) 2)分别用分段线性插值,立方插值,三次样条插值和最邻近插值估计其值。,作业:P108 9,53,实际上,上面介绍的分段低次插值,虽然具有计算简便,收敛性有保证,数值稳定性又好且易在计算机上实现等优点,但它却不能保证整条曲线的光滑性,从而不能满足某些工程技术上的要求,从六十年代开始,首先由于航空、造船等工程设计的需要而发展起来的Hermite插值
23、和样条插值(spline)等方法,它们既保留了分段低次插值的各种优点,又提高了插值函数的光滑性,在许多领域显得越来越广泛的应用。,作业:P108 9,54,其中,0, xa,b, x xk-1, xk+1,lk(x)=,称L(x)为f(x)的分段线性插值函数。,分段线性插值多项式L(x)在a,b上表达式,上节课内容回顾,l(x)称为插值基函数,55,(x0xx1),(x1xx2),(xn-1xxn),n越大,误差越小.,56,注意: h(所有小区间长度最大者)与小区间的位置无关, 且随分段增多而减少,因此用分段插值法提高精度是很好的途径.,分段线性插值函数的误差估计式,| f(x)| m2,,h = max |xi+1-xi|,,等距节点:n等分区间,