Newton 插值多项式
利用插值基函数很容易得到拉格朗日插值多项式,拉格朗日插值公式结构
紧 凑 , 在 理 论 分 析 中 甚 为 方 便 , 但 当 插 值 节 点 增 减 时 全 部 插 值 基 函 数
均要随之变化,不得不重新计算所有插值基函数 )(xli ,这
(
)(
ixli
在实际计算中是很不方便的,为了克服这一缺点,引入了出具有承袭性质的牛
,1,0
),
n
顿插值多项式,首先介绍在牛顿插值中需要用到的差商计算。
◆ 差商
(
xf
),
,
xxx
0
,
1
,
2
为 一 系 列 互 不 相 等 的 点 , 称
(
i 为 )(xf 关于点
)
j
i xx , 的一阶差商,记为
j
,
[
i xxf
j
]
,即
设 有 函 数
)
(
xf
i
x
i
(
xf
x
)
j
j
,
[
xxf
i
j
]
)
(
xf
i
x
i
(
xf
x
j
)
j
1-14)
类似于高阶导数的定义,称一阶差商的差商
[
,
xxf
k
x
k
]
,
[
xxf
j
x
i
j
i
]
为 )(xf 关于
,
xxx
i
,
j
k
的二阶差商,记为
[
,
xxxf
k
,
j
i
]
.一般地,称
,
[
xxf
1
0
,
,
[
,
xxf
2
1
]
x
1
k
x
x
0
k
,
,
x
k
]
为 )(xf 关于
)(xf
函 数
(=]
xf
0
[
xf
0
,
,
,
]
x
k
kx
,
[
,
xxf
1
,
[
xxf
1
, 1
xx
0 的 k 阶差商,记为
]
x
k
)(xf
关 于 0x 的 零 阶 差 商 即 为 函 数
)
。
x
1
k
x
0
,
,
0
0
,
[
xxf
2
1
,
,
x
k
]
在 0x 的 函 数 值 ,
容易证明,差商具有下述性质:
(1)各阶差商均具有线性性,即若
)(
xf
a
)(
x
b
)(
x
,则对任意正整
数 k ,都有
[
,
,
,
,
,
xxf
x
xx
1
0
1
0
k
,
[
,
xxf
可表示成
(2) k 阶差商
1
[
a
]
]
,
kx
,
x
k
(
xf
0
0
]
),
[
b
(
xf
1
,
,
xx
1
0
),
,
,
x
k
(
kxf
]
)
的线性组
合。
[
,
xxxf
,
1
0
,
,
x
k
]
2
k
i
0
(
x
i
x
0
)
(
x
i
x
i
)
(
xf
i
)(
x
1
i
x
)
(
x
i
x
k
)
i
1
k
i
0
(
xf
(
1
k
)
i
x
i
)
(
1
k
x
i
)
其中
(
x
i
x
j
)
。
k
j
j
0
i
用归纳法可以证明这一性质。
1k 是显然的。
[
,
xxxf
,
1
0
]
2
0
2k
时
,
[
]
xxf
1
x
0
(
xf
1
x
1
)
)
]
2
1
[
,
xxf
x
2
)
(
xf
1
x
1
)
(
xf
1
)(
x
x
1
0
1
x
2
x
0
)
(
xf
0
x
0
(
xf
0
)(
x
x
1
0
(
x
0
x
2
)
(
x
1
)
2
(
xf
x
2
x
2
)
(
x
2
(
xf
)(
x
0
)
2
x
2
x
1
)
(1-16)
(3)各阶差商均具有对称性,即改变节点的位置,差商值不变。如
[
,
xxf
i
j
[=]
,
xxf
i
j
]
[
,
xxxf
k
,
j
i
[=]
,
xxxf
,
k
i
]
j
[
,
xxxf
k
,
i
j
]
(4)若 )(xf 是 n 次多项式,则一阶差商
事实上,如果 )(xf 是 n 次多项式,则
,[
]
ixxf
)(
xP
多项式,且
(
0)
ixP
。于是可分解为
是 1n 次多项式。
)(
xf
(
ixf
)
也是 n 次
其中
Pn
)(1 x
(
)(
xP
x
为 1n 次多项式。所以
)
,[
xxf
i
]
)(
xf
x
(
xf
i
x
i
)
Px
i
n
)(
1 x
(
x
)(
x
1
)
Px
i
n
x
x
i
P
n
1
)(
x
为 1n 次多项式。
◆计算差商
按照差商定义,用两个 k-1 阶差商的值计算 k 阶差商,通常用差商表的形
式计算和存放(见表 1)。
由于差商对节点具有对称性,可以任意选择两个 k-1 差商的值计算 k 阶差
商。
xk
x0
x1
x2
x3
[
,
xxxf
,
1
0
]
2
1
,
[
xxf
2
x
]
2
0
[
,
xxf
1
x
0
]
0
,
[
xxf
2
x
]
2
0
[
,
xxf
1
x
1
]
(1-18)
表 1 差商表
f(xk) 一阶差商 二阶差商 三阶差商
f(x0)
四阶差商
…
f(x1)
f[x0,x1]
f(x2)
f[x1,x2]
f[x0,x1,x2]
f(x3)
f[x2,x3]
f[x1,x2,x3]
f[x0,x1,x2,x3]
x4
x5
f(x4)
f[x3,x4]
f[x2,x3,x4]
f[x1,x2,x3,x4]
f[x0,x1,x2,x3,x4]
f(x5)
f[x4,x5]
f[x3,x4,x5]
f[x2,x3,x4,x5]
f[x1,x2,x3,x4,x5]
【例 1】给定函数
y
x
)(xf
)(xf
-2
17
的函数表
0
1
1
2
2
17
写出函数
y
)(xf
的差商表。
解 差商表如下:(写牛顿插值多项式)
ix
-2
0
1
2
)
( ixf
17
1
2
17
1 阶差商 2 阶差商 3 阶差商
-8
1
15
3
7
1
◆ 牛顿插值(根据差商定义推导牛顿插值多项式)
根据差商定义,把 x 看成[a,b]上一点,可得
)(
xf
x
0x
,[
xxf
0
]
左右两端乘(
)(
(
xf
xf
二阶差商:
0
)
(
xf
0
x
0
x )移项得
,[
)
](
xxf
0
x
x
0
)
,
]
,整理得:
0
,[
]
xxf
0
x
,
[
xxf
1
[
,
xxf
1
x
1
]
0
,[
,
xxxf
1
0
](
x
x
1
)
,
,[
,
xxxf
1
0
]
,[
xxf
0
]
……
同理:
,[
xxf
,
,
x
]
1
n
0
,
[
xxf
1
0
,
,
x
n
]
,[
xxf
,
,
x
n
0
](
x
x
n
)
.
只要把后一式代入前一式,就得到
[
,
)
)(
xxxf
x
xf
0
0
(
)
x
x
1
0
n
)(
)(
xN
x
](
[
,
xxf
x
0
1
,
](
x
x
,
]
x
n
(
)
xf
0
,
[
,
xxf
0
1
,[
,
xxxf
1
1
)
x
n
,
1
,
0
n
n
)(
xR
n
](
x
x
0
)(
x
x
1
)
2
其中
)(
xN
n
)(
xR
n
0
)
](
(
[
,
xxf
xf
x
0
0
1
[
,
,
](
x
x
xxxf
0
2
1
[
](
,
,
x
x
xf
x
0
0
n
)(
,[
)(
xf
xN
xxf
)(1 x
n =
n
-
xx
)
x
0
)(
)
x
x
1
)
(
)
x
x
1
n
)(
,
,
]
x
x
n
-
nxx
)x-
1
0
(
n
)
)(
x
1
(
0
(1-19)
,
(1-20)
则
显然,
(
xR
n
i
)(
xf
)(
xN
n
)(
xR
n
)(xNn 是至多 n 次的多项式。而由
)
x
,
xxxfx
i
[)
n
1
(
,
,
,
2
1
n
i
0]
(
i
,2,1,0
),
n
即 得
(
xN
n
(
xf
i
)
i
)
(
xf
(
)
xN
n
i
)
y
i
i
(
i
,2,1,0
)(xNn 满 足 插 值 条 件
,因而它是 )(xf 的 n 次插值多项式。这种形式的插值
。 这 表 明
),
n
多项式称为 Newton 插值多项式。
Newton 插值优点:每增加一个节点,插值多项式只增加一项,即
,
,
[)
xxf
1
)(
xN
)(
x
x
n
x
0
x
1
)(
N
x
x
x
1
(
)
(
,
0
n
n
x
n
1
]
因此便于递推运算。而且 Newton 插值的计算量小于 Lagrange 插值。
由插值多项式的唯一性可知, n 次 Newton 插值多项式与 n 次 Lagrange
,它们只是表示形式不同。因此 Newton
)(
xN
插值多项式是相等的,即
)(
xL
n
n
余项与 Lagrange 余项也是相等的,即
)(
xR
n
n
1
,[)(
xxfx
,
,
x
n
]
0
(
n
f
(
n
)1
)(
)!1
n
1
)(
x
由此可得差商与导数的关系
[
,
xxf
1
0
,
x
]
,
n
f
(泰勒系数:
a
k
)(
n
)(
!
n
)(
k
f
( 0
x
!
k
)
)
),
(
,
其中
min
0
ni
,
x
i
i
x
max
0
ni
【例 2】对上例的中的 )(xf ,求节点为 1
,
xxx
0
,
1
的二次插值多项式和节点为
2
0, xx 的一次插值多项式,节点为
,
,
,
xxxx
1
0
3
8
[
xf
x
1
的三次插值多项式。
3]
xx
1
[
xf
]
,
,
2
,
,
,
2
0
0
[
xf
解 由 上 例 知
1]
,
,
xxx
1
0
)(
)
xN
1
0
(8
)(1
xN
,
4
2
(
xf
17
( 0 xf
)
17
,
,于是有
)
[
,
](
x
xxf
1
0
0
)2
81
x
x
x
2
)(
xN
)(
xN
2
)(
xN
3
0
0
0
0
2
(
xf
,
](
,
](
[
,
[
)
)
xx
x
x
xxf
xf
x
1
1
2
2
3
(3
)2
81
x
x
x
x
x
](
,
,
,
[
](
)
[
)
(
xx
x
x
x
xf
x
xxf
xf
1
0
0
0
1
0
,
)
,
,
)(
)(
[
](
xf
x
x
x
x
x
x
xxx
2
1
1
0
4
0
2
3
()2
3
2
(1
)1
x
x
x
xx
2
x
4
x
2
2
0
)(
x
1
)(
x
0
x
x
1
)
x
1
)
4
x
1
【例 2】用 Newton 插值公式计算 ln11.5。
解 如果仍取
x
0
,11
x
1
,12
x
2
13
点作抛物线插值,按表 1 计算,结
果如下:
xi
11
12
13
yi=lnxi 一阶差商 二阶差商
2.3979
2.4849
2.5649
0.0870
0.0800
-0.0035
1
x-11
(x-11)(x-12)
N2(x)=2.3979+0.0870(x-11)-0.0035(x-11)(x-12)
ln11.5≈N2(11.5)
=2.3979+0.0870×0.5+0.0035×0.5×0.5
=2.442275
若加节点 x=10,14,ln10=2.3026,ln14=2.6391,用
lnx 四次插值多项式近似,则按表 1 计算结果如下:
xi
10
11
12
13
yi=lnxi 一阶差商 二阶差商 三阶差商 四阶差商
2.3026
2.3979
2.4849
2.5649
-0.00415
-0.00350 0.00022
0.0953
0.0870
0.0800
1
x-10
12
10
k
k
x
)
(
(x-10)(x-11)
14 2.6391 0.0742 -0.00290 0.00020 -0.000005
所以
ln11.5≈N4(11.5)
=2.3026+0.0953 ×1.5-0.004 ×1.5 ×1.5+0.00022 ×1.5
×0.5×(-0.5)-0.000005×1.5×0.5×(-0.5) ×(-1.5)
=2.4423522
13
10
k
k
(
x
)
●牛顿插值的 MATLAB 实现
在 MATLAB 中实现牛顿插值的代码如下:
function f = Newton(x,y,x0)
%求已知数据点的牛顿插值多项式
%已知数据点的 x 坐标向量:x
%已知数据点的 y 坐标向量:y
%插值的 x 坐标:x0
%求得的牛顿插值多项式或在 x0 处的插值:f
syms t;
if(length(x) == length(y))
n = length(x);
c(1:n) = 0.0;
else
disp('x 和 y 的维数不相等!');
return;
end
f = y(1);
y1 = 0;
l = 1;
for(i=1:n-1)
for(j=i+1:n)
y1(j) = (y(j)-y(i))/(x(j)-x(i));
end
c(i) = y1(i+1);
l = l*(t-x(i));
f = f + c(i)*l;
simplify(f);
y = y1;
if(i==n-1)
if(nargin == 3)
f = subs(f,'t',x0);
else
f = collect(f);
f = vpa(f, 3);
%将插值多项式展开