§ 2 插值公式
一、 不等距节点插值公式(差商插值多项式)
已 知 单 变 量 函 数
f(x)
的n+1
个 节 点x
0, x
1, x
2, , x
n 及 其 对 应 的 函 数 值y
k f ( x
k) ),
, , 2 , 1 , 0
( k n
对于插值区间}]
{ max }, { min
[
0 0 in i i n
i
x x
上任一点
x,函数值 f(x)可按下面的差商插值多项式计算:
) ( ) (
) )(
(
) )(
( )
( )
( ) ( ) (
1 1
0 ,
, 2 , 1 , 0
1 0
2 , 1 , 0 0 1 , 0 0
x R x
x x x x x y
x x x x y x x y y x R x P x f
n n
n n n
式中
y
0,1, y
0,1,2 , y
0,1,2,,n分别为{ y
0, y
1, , y
n}
的一阶差商,二阶差商,...,n
阶差商。可按下 列程序从左到右逐列进行计算∶x
ky
k 一阶差商 二阶差商 三阶差商… n
阶差商x
0x
1x
2x
3
1
x
nx
ny
0y
1y
2y
3
1
y
ny
n1 ,
y
0 2 ,y
1 3 ,y
2
1 , 2
n
y
n ny
n1,2 , 1 ,
y
03 , 2 ,
y
1
1 , 2 ,
3
n n
y
nn n
y
n2, 1,3 , 2 , 1 ,
y
0
1 , 2 , 3 ,
4
n n n
y
nn n n
y
n3, 2, 1,…
y
0,1,2,,n表中一阶差商
i i
i i i
i
x x
y y y
1 1 1
,
( i 0 , 1 , , n 1 )
二阶差商
i i
i i i i i i
i
x x
y y y
2
1 , 2 , 1 2 , 1
,
( i 0 , 1 , , n 2 )
三阶差商
i i
i i i i i i i i i
i
x x
y y y
3
2 , 1 , 3 , 2 , 1 3 , 2 , 1
,
( i 0 , 1 , , n 3 )
………
n
阶差商0 1 , , 2 , 1 , 0 , , 2 , 1 , , 2 , 1 ,
0
x x
y y y
n
n n
n
差商插值多项式中的余项
( )( ) ( ) )!
1 (
) ) (
(
0 1) 1 (
n n
n
x x x x x x
n x f
R
m i n { } m a x { }
0
0 i
n i i
n
i
x x
余项也可以写成
R
n( x ) y
x,0,1,,n( x x
0)( x x
1) ( x x
n)
式中
y
x,0,1,,n表示{ y , y
0, y
1, , y
n}
的n+1
阶差商。对于由测量给出函数的某些值或分析式子比 较复杂的函数用这种余项较为方便。差商插值多项式显然满足
P ( x
k) f ( x
k) y
k( k 0 , 1 , 2 , , n )
具体插值计算步骤如下:首先由
y
k f ( x
k), k 0 , 1 , 2 , , n ,
按差商表计算出各阶差商,然后对给定的插值区间内一 点a,算出 ( a x
k)
,k 1 , 2 , n 1 ,
则0 0 1
, 0 4
3 , , 2 , 1 , 0
3 2
, , 2 , 1 , 0 2 1
, 2 , 1 , 0 1 ,
, 2 , 1 , 0
) }(
) }(
) }(
) ](
) (
{{[
{ ) ( ) (
y x a y x
a y
x a y
x a y
x a y
a P a f
n n
n n
n n
n n n
二、 等距节点插值公式(差分公式)
[向前差分与向后差分] 已知函数
f(x)在等距节点
x
k x
0 kh
( k 0 , 1 , 2 , , n )
的值为
y
k f ( x
k)
( k 0 , 1 , 2 , , n )
其差分按下式计算一阶差分
y
i y
i1 y
i( i 0 , 1 , 2 , , ( n 1 ))
二阶差分
2y
i y
i1 y
i y
i2 2 y
i1 y
i( i 0 , 1 , 2 , , ( n 2 ))
………
k
阶差分
kj
j k i j i
k i k i
k
y
j y k
y y
0 1
1
1
( 1 )
( i 0 , 1 , 2 , , ( n k ))
符号 y
i称为向前差分。此外还可引进符号 y
i,它们的定义是
y
i y
i y
i1 y
i1,
ry
i (
r1y
i)
符号 y
i称为向后差分。向前差分和向后差分之间的关系为
ry
i
ry
ir [差分表]x y y
2y
3y
4y
2
x
2
y
3
y
3
2
y
4y
4N
21
x
x
0x
1x
2x
3
1
y
y
0y
1y
2y
3
2
y
1
y
y
0
y
1
y
2
2 2
y
1 2
y
0 2
y
1 2
y
2 2
y
3 3
y
2 3
y
1 3
y
0 3
y
1 3
y
3
4
y
2 4
y
1 4
y
0 4
y
S B
N
1[牛顿第一插值公式(牛顿向前插值公式)]
节 点
x
0, x
1 x
0 h , , x
n x
0 nh
( h 0
为步长)插 值 点
h x u x
uh x
x
0,
0
(0<u<1)插值公式
f ( x ) N
1( x ) R
n( x )
1 0 0 2 0 3 0 0
3
) 2
( y
n y u
y u y u
u y x
N
n
余 项
( ) ) 1
(
1 ( 1)
n nn
h f
n x u
R
( x
0 x
n)
式中
n
u
为二项系数。适用范围 通常用于计算插值区间的始点
x
0附近的函数值。[牛顿第二插值公式(牛顿向后插值公式)]
节 点
x
0, x
1 x
0 h , , x
n x
0 nh
(h>0)
插 值 点h x u x
uh x
x
0,
0插值公式
f ( x ) N
2( x ) R
n( x )
n n
y
nn y u
y u y u
u y x
N
! ) (
! 3
) (
! 2
) ) (
(
0 1 2 2 2 3 3 32
余 项
( )
)!
1 (
) ) (
(
1 1 ( 1)
n n nn
h f
n x u
R
( x
0 nh x
0)
式中
( u )
k u ( u 1 ) ( u k 1 )
用向后差分时2 0 0 2 2 0 3 3 0 0
! ) (
! 3
) (
! 2
) ) (
( y
n y u
y u y u
u y x
N
n
n适用范围 通常用于计算插值区间的终点
x
n附近的函数值。[斯特林插值公式]
节 点
x
k x
0 kh
( k 0 , 1 , 2 , , n , h 0 )
插 值 点h x u x
uh x
x
0,
0
插值公式
f ( x ) S ( x ) R
2n( x )
n n
n n n
n
n y
n u u
u u
y y
n
n u u
u u
u y u y y
u u
u y y u y
y x S
2 2 2
2 2
2
1 2 ) 1 ( 1 2 2 2
2 2
2 4 2
2 2 3 1 3 2
1 2 2 1 0 0
)!
2 (
] ) 1 ( [ ) 4 )(
1 (
2 )!
1 2 (
] ) 1 ( [ ) 4 )(
1 (
! 4
) 1 ( 2
! 3
) 1 (
! 2 2
! ) 1
(
余 项
)!
1 2 (
) ) (
( ) 4 )(
1 ( ) (
) 1 2 ( 1 2 2 2 2
2
2
n h f
n u u
u u x R
n n n
( x
0 nh x
0 nh )
适用范围 通常用于计算插值区间中点附近的函数值。一般当
x x h
4 1
0
时用这个公式。注意事项 每次用的节点的个数都是奇数。
[贝塞尔插值公式]
节 点
x
k x
0 kh
( k 0 , 1 , 2 , , n )
插 值 点h x u x
uh x
x
0,
0
插值公式
f ( x ) B ( x ) R
2n1( x )
2
! 2
2 1 2
1
! 1
2 1 }
2 { ) 1
(
12 0 2 2 2
0 1
0
u y y
y u
y y x
B
3 1
2 2
! 3
2 1 2
1 2
1
y
u u
2
! 4
4 9 2 1 4
1 2 1
2 4 1 4 2
2
y y
u u
2 )!
2 2 (
4 ) 3 2 ( 2 1 4
9 2 1 4
1 2 1
) 1 ( 2 2 ) 2 ( 2 2 2 2
2 2
nn n
n
y y
n
u n u
u
2 1 ( 1)
2 2 2
2
)!
1 2 (
4 ) 3 2 ( 2 1 4
9 2 1 4
1 2 1 2
1
ny
nn
u n u
u
u
余 项
)!
2 (
) ] (
4 ) 1 2 ) ( 2 [( 1 4 ] ) 9 2 ][( 1 4 ) 1 2 [( 1 ) (
) 2 ( 2 2 2
2 2
1
2
n
h f u n
u u
x R
n n n
( x
0 nh x
0 nh )
适用范围 通常用于计算两相邻节点之间的中点附近的函数值。这个公式一般在
4
1 2 1
u
时使用。注意事项 每次用的节点的个数都是偶数。
当
2
1
u
时,插值公式特别简单:
2 ) 2 (
2
! 6
5 3 1
2 2
! 4
3 1 2 2
! 2
1 ) 2
( 2
0 1 2 3
6 2 6 6
2 2 2
2 4 1 4 4
2 2 1 2 0 2 2 1 0 0
x h y R
y
y y
y y
y h y
x f
n
) ( 1 ) [( 2 1 )! ! ] 2 [( 2 )! ] ( )
(
02
2 2 1 2 (2 )1
2n
h
nn
nn h
nf
n
x
R
说明 应用差分法插值时,并非项数愈多结果就愈精确,一般取二、三次就可以了。不 难看出,线性插值法只是差分法的一个特例(取一阶差分)。
三、拉格朗日插值多项式
[拉格朗日插值公式] 已知单变量函数
y f (x )
的n+1
个节点x
0, x
1, x
2, , x
n及其对应的函 数值y
k f ( x
k)( k 0 , 1 , 2 , , n )
,对于插值区间内任一点x,可用下面拉格朗日插值多项式
) (x
L
n 计算函数值∶
nk n
k i i
k i k
i
n
y
x x
x x x
L x f
0 0,
) (
) ( )
(
这里
L
n( x
k) f ( x
k) y
k( k 0 , 1 , 2 , , n )
特别对于等距节点x
k x
0 kh ( k 0 , 1 , 2 , , n )
,有k k n
k
k n n
n
n
x x
y k n h
n x x
L
0
) 1
! ( ) ) (
(
式中
( ) (
0)(
1) (
n)
n
x x x x x x x
[埃特金逐步计算法] 已知
f ( x
k) y
k( k 0 , 1 , , n )
,求插值区间内任一点a
的拉格朗日多 项式的数值L
n(a )
,可按下表从左到右逐列进行计算。x
ka
k a x
kI
k y
kI
0,kI
0,1,kI
0,1,2,k… I
0,1,n2,kL
n(a )
x
0x
1x
2x
3
1
x
nx
n0
0
a x
a
1
1
a x
a
2
2
a x
a
3
3
a x
a
1
1
nn
a x
a
n
n
a x
a
y
0y
1y
2y
3
1
y
ny
n1 ,
I
0 2 ,I
0 3 ,I
0
1 , 0n
I
I
0,n2 , 1 ,
I
0 3 , 1 ,I
0
1 , 1 , 0 n
I
I
0,1,n3 , 2 , 1 ,
I
0
1 , 2 , 1 ,
0 n
I
I
0,1,2,n… I
0,1,2n2,n1n
I
0,1,2n2,I
0,1,2,,n表中
I
0,1( x )
表示用x
0, x
1作节点的一次插值多项式;I
0,2( x )
表示节点为x
0, x
2的一次插值多项 式;一般I
0,1,,k( x )
表示节点为x
0, x
1, , x
k的k
次插值多项式。表中左起第四列以后的各列都是对应的插值多项式在
a
点的数值,它们之间有下面的关系:
k k k
k
a I
I a a
I a
0 00 , 0
1
( k 1 , 2 , , n )
k k k
k
a I
I a a I a
, 0
1 , 0 1 1
, 1 , 0
1
( k 2 , 3 , , n )
………
n n n
n n n
n n
n
a I
I a a I a
, 2 , , 2 , 1 , 0
1 , 2 , , 2 , 1 , 0 1 1
, 2 , 1 , 0
1
利用拉格朗日插值多项式计算某一点
a
的数值时每增加一个节点,必须按公式重新计算,而埃特金逐步计算法避免了这个缺点。
四 三次样条(Spline)内插公式
样条函数是逼近函数的一种方法。
[三次样条函数] 已知平面上的
n
个点( x
i, y
i) ( i 1 , 2 , , n )
,这些点称为型值点,其中x
nx
x
1
2
称为节点。如果函数
S(x)满足以下三个条件:
(i)
S ( x
i) y
i( i 1 , 2 , , n )
;(ii)S(x)在每个区间
[ x
i, x
i1]( i 1 , 2 , , n 1 )
上是一个三次多项式;(iii)S(x)在整个区间
[ x
1, x
n]
上有连续的一阶及二阶导数;则称
S(x)为过 n
个点的三次样条函数。如果函数
S(x)满足下面的任一边界条件(在 x
1, x
n两端点处附加的条件),那末三次样条函数S(x)存在而且唯一∶
(a) 函数在区间
[ x
1, x
n]
两端点的一阶导数(单边导数)已知,即S ' ( x
1) m
1, S ' ( x
n) m
n, m
1和m
n为已知数。(b) 函数在区间
[ x
1, x
n]
两端点的二阶导数为零,即S " ( x
1) S " ( x
n) 0
。 (c) 函数为周期的,且满足S ( x
1) S ( x
n), S ' ( x
1) S ' ( x
n), S " ( x
1) S " ( x
n)
。[三次样条函数的表达形式]
1
以二阶导数为参数的形式S(x)在每个区间 [ x
i, x
i1]
上表为)]
( 2
)[
)(
6 ( ) 1 ( )
(
i i,i 1 i i i 1 i i 1 i,i 1 ii
x y y x x x x x x K K K x x
S
( i 1 , 2 , , n 1 )
式中
K
i( i 1 , 2 , , n )
为待定参数,而y
i,i1是y
i的一阶差商,K
i,i1是K
i的一阶差商,即i i
i i i
i
x x
y y y
1 1 1
,
( i 1 , 2 , , n 1 )
i i
i i i
i
x x
K K K
1 1 1
,
( i 1 , 2 , , n 1 )
这样定义的函数
S(x)在区间 [ x
1, x
n]
上满足条件(i),(ii)。如果选择 K
i使得S(x)在 [ x
1, x
n]
上 有一阶连续导数,那末S(x)在 [ x
1, x
n]
上就有二阶连续导数,而且
K
i S " ( x
i)
( i 1 , 2 , , n )
利用
S(x)一阶导数的连续性及边界条件可以给出确定 K
i( i 1 , 2 , , n )
的代数方程组。(1) 边界条件为(a)的情况
在条件(a)下,
K
i( i 1 , 2 , , n )
由下面方程组解出
) (
6 2
) 1 , , 3 , 2 ( ) (
6 )
( 2
) (
6 2
, 1 1
1 1
, 1 1 , 1
1 1
1
1 2 , 1 2
1 1 1
n n n n
n n
n
i i i i i
i i i i i
i
y m K
h K
h
n i
y y K
h K h h K
h
m y K
h K h
式中
h
i x
i x
i1 x
i, y
i,i1为一阶差商(同前),m
1和m
n为给定的边界条件。用矩阵表示就是
n n n
n n
d d
d d d
K K
K K K
a a
a
1 3 2 1
1 3 2 1
1 3
2
2 1 1 1 0
1 0 0
0 0
1 0
0 2 0
1 1
式中
i i i i
i
i
h h h a
a h a
) (
2 2 1
1 1 1
1
( i 1 , 2 , , n 2 )
) 3 (
) (
2
) (
6
) 3 (
, 1 1
1 1 , 2 , 1 1
1 2 , 1 1 1
n n n n n
i i i i
i i i i i i i
y h m
d
a h h h
d h y
d y
m h y
d
( i 1 , 2 , , n 2 )
当 1
2 , 2 ( 1
1)
i i i
n
h
a h
a
( i 1 , 2 , , n 2 )
时,解出K
i( i 1 , 2 , , n )
为
) 2 , 3 , , 1 , ( )
2 (
) (
6
1 1 1
1 1
1 1 ,
1
n n i k
a d K
a h
d h y
K m
i i i i
n n
n n n n n n
(2) 边界条件为(b)的情况
在条件(b)下,
K
1 0 , K
n 0 , K
i( i 2 , 3 , , n 1 )
由下面方程组解出:
h
i1K
i1 2 ( h
i1 h
i) K
i h
iK
i1 6 ( y
i,i1 y
i1,i)
( i 2 , 3 , , n 1 )
用矩阵表示就是
1 2 4 3 2
1 2 4 3 2
1 2
2
2 4
3 2 1
2
) 1 (
2 1 0
0 1
0 0
0 1
0
0 ) 0
( 1 2
n n n
n
n n
n
n
d d d d d
K K K K K
h h
h
a a
a h h
h
式中
i i i i
i
i
h h h a
a h
h h a h
) (
2
) (
2
1 1 1
2 1
2
2
( i 2 , 3 , , n 3 )
) 3 (
) (
2
) (
6
) 3 (
1 , 2 ,
1 1 2 1
1 1 , 2 , 1 1
2 , 1 3 , 2 2 1 2
n n n n n n n
i i i i
i i i i i i i
y h y
d h
d h h h
d h y
d y
y h y
d h
( i 2 , 3 , , n 3 )
当
2 ( 1
1)
i i
i
h
a h
( i 2 , 3 , , n 2 )
时,解出K
i( i 2 , 3 , , n 1 )
为
i i i i
n n n n
n n n n n n n
K a d K
a h h h
d h y
K y
1 1 1
2 2 1
2
2 2 1
, 2 ,
1
1
2 ( )
) (
6
( i n 1 , n 2 , , 4 , 3 )
2
以一阶导数为参数的形式S(x)在每个区间 [ x
i, x
i1]
上表为
1 3 3
2 2
3 3 1
2 2 1
1 3 3
2 2
3 3 1
2 2 1
) 1 (
) 1 (
) 1 (
) 1 (
) 2 (
) 3 (
) 2 (
) 3 (
) (
i i i
i i
i
i i
i i
i i
i i i
i i
i i
i i
i i
m x h x
x h x
h
m x h x
x h x
h
y x h x
x h x
y x h x
x h x
x S
式中
h
i x
i x
i1 x
i, m
i( i 1 , 2 , , n )
是待定参数。这样定义的函数S(x)在区间 [ x
1, x
n]
上满足 三次样条函数的条件(i)和(ii),而且S(x)在 [ x
1, x
n]
上有连续的一阶导数,同时) ( '
ii
S x
m
( i 1 , 2 , , n )
S
i(x )
有时表成下式∶2 , 1
( )
3) 6 2 (
) ( )
(
i i i i i ii ii
K x x
x K x
x x m y x
S
式中
6 2 ( 2 )
) (
"
), (
'
,1
1
i ii i i i i i
i
i
m m
y h x h
S K x S
m
,而y
i,i1与K
i,i1定义同前。根据
S ( x )
在 x
1, x
n
上有连续二阶导数及边界条件可以给出确定m
i的代数方程组。(1) 边界条件为
(a )
的情况在条件
(a )
下,m
i( i 1 , 2 , , n )
满足下面方程组
已知 已知
n
i i i i
i i i
i i i i i
i
m
h y h m y
m h h m h
h m
) (
1 3 1 )
( 1
1 2
, 11 , 1 1
1 1
1 1
(
i 2 , 3 , , n 1 )
记
1 ( i 1 , 2 , , n 1 ) g h
i
i
,得
已知 已知
n
i i i i i i i
i i i i i
i
m
y g y g m
g m g g m
g m
) (
3 )
(
2
1 1 1 1, , 11 1 1
(
i 2 , 3 , , n 1 )
它可以改写为
已知 已知
n
i i i i
m
d m a m m
1 1
(
i 2 , 3 , , n 1 )
其中) (
2
1 22
2
g g
a g
) (
2
) (
3
2 1
1 1 3 , 2 2 2 , 1 1
2
g g
m g y g y d g
1 1
1
)
(
2
i i i i
i
i
g g g a
a g
1 1 1
1 1 1
, ,
1 1
) (
2
) (
3
i i i i
i i i
i i i i i
i
g g g a
d g y
g y
d g
(i 3 , 4 , , n 1 )
由此得
1 1 1 1
i i i i
n n n n
m a d m
m a d
m
( i n 2 , n 3 , , 2 )
(2)边界条件为(b)的情况在条件(b)下,
m
i( i 1 , 2 , , n )
满足下面方程组
n n n n
i i i i
i i i
i i i i i
i
y m m
h y h m y
m h h m h
h
y m m
, 1 1
1 , 1
, 1 1
1 1
1
2 , 1 2 1
3 2
) (
1 3 1 )
( 1 1 2
3 2
( i 2 , 3 , , n 1 )
式中
y
i,i1 为y
i的一阶差商。当
a
n1 2
且2 ( 1 )
1
i i
i
h
a h
( i 1 , 2 , , n 2 )
时,
1 1 1
1 1 ,
1
) 2 ( 3
i i i i
n n
n n n n n
m a d m
a g
d g
m y
( i n 1 , n 2 , , 2 , 1 )
其中
i
i
h
g 1
,而a
i, d
i由下述公式递归求得2 1
1
a
1 1
1
)
(
2
i i i i
i
i
g g a g
a g
( i 2 , 3 , , n 1 )
1 1,22 3 y d
1 1 1
1 1 1 , ,
1 1
) (
2
) (
3
i i i i
i i i i i i i i
i
g g a g
d g y
g y
d g
( i 2 , 3 , , n 1 )
(3)边界条件为(c)的情况在条件(c)下,
m
i( i 1 , 2 , , n )
满足下面方程组:
) (
2 3 1
1 2
) (
1 3 1 )
( 1 1 2
0
1 , 1 1
2 , 1 1
1 1 2 1 1 1
1 , 1
, 1 1
1 1
1 1
n n n n
n n n
i i i i
i i i
i i i i i
i n
h y h m y
m h m h
m h h
h y h m y
m h h m h
h m m
) 2 , , 3 , 2
( i n