第九章插值与拟合 插值:求过已知有限个数据点的近似函数。 合:已知有限个数据点,求近似函数,不要求过已知数据点,只要求在某种意义 这些点上的总偏差最小 插值和拟合都是要根据一组数据构造一个函数作为近似,由于近似的要求不同,二 者的数学方法上是完全不同的。而面对一个实际问题,究竟应该用插值还是拟合,有时 容易确定,有时则并不明显。 §1插值方法 下面介绍几种基本的、常用的插值:拉格朗日多项式插值、牛顿插值、分段线性插 值、 Hermite插值和三次样条插值。 1.1拉格朗日多项式插值 1.1.1插值多项式 用多项式作为研究插值的工具,称为代数插值。其基本问题是:已知函数∫(x)在 区间[a,b上n+1个不同点x0,x1…,xn处的函数值y;=f(x1)(i=0,1,…,n),求一个 至多n次多项式 qn(x)=ao+a1x+…+anx 使其在给定点处与∫(x)同值,即满足插值条件 qn(x)=f(x)=y1(=0,1…,n) φn(x)称为插值多项式,x(=0,1,…n)称为插值节点,简称节点,[a,b]称为插值区 间。从几何上看,n次多项式插值就是过n+1个点(x,f(x,)(i=0,1,…,n),作一条 多项式曲线y=n(x)近似曲线y=f(x)。 n次多项式(1)有n+1个待定系数,由插值条件(2)恰好给出n+1个方程 do +axo taro t.+anxo =yo 10+a1x1+a2x anI=VI ao+a,r, +a2x2+ .+a,rm=y 记此方程组的系数矩阵为A,则 det(a) 是范德蒙特( Vandermonde)行列式。当x0,x1…,xn互不相同时,此行列式值不为零。因 此方程组(3)有唯一解。这表明,只要n+1个节点互不相同,满足插值要求(2)的 插值多项式(1)是唯一的 插值多项式与被插函数之间的差 R, (x)=f(x)-p (x)
-175- 第九章 插值与拟合 插值:求过已知有限个数据点的近似函数。 拟合:已知有限个数据点,求近似函数,不要求过已知数据点,只要求在某种意义 下它在这些点上的总偏差最小。 插值和拟合都是要根据一组数据构造一个函数作为近似,由于近似的要求不同,二 者的数学方法上是完全不同的。而面对一个实际问题,究竟应该用插值还是拟合,有时 容易确定,有时则并不明显。 §1 插值方法 下面介绍几种基本的、常用的插值:拉格朗日多项式插值、牛顿插值、分段线性插 值、Hermite 插值和三次样条插值。 1.1 拉格朗日多项式插值 1.1.1 插值多项式 用多项式作为研究插值的工具,称为代数插值。其基本问题是:已知函数 f (x)在 区间[a,b]上n +1个不同点 n x , x , , x 0 1 L 处的函数值 ( ) i i y = f x (i = 0,1,L,n) ,求一个 至多n 次多项式 n n n x = a + a x +L+ a x 0 1 ϕ ( ) (1) 使其在给定点处与 f (x)同值,即满足插值条件 (x ) f (x ) y (i 0,1, ,n) ϕ n i = i = i = L (2) (x) ϕ n 称为插值多项式,x (i 0,1, ,n) i = L 称为插值节点,简称节点,[a,b]称为插值区 间。从几何上看,n 次多项式插值就是过n +1个点( , ( )) i i x f x (i = 0,1,L,n) ,作一条 多项式曲线 y (x) = ϕ n 近似曲线 y = f (x) 。 n 次多项式(1)有n +1个待定系数,由插值条件(2)恰好给出n +1个方程 ⎪ ⎪ ⎩ ⎪ ⎪ ⎨ ⎧ + + + + = + + + + = + + + + = n n n n n n n n n n a a x a x a x y a a x a x a x y a a x a x a x y L LLLLLLLLLLLL L L 2 0 1 2 1 1 2 0 1 1 2 1 0 0 2 0 1 0 2 0 (3) 记此方程组的系数矩阵为 A ,则 n n n n n n x x x x x x x x x A L LLLLLLL L L 2 1 2 1 1 0 2 0 0 1 1 1 det( ) = 是范德蒙特(Vandermonde)行列式。当 n x , x , , x 0 1 L 互不相同时,此行列式值不为零。因 此方程组(3)有唯一解。这表明,只要n +1个节点互不相同,满足插值要求(2)的 插值多项式(1)是唯一的。 插值多项式与被插函数之间的差 R (x) f (x) (x) n = −ϕ n
称为截断误差,又称为插值余项。当∫(x)充分光滑时, R, (x)=f(x)-L,(x) (n+1))On1(x),s∈(a,b) 其中On1(x)=1(x-x,) 1.12拉格朗日插值多项式 实际上比较方便的作法不是解方程(3)求待定系数,而是先构造一组基函数 (x2-x0)…(x1-x11)(x1-x1+1)…(x1-xn) (i=0,1,…,n) l,(x)是n次多项式,满足 1(x)= L(3)=()=∑ (4) j=0 上式称为n次 Lagrange插值多项式,由方程(3)解的唯一性,n+1个节点的n次 Lagrange插值多项式存在唯一。 1.13用 Matlab作 Lagrange插值 Matlab中没有现成的 Lagrange插值函数,必须编写一个M文件实现 Lagrange插值。 设n个节点数据以数组x0,y0输入(注意 Matlat的数组下标从1开始),m个插值 点以数组x输入,输出数组y为m个插值。编写一个名为 lagrange. n的M文件: function y=lagrange(x0, y0, x)i n=length (x0)im=length(x)i z=x(i) for k=l: n for j=l: n p=p*(z-x0(j))/(x0(k)-x0(j)) end s=p*yo(k)+si end
-176- 称为截断误差,又称为插值余项。当 f (x)充分光滑时, ( ), ( , ) ( 1)! ( ) ( ) ( ) ( ) 1 ( 1) x a b n f R x f x L x n n n n ∈ + = − = + + ω ξ ξ 其中 ∏= + = − n j n j x x x 0 1 ω ( ) ( )。 1.1.2 拉格朗日插值多项式 实际上比较方便的作法不是解方程(3)求待定系数,而是先构造一组基函数 ( ) ( )( ) ( ) ( ) ( )( ) ( ) ( ) 0 1 1 0 1 1 i i i i i i n i i n i x x x x x x x x x x x x x x x x l x − − − − − − − − = − + − + L L L L , ( 01 ) 0 i , , ,n x x x x n j i j i j j = L − − =∏ ≠ = l (x) i 是n 次多项式,满足 ⎩ ⎨ ⎧ = ≠ = j i j i l x i j 1 0 ( ) 令 ∑ ∑∏ = = ≠ = ⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎝ ⎛ − − = = n i n i n j i j i j j n i i i x x x x L x y l x y 0 00 ( ) ( ) (4) 上式称为n 次 Lagrange 插值多项式,由方程(3)解的唯一性,n +1个节点的n 次 Lagrange 插值多项式存在唯一。 1.1.3 用 Matlab 作 Lagrange 插值 Matlab 中没有现成的 Lagrange 插值函数,必须编写一个 M 文件实现 Lagrange 插值。 设n 个节点数据以数组 x0, y0输入(注意 Matlat 的数组下标从 1 开始),m 个插值 点以数组 x 输入,输出数组 y 为m 个插值。编写一个名为 lagrange.m 的 M 文件: function y=lagrange(x0,y0,x); n=length(x0);m=length(x); for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k p=p*(z-x0(j))/(x0(k)-x0(j)); end end s=p*y0(k)+s; end y(i)=s; end
插值 在导出 Newton公式前,先介绍公式表示中所需要用到的差商、差分的概念及性质。 12.1差商 定义设有函数∫(x),x0,x1 为一系列互不相等的点,称 f(x)-f(x (≠为f(x)关于点x,x,一阶差商(也称均差)记为∫[x,x,] f(x)-f(x,) fIx,, 称一阶差商的差商 fIx x]-f[x, xk] 为f(x)关于点x,x,x的二阶差商,记为fx,x,x]。一般地,称 为f(x)关于点x0,x1…,xk的k阶差商,记为 ∫xnx…J[x,x1…,x--fx2x…,x Ro-x 容易证明,差商具有下述性质 fi,x]=fIxi xi fx,x xk]=f[i,xk, x]=fIx,x,xgI 122 Newton插值公式 线性插值公式可表成 q1(x)=f(x0)+(x-x0)f[x0,x1] 称为一次 Newton插值多项式。一般地,由各阶差商的定义,依次可得 f(x)=f(o) x,Io f[x,x]=f[x0,x1]+(x-x1)[x,x,x1] f[x,x0,x1]=f[x,x1,x2]+(x-x2)f[x,x0,x12x2 ∫[x,x…,xn]=f[x,x,…,xn]+(x-xn)f[x,x0,…,xn] 将以上各式分别乘以1,(x-x0),(x-x0)(x-x1)…,(x-x0)(x-x1)…(x-xm1),然 后相加并消去两边相等的部分,即得 f(x)=f(x0)+(x-x0)f[x0,x1]+ +(x-x0(x-x1)…(x-xn1)[x0,x1,…,xn] +(x-x0(x-x1)…(x-xn)f[x,x0,x1
-177- 1.2 牛顿(Newton)插值 在导出 Newton 公式前,先介绍公式表示中所需要用到的差商、差分的概念及性质。 1.2.1 差商 定义 设有函数 f (x), x0 , x1, x2 ,L为一系列互不相等的点,称 i j i j x x f x f x − ( ) − ( ) (i ≠ j) 为 f (x)关于点 i j x , x 一阶差商(也称均差)记为 [ , ] i j f x x ,即 i j i j i j x x f x f x f x x − − = ( ) ( ) [ , ] 称一阶差商的差商 i k i j j k x x f x x f x x − [ , ]− [ , ] 为 f (x)关于点 i j k x , x , x 的二阶差商,记为 [ , , ] i j k f x x x 。一般地,称 k k k x x f x x x f x x x − − − 0 0 1 1 1 2 [ , ,L, ] [ , ,L, ] 为 f (x)关于点 k x , x , , x 0 1 L 的k 阶差商,记为 k k k k x x f x x x f x x x f x x x − − = − 0 0 1 1 1 2 0 1 [ , , , ] [ , , , ] [ , , , ] L L L 容易证明,差商具有下述性质: [ , ] [ , ] i j j i f x x = f x x [ , , ] [ , , ] [ , , ] i j k i k j j i k f x x x = f x x x = f x x x 1.2.2 Newton 插值公式 线性插值公式可表成 ( ) ( ) ( ) [ , ] 1 0 0 0 1 ϕ x = f x + x − x f x x 称为一次 Newton 插值多项式。一般地,由各阶差商的定义,依次可得 ( ) ( ) ( ) [ , ] 0 0 0 f x = f x + x − x f x x [ , ] [ , ] ( ) [ , , ] 0 0 1 1 0 1 f x x = f x x + x − x f x x x [ , , ] [ , , ] ( ) [ , , , ] 0 1 0 1 2 2 0 1 2 f x x x = f x x x + x − x f x x x x LL [ , , , ] [ , , , ] ( ) [ , , , ] 0 n 1 0 1 n n 0 n f x x L x = f x x L x + x − x f x x L x − 将以上各式分别乘以1,( ),( )( ), , x − x0 x − x0 x − x1 L ( )( ) ( ) − 0 − 1 − n−1 x x x x L x x ,然 后相加并消去两边相等的部分,即得 ( )( ) ( ) [ , , , , ] ( )( ) ( ) [ , , , ] ( ) ( ) ( ) [ , ] 0 1 0 1 0 1 1 0 1 0 0 0 1 n n n n x x x x x x f x x x x x x x x x x f x x x f x f x x x f x x L L L L L + − − − + − − − = + − + − 记
N(x)=f(x0)+(x-x0)[x0,x]+ +(x-x0)(x-x1)…(x-xn-1)f[x0,x1,…,xn Rn(x)=(x-x)(x-x)…(x-xn)[x,x0,x1…,xn] On+1(x)[x,x0,x1…,xn] 显然,N2(x)是至多n次的多项式,且满足插值条件,因而它是f(x)的n次插值 多项式。这种形式的插值多项式称为 Newton插值多项式。Rn(x)称为 Newton插值余 项 Newton插值的优点是:每增加一个节点,插值多项式只增加一项,即 Nn1(x)=Nn(x)+(x-x0)…(x-xn)[x0,x1,…,xn] 因而便于递推运算。而且 Newton插值的计算量小于 Lagrange插值。 由插值多项式的唯一性可知, Newton插值余项与 Lagrange余项也是相等的,即 R (x)=Om+(x)fLx,xo, xu, .,x,] (n+1)!““ )5∈(a,b) 由此可得差商与导数的关系 f(s ni 其中5∈(a,B),a=min{x1},B=max{x;}。 123差分 当节点等距时,即相邻两个节点之差(称为步长)为常数, Newton插值公式的形 式会更简单。此时关于节点间函数的平均变化率(差商)可用函数值之差(差分)来表 定义设有等距节点x=x0+bh(k=0,1,…,n),步长h为常数,f=f(xk)。 称相邻两个节点x,xk+处的函数值的增量f+-f(k=0,1,…,n-1)为函数f(x)在 点x处以h为步长的一阶差分,记为AA,即 Afk=fk1-fK 类似地,定义差分的差分为高阶差分。如二阶差分为 △f=△k4-Mk(k=0,1;…,n-2) 一般地,m阶差分为 △"fk=△"fk+1-△"f(k=2,3,…), 上面定义的各阶差分又称为向前差分。常用的差分还有两种: V=fr -K 称为f(x)在xk处以h为步长的向后差分; 8s=fx 称为f(x)在x处以h为步长的中心差分。一般地,m阶向后差分与m阶中心差分公 式为
-178- ( ) [ , , , , ] ( ) ( )( ) ( ) [ , , , , ] ( )( ) ( ) [ , , , ] ( ) ( ) ( ) [ , ] 1 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 n n n n n n n n x f x x x x R x x x x x x x f x x x x x x x x x x f x x x N x f x x x f x x L L L L L L + − = = − − − + − − − = + − + ω 显然,N (x) n 是至多n 次的多项式,且满足插值条件,因而它是 f (x)的n 次插值 多项式。这种形式的插值多项式称为 Newton 插值多项式。 R (x) n 称为 Newton 插值余 项。 Newton 插值的优点是:每增加一个节点,插值多项式只增加一项,即 ( ) ( ) ( ) ( ) [ , , , ] n+1 = n + − 0 − n 0 1 n+1 N x N x x x L x x f x x L x 因而便于递推运算。而且 Newton 插值的计算量小于 Lagrange 插值。 由插值多项式的唯一性可知,Newton 插值余项与 Lagrange 余项也是相等的,即 ( ) ( , ) ( 1)! ( ) ( ) ( ) [ , , , , ] 1 ( 1) 1 0 1 x a b n f R x x f x x x x n n n n n ∈ + = = + + + ω ξ ξ ω L 由此可得差商与导数的关系 ! ( ) [ , , , ] ( ) 0 1 n f f x x x n n ξ L = 其中 ( , ), min{ }, max{ } 0 0 i i n i i n x x ≤ ≤ ≤ ≤ ξ ∈ α β α = β = 。 1.2.3 差分 当节点等距时,即相邻两个节点之差(称为步长)为常数,Newton 插值公式的形 式会更简单。此时关于节点间函数的平均变化率(差商)可用函数值之差(差分)来表 示。 定义 设有等距节点 ( 0,1, , ) xk = x0 + kh k = L n ,步长 h 为常数, ( ) k k f = f x 。 称相邻两个节点 1 , k k + x x 处的函数值的增量 ( 0,1, , 1) f k +1 − f k k = L n − 为函数 f (x) 在 点 k x 处以h 为步长的一阶差分,记为 k Δf ,即 ( 0,1, , ) Δf k = f k +1 − f k k = L n 类似地,定义差分的差分为高阶差分。如二阶差分为 ( 0,1, , 2) 1 2 Δ f k = Δf k + − Δf k k = L n − 一般地,m 阶差分为 ( 2,3, ) 1 1 Δm f k = Δm−1 f k + − Δm− f k k = L , 上面定义的各阶差分又称为向前差分。常用的差分还有两种: ∇ k = k − k −1 f f f 称为 f (x)在 k x 处以h 为步长的向后差分; ⎟ ⎠ ⎞ ⎜ ⎝ ⎛ ⎟ − − ⎠ ⎞ ⎜ ⎝ ⎛ = + 2 2 h f x h f f x δ k k k 称为 f (x) 在 k x 处以 h 为步长的中心差分。一般地, m 阶向后差分与 m 阶中心差分公 式为
r=Vm-lfk-Vm-fk d"f=o″-f 差分具有以下性质 (i)各阶差分均可表成函数值的线性组合,例如 A"f=∑(-)|.m v"=∑(-1)|f (i)各种差分之间可以互化。向后差分与中心差分化成向前差分的公式如下 fk=△"f d"fk=△ 124等距节点插值公式 如果插值节点是等距的,则插值公式可用差分表示。设已知节点 xk=x+hh(k=0,1,2,…,m),则有 Nn(x)=f(x0)+[x0,x1](x-x0) +…+∫[Lx0,x1…,xn](x-x0x-x1)…(x-xn-1) f △"f0 (x-x0)+……+ (x-x0)(x-x1)…( h nl h 若令x=x+h,则上式又可变形为 N(xo+h)=J+1△o+…+ r(t-1)…(t-n+1) △"f0 n 上式称为 Newton向前插值公式 13分段线性插值 13.1插值多项式的振荡 用 Lagrange插值多项式Ln(x)近似f(x)(a≤x≤b),虽然随着节点个数的增加, Ln(x)的次数n变大,多数情况下误差|Rn(x)会变小。但是n增大时,Ln(x)的光滑 性变坏,有时会出现很大的振荡。理论上,当n→∞,在,b内并不能保证Ln(x)处 处收敛于f(x)。 Runge给出了一个有名的例子 x∈ 对于较大的|x|,随着n的增大,Ln(x)振荡越来越大,事实上可以证明,仅当|x3.63 时,才有 lim L(x)=f(x),而在此区间外,Ln(x)是发散的。 高次插值多项式的这些缺陷,促使人们转而寻求简单的低次多项式插值。 13.2分段线性插值 简单地说,将每两个相邻的节点用直线连起来,如此形成的一条折线就是分段线性 插值函数,记作l(x),它满足n(x1)=y,且l(x)在每个小区间[x,x+1]上是线性
-179- 1 1 1 − − − ∇ = ∇ − ∇ k m k m k m f f f 2 1 1 2 1 1 − − + − = − k m k m k m δ f δ f δ f 差分具有以下性质: (i)各阶差分均可表成函数值的线性组合,例如 k m j m j j k m f j m f + − = ∑ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎝ ⎛ Δ = (−1) 0 k j m j j k m f j m f − = ∑ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎝ ⎛ ∇ = (−1) 0 (ii)各种差分之间可以互化。向后差分与中心差分化成向前差分的公式如下: k m m k m f f ∇ = Δ − 2 m k m k m f f − δ = Δ 1.2.4 等距节点插值公式 如果插值节点是等距的,则插值公式可用差分表示。设已知节点 xk = x0 + kh (k = 0,1,2,L,n),则有 ( )( ) ( ) ! ( ) [ , , , ]( )( ) ( ) ( ) ( ) [ , ]( ) 0 1 1 0 0 0 0 0 1 0 1 1 0 0 1 0 − − − − − Δ − + + Δ = + + + − − − = + − n n n n n n x x x x x x n h f x x h f f f x x x x x x x x x N x f x f x x x x L L L L L 若令 x = x0 + th ,则上式又可变形为 0 0 0 0 ! ( 1) ( 1) ( ) f n t t t n N x th f t f n n Δ − − + + = + Δ + + L L 上式称为 Newton 向前插值公式。 1.3 分段线性插值 1.3.1 插值多项式的振荡 用 Lagrange 插值多项式 L (x) n 近似 f (x)(a ≤ x ≤ b) ,虽然随着节点个数的增加, L (x) n 的次数n 变大,多数情况下误差| R (x) | n 会变小。但是n 增大时, L (x) n 的光滑 性变坏,有时会出现很大的振荡。理论上,当n → ∞ ,在[a,b]内并不能保证 L (x) n 处 处收敛于 f (x)。Runge 给出了一个有名的例子: , [ 5,5] 1 1 ( ) 2 ∈ − + = x x f x 对于较大的| x |,随着n 的增大,L (x) n 振荡越来越大,事实上可以证明,仅当| x |≤ 3.63 时,才有 lim L (x) f (x) n n = →∞ ,而在此区间外, L (x) n 是发散的。 高次插值多项式的这些缺陷,促使人们转而寻求简单的低次多项式插值。 1.3.2 分段线性插值 简单地说,将每两个相邻的节点用直线连起来,如此形成的一条折线就是分段线性 插值函数,记作 I (x) n ,它满足 n i i I (x ) = y ,且 I (x) n 在每个小区间[ , ] i i+1 x x 上是线性