函数(i=01,…,n)。 ln(x)可以表示为 ln(x)=∑y(x) x-x1,x∈[x1,x](=0时舍去) I,(x) ,x∈[x1,x1](=n时舍去) 其它 n(x)有良好的收敛性,即对于x∈[a,b]有, lim I(x)=f(x)。 用Ln(x)计算x点的插值时,只用到x左右的两个节点,计算量与节点个数n无关 但n越大,分段越多,插值误差越小。实际上用函数表作插值计算时,分段线性插值就 足够了,如数学、物理中用的特殊函数表,数理统计中用的概率分布表等 1.3.3用 Matlab实现分段线性插值 用 Matlab实现分段线性插值不需要编制函数程序, Matlab中有现成的一维插值函 数 y=interpl (xo, yo, x, 'method,) method指定插值的方法,默认为线性插值。其值可为 nearest'最近项插值 ' linear''线性插值 spline'逐段3次样条插值 cubic'保凹凸性3次插值。 所有的插值方法要求x0是单调的 当x0为等距时可以用快速插值法,使用快速插值法的格式为'* nearest'、"* linea * spline、" cubic'。 4埃尔米特( Hermite)插值 141 Hermite插值多项式 如果对插值函数,不仅要求它在节点处与函数同值,而且要求它与函数有相同的 阶、二阶甚至更高阶的导数值,这就是 Hermite插值问题。本节主要讨论在节点处插值 函数与函数的值及一阶导数值均相等的 Hermite插值。 设已知函数y=f(x)在n+1个互异节点x0,x1…xn上的函数值y1=f(x1) (i=0,1,…,n)和导数值y’;=∫(x)(i=0.1,…,n),要求一个至多2n+1次的多项式 H(x),使得 f(x,)=y1H(x)=y(i=0,1, 满足上述条件的多项式H(x)称为 Hermite插值多项式 Hermite插值多项式为
-180- 函数(i = 0,1,L,n) 。 I (x) n 可以表示为 ∑= = n i n i i I x y l x 0 ( ) ( ) ⎪ ⎪ ⎪ ⎩ ⎪ ⎪ ⎪ ⎨ ⎧ ∈ = − − ∈ = − − = + + + − − − 其它 时舍去 时舍去 , , ( ) ) 0 [ , ] , [ , ] ( 0 ( ) 1 1 1 1 1 1 x x x i n x x x x x x x i x x x x l x i i i i i i i i i i i I (x) n 有良好的收敛性,即对于 x∈[a,b]有, lim I (x) f (x) n n = →∞ 。 用 I (x) n 计算 x 点的插值时,只用到 x 左右的两个节点,计算量与节点个数n 无关。 但n 越大,分段越多,插值误差越小。实际上用函数表作插值计算时,分段线性插值就 足够了,如数学、物理中用的特殊函数表,数理统计中用的概率分布表等。 1.3.3 用 Matlab 实现分段线性插值 用 Matlab 实现分段线性插值不需要编制函数程序,Matlab 中有现成的一维插值函 数 interp1。 y=interp1(x0,y0,x,'method') method 指定插值的方法,默认为线性插值。其值可为: 'nearest' 最近项插值 'linear' 线性插值 'spline' 逐段 3 次样条插值 'cubic' 保凹凸性 3 次插值。 所有的插值方法要求 x0 是单调的。 当 x0 为等距时可以用快速插值法,使用快速插值法的格式为'*nearest'、'*linear'、 '*spline'、'*cubic'。 1.4 埃尔米特(Hermite)插值 1.4.1 Hermite 插值多项式 如果对插值函数,不仅要求它在节点处与函数同值,而且要求它与函数有相同的一 阶、二阶甚至更高阶的导数值,这就是 Hermite 插值问题。本节主要讨论在节点处插值 函数与函数的值及一阶导数值均相等的 Hermite 插值。 设已知函数 y = f (x) 在n +1个互异节点 n x , x , , x 0 1 L 上的函数值 ( ) i i y = f x (i = 0,1,L,n) 和导数值 ' '( ) i i y = f x (i = 0,1,L,n) ,要求一个至多2n +1次的多项式 H(x),使得 i i H(x ) = y i i H'(x ) = y' (i = 0,1,L,n) 满足上述条件的多项式 H(x)称为 Hermite 插值多项式。 Hermite 插值多项式为
H(x)=>hI(x-x)(2a,y-y)+y 其中h2= ∑ 142用 Matlab实现 Hermite插值 Matlab中没有现成的 Hermite插值函数,必须编写一个M文件实现插值。 设n个节点的数据以数组x0(已知点的横坐标),y0(函数值),yl(导数值) 输入(注意 Matlat的数组下标从1开始),m个插值点以数组x输入,输出数组y为m 个插值。编写一个名为 hermite. m的M文件: function y=hermite(x0, yo, yl, x)i n=length(x0)im=length(x)i for k=l: m yy=0.0 for i=l: n for j=l:n h=h+((x(k)-x0(j))/(x0(i)-x0(j)))^2; a=1/(x0(i)-x0(j) end yy=yy+h*((x0(1)-x(k))*(2*a*y0()-y1(i))+y0(i)) y(k)=yy end 15样条插值 许多工程技术中提出的计算问题对插值函数的光滑性有较高要求,如飞机的机翼外 形,内燃机的进、排气门的凸轮曲线,都要求曲线具有较高的光滑程度,不仅要连续, 而且要有连续的曲率,这就导致了样条插值的产生。 1.5.1样条函数的概念 所谓样条( Spline)本来是工程设计中使用的一种绘图工具,它是富有弹性的细木 条或细金属条。绘图员利用它把一些已知点连接成一条光滑曲线(称为样条曲线),并 使连接点处有连续的曲率。 数学上将具有一定光滑性的分段多项式称为样条函数。具体地说,给定区间[a,b 的一个分划 <x=b 如果函数s(x)满足 (i)在每个小区间[x1,x-1](=0,1,…,n-1)上s(x)是k次多项式 (i)s(x)在[a,b]上具有k-1阶连续导数。 则称s(x)为关于分划Δ的k次样条函数,其图形称为k次样条曲线。x0,x1…xn称为 样条节点,x12x2,…,xn1称为内节点,x0,x称为边界点,这类样条函数的全体记做 181
-181- ∑= = − − + n i i i i i i i H x h x x a y y y 0 ( ) [( )(2 ' ) ] 其中 ∏ ≠ = ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎝ ⎛ − − = n j i j i j j i x x x x h 0 2 , ∑ ≠ = − = n j i j i j i x x a 0 1 。 1.4.2 用 Matlab 实现 Hermite 插值 Matlab 中没有现成的 Hermite 插值函数,必须编写一个 M 文件实现插值。 设n 个节点的数据以数组 x0 (已知点的横坐标), y0 (函数值), y1(导数值) 输入(注意 Matlat 的数组下标从 1 开始),m 个插值点以数组 x 输入,输出数组 y 为m 个插值。编写一个名为 hermite.m 的 M 文件: function y=hermite(x0,y0,y1,x); n=length(x0);m=length(x); for k=1:m yy=0.0; for i=1:n h=1.0; a=0.0; for j=1:n if j~=i h=h*((x(k)-x0(j))/(x0(i)-x0(j)))^2; a=1/(x0(i)-x0(j))+a; end end yy=yy+h*((x0(i)-x(k))*(2*a*y0(i)-y1(i))+y0(i)); end y(k)=yy; end 1.5 样条插值 许多工程技术中提出的计算问题对插值函数的光滑性有较高要求,如飞机的机翼外 形,内燃机的进、排气门的凸轮曲线,都要求曲线具有较高的光滑程度,不仅要连续, 而且要有连续的曲率,这就导致了样条插值的产生。 1.5.1 样条函数的概念 所谓样条(Spline)本来是工程设计中使用的一种绘图工具,它是富有弹性的细木 条或细金属条。绘图员利用它把一些已知点连接成一条光滑曲线(称为样条曲线),并 使连接点处有连续的曲率。 数学上将具有一定光滑性的分段多项式称为样条函数。具体地说,给定区间[a,b] 的一个分划 Δ : a = x0 < x1 <L< xn−1 < xn = b 如果函数 s(x) 满足: (i)在每个小区间[ , ]( 0,1, , 1) xi xi−1 i = L n − 上 s(x) 是 k 次多项式; (ii) s(x) 在[a,b]上具有 k −1阶连续导数。 则称 s(x) 为关于分划 Δ 的k 次样条函数,其图形称为k 次样条曲线。 n x , x , , x 0 1 L 称为 样条节点, 1 2 1 , , , n− x x L x 称为内节点, n x , x 0 称为边界点,这类样条函数的全体记做
Sp(A,k),称为k次样条函数空间。 显然,折线是一次样条曲线 若S(x)∈S2(△,k),则s(x)是关于分划△的k次多项式样条函数。k次多项式样 条函数的一般形式为 B S (x-x,) 其中a(=0,1…,k)和B(=12,…,n-1)均为任意常数,而 x,) (x-x),x≥x 在实际中最常用的是k=2和3的情况,即为二次样条函数和三次样条函数 二次样条函数:对于[a,b上的分划△:a=x<x1<…<xn=b,则 S2(x) (x-x)+∈S(△,2) 其中(x-x)2= (x-x,),x2x (j=1,2,…,n-1)。 三次样条函数:对于[a,b上的分划A:a=x0<x1<…<xn=b,则 S(x)=a+a1x+2x2+2x2+∑(x-x)∈S2(△3), (6) ≥X 其中(x-x) ,(j=1,2,…,n-1)。 X<x 利用样条函数进行插值,即取插值函数为样条函数,称为样条插值。例如分段线性插值 是一次样条插值。下面我们介绍二次、三次样条插值 1.52二次样条函数插值 首先,我们注意到S2(x)∈Sp(△,2)中含有n+2个特定常数,故应需要n+2个插 值条件,因此,二次样条插值问题可分为两类: 问题(1): 已知插值节点x1和相应的函数值y(=0,1,…,n)以及端点x(或x)处的导数 值y(或yn),求S2(x)∈Sp(4,2)使得 s(x)=(=012…,n) s2(x)=y(或sn(x)=yn) 问题(2) 已知插值节点x和相应的导数值y(=0,1,2,…,m)以及端点x0(或xn)处的函 数值y(或yn),求S2(x)∈S2(△,2)使得 s2(x)=y(i=0,1,2,…,n) (8) s2(x0)=y(或s2(xn)=y)
-182- S ( , k) P Δ ,称为 k 次样条函数空间。 显然,折线是一次样条曲线。 若 s(x) S ( , k) ∈ P Δ ,则 s(x) 是关于分划 Δ 的 k 次多项式样条函数。k 次多项式样 条函数的一般形式为 ∑ ∑ − = + = = + − 1 0 1 ( ) ! ! ( ) n j k j j k i i i k x x i k x s x α β , 其中 (i 0,1, , k) αi = L 和 ( j = 1,2, , n −1) β j L 均为任意常数,而 ⎪⎩ ⎪ ⎨ ⎧ < − ≥ − + = j j k k j j x x x x x x x x 0, ( ) , ( ) ,( j = 1,2,L, n −1) 在实际中最常用的是 k = 2和 3 的情况,即为二次样条函数和三次样条函数。 二次样条函数:对于[a,b]上的分划 Δ : a = x0 < x1 <L< xn = b ,则 ∑ − = = + + + − + ∈ Δ 1 1 2 2 2 2 0 1 ( ) ( ,2) 2! 2! ( ) n j j P j s x x x x x S α β α α , (5) 其中 ⎪⎩ ⎪ ⎨ ⎧ < − ≥ − + = j j j j x x x x x x x x 0, ( ) , ( ) 2 2 ,( j =1,2,L, n −1)。 三次样条函数:对于[a,b]上的分划 Δ : a = x0 < x1 <L< xn = b ,则 ∑ − = = + + + + − + ∈ Δ 1 1 2 2 3 3 3 3 0 1 ( ) ( ,3) 2! 3! 3! ( ) n j j P j s x x x x x x S α α β α α , (6) 其中 ⎪⎩ ⎪ ⎨ ⎧ < − ≥ − + = j j j j x x x x x x x x 0, ( ) , ( ) 3 3 ,( j = 1,2,L, n −1)。 利用样条函数进行插值,即取插值函数为样条函数,称为样条插值。例如分段线性插值 是一次样条插值。下面我们介绍二次、三次样条插值。 1.5.2 二次样条函数插值 首先,我们注意到 ( ) ( ,2) s2 x ∈ SP Δ 中含有 n + 2个特定常数,故应需要 n + 2个插 值条件,因此,二次样条插值问题可分为两类: 问题(1): 已知插值节点 i x 和相应的函数值 y (i 0,1, , n) i = L 以及端点 0 x (或 n x )处的导数 值 0 y' (或 n y' ),求 ( ) ( ,2) s2 x ∈ SP Δ 使得 ⎩ ⎨ ⎧ = = = = ' ( ) ( ' ( ) ) ( ) ( 0,1,2, , ) 2 0 0 2 n n n i i s x y s x y s x y i n 或 L (7) 问题(2): 已知插值节点 i x 和相应的导数值 y' (i 0,1,2, ,n) i = L 以及端点 0 x (或 n x )处的函 数值 0 y (或 n y ),求 ( ) ( ,2) s2 x ∈ SP Δ 使得 ⎩ ⎨ ⎧ = = = = ( ) ( ( ) ) ' ( ) ' ( 0,1,2, , ) 2 0 0 2 2 n n i i s x y s x y s x y i n 或 L (8)
事实上,可以证明这两类插值问题都是唯一可解的。 对于问题(1),由条件(7) S2(x0) +-a S2(x1)=a0+a1x1+a2x=y1 s2(x)=a0+ax+a2x2+∑(x-x)2=y,(=2,3,…,m) S2(xo)=a,+a2o=y'o 引入记号X=(an、a12a2,月1…,Bn1)为未知向量,C=(y,y1…,yn,y0)为已 知向量。 0 x1=X1 A=1 0 (r, -x-D) 于是,问题转化为求方程组AX=C的解X=(a0,a,a2,B1…,Bn-)的问题, 即可得到二次样条函数S2(x)的表达式 对于问题(2)的情况类似。 1.53三次样条函数插值 由于S(x)∈S(A,3)中含有n+3个待定系数,故应需要n+3个插值条件,已知 插值节点x1和相应的函数值f(x)=y(=0,1,2,…,n),这里提供了n+1个条件,还 需要2个边界条件。 常用的三次样条函数的边界条件有3种类型: (i)s3(a)=y,s3(b)=yn。由这种边界条件建立的样条插值函数称为f(x)的 完备三次样条插值函数。 特别地,yo=y'n=0时,样条曲线在端点处呈水平状态 如果∫(x)不知道,我们可以要求s3(x)与∫(x)在端点处近似相等。这时以 x,x1,x2,x3为节点作一个三次 Newton插值多项式Nn(x),以xn,xn=1,xn2,xn=3作一 个三次 Newton插值多项式N6(x),要求 s'(a)=N,(a), s (b)=N,(b) 由这种边界条件建立的三次样条称为f(x)的 Lagrange三次样条插值函数。 (i)s"3(a)=y"o,S"3(b)=y"3。特别地yn=y"n=0时,称为自然边界条件
-183- 事实上,可以证明这两类插值问题都是唯一可解的。 对于问题(1),由条件(7) ⎪ ⎪ ⎪ ⎪ ⎩ ⎪ ⎪ ⎪ ⎪ ⎨ ⎧ = + = = + + + − = = = + + = = + + = ∑ − = 2 0 1 2 0 0 1 1 2 2 2 0 1 2 1 2 2 1 0 1 1 2 1 0 2 2 0 0 1 0 2 0 ' ( ) ' ( ) ( 2,3, , ) 2 1 2 1 ( ) 2 1 ( ) 2 1 ( ) s x x y s x x x x x y j n s x x x y s x x x y j i j j j i j i j α α α α α β α α α α α α L 引入记号 T X n ( , , , , , ) = α 0 α1 α 2 β1 L β −1 为未知向量, ( , , , , ' ) 0 1 0 C y y y y = L n 为已 知向量。 ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ − − = − − 0 1 0 0 ( ) 2 1 ( ) 2 1 2 1 1 ( ) 0 2 1 2 1 1 0 0 2 1 1 0 0 2 1 1 0 2 1 2 1 2 2 2 1 2 2 2 2 1 1 2 0 0 L L M M M M M L L L x x x x x x x x x x x x x x x A n n n n n 于是,问题转化为求方程组 AX = C 的解 T X n ( , , , , , ) = α 0 α1 α 2 β1 L β −1 的问题, 即可得到二次样条函数 ( ) 2 s x 的表达式。 对于问题(2)的情况类似。 1.5.3 三次样条函数插值 由于 ( ) ( ,3) s3 x ∈ SP Δ 中含有 n + 3 个待定系数,故应需要 n + 3 个插值条件,已知 插值节点 i x 和相应的函数值 f (x ) y (i 0,1,2, , n) i = i = L ,这里提供了 n +1个条件,还 需要 2 个边界条件。 常用的三次样条函数的边界条件有 3 种类型: (i) n s' (a) y' ,s' (b) y' 3 = 0 3 = 。由这种边界条件建立的样条插值函数称为 f (x)的 完备三次样条插值函数。 特别地, y' 0 = y' n = 0 时,样条曲线在端点处呈水平状态。 如果 f '(x) 不知道,我们可以要求 ' ( ) 3 s x 与 f '(x) 在端点处近似相等。这时以 0 1 2 3 x , x , x , x 为节点作一个三次 Newton 插值多项式 N (x) a ,以 1 2 3 , , , n n− n− n− x x x x 作一 个三次 Newton 插值多项式 N (x) b ,要求 s'(a) N' (a), s'(b) N' (b) = a = b 由这种边界条件建立的三次样条称为 f (x)的 Lagrange 三次样条插值函数。 (ii) 3 0 3 3 s" (a) = y" ,s" (b) = y" 。特别地 y"n = y"n = 0 时,称为自然边界条件