研究意义
该研究可以解决连续值的预测问题。如给定离散数据,要求预测其中为给定点的函数值,过程有些类似机器学习,都是建立曲线拟合离散点。
数学表达为在一个函数类中找到一个简单函数
p
(
x
)
p(x)
p(x)(通常为多项式),使
p
(
x
k
)
=
f
(
x
k
)
=
y
k
p(x_{k})=f(x_{k})=y_{k}
p(xk)=f(xk)=yk,其中
p
(
x
)
p(x)
p(x)为插值函数,
f
(
x
)
f(x)
f(x)为被插值函数,
x
k
x_{k}
xk为插值节点,
[
a
,
b
]
[a,b]
[a,b]为插值区间。
该方法的关键在于,如何求插值函数
p
(
x
)
?
p(x)?
p(x)?
有三种解决方法,待定系数法。建立多项式方程,带入点求系数,该方法易于理解,但求解方程组计算量大。故本章主要介绍Lagrange插值公式和Newton插值公式。
定理:插值多项式的存在具有唯一性:节点互异,满足 f ( x i ) = p ( x i ) f(x_{i})=p(x_{i}) f(xi)=p(xi)且次数不超过n的插值多项式存在且唯一。
Lagrange插值法
拉格朗日插值法
两个插值点可以构造出一次线性插值公式,三个点可以构造出二次插值公式,n+1个点可以构造出n阶的插值公式,
基函数为:
l
i
(
x
)
=
(
x
−
x
0
)
(
x
−
x
1
)
.
.
.
(
x
−
x
i
−
1
)
(
x
−
x
i
+
1
)
.
.
.
(
x
−
x
n
)
(
x
i
−
x
0
)
(
x
i
−
x
1
)
.
.
.
(
x
i
−
x
i
−
1
)
(
x
i
−
x
i
+
1
)
.
.
.
(
x
i
−
x
n
)
l_{i}(x)=\frac{(x-x_{0})(x-x_{1})...(x-x_{i-1})(x-x_{i+1})...(x-x_{n})}{(x_{i}-x_{0})(x_{i}-x_{1})...(x_{i}-x_{i-1})(x_{i}-x_{i+1})...(x_{i}-x_{n})}
li(x)=(xi−x0)(xi−x1)...(xi−xi−1)(xi−xi+1)...(xi−xn)(x−x0)(x−x1)...(x−xi−1)(x−xi+1)...(x−xn),即为
∏
k
=
1
n
x
−
x
k
x
i
−
x
k
\prod_{k=1}^{n} \frac{x-x_{k}}{x_{i}-x_{k}}
∏k=1nxi−xkx−xk的
k
!
=
i
k!=i
k!=i
拉格朗日插值公式为:
L
n
(
x
)
=
y
0
l
0
(
x
)
+
y
1
l
1
(
x
)
+
.
.
.
+
y
n
l
n
(
x
)
L_{n}(x)=y_{0}l_{0}(x)+y_{1}l_{1}(x)+...+y_{n}l_{n}(x)
Ln(x)=y0l0(x)+y1l1(x)+...+ynln(x)
注:
1,n不同时,
l
(
x
)
l(x)
l(x)表达式不同,即该公式与n相关
2,
l
0
(
x
)
、
l
1
(
x
)
.
.
.
l
n
(
x
)
l_{0}(x)、l_{1}(x)...l_{n}(x)
l0(x)、l1(x)...ln(x)是
P
n
(
x
)
P_{n}(x)
Pn(x)的一组基函数
例题:已知 f ( x ) f(x) f(x)的两个数据点 ( − 1 , 4 ) ( 0 , − 1 ) (-1,4) (0,-1) (−1,4)(0,−1),求一次拉格朗日插值多项式,并估计 f ( − 1 2 ) f(\frac{-1}{2}) f(2−1)
解:转化点为
x
0
=
1
y
0
=
4
x_{0}=1 y_{0}=4
x0=1y0=4,
x
1
=
0
y
1
=
−
1
x_{1}=0 y_{1}=-1
x1=0y1=−1,
l
0
(
x
)
=
x
−
x
1
x
0
−
x
1
=
−
x
l_{0}(x)=\frac{x-x_{1}}{x_{0}-x_{1}}=-x
l0(x)=x0−x1x−x1=−x,
l
1
(
x
)
=
x
−
x
0
x
1
−
x
0
=
x
+
1
l_{1}(x)=\frac{x-x_{0}}{x_{1}-x_{0}}=x+1
l1(x)=x1−x0x−x0=x+1,
带入
L
1
(
x
)
=
y
0
l
0
(
x
)
+
y
1
l
1
(
x
)
=
4
l
0
(
x
)
−
l
1
(
x
)
L_{1}(x)=y_{0}l_{0}(x)+y_{1}l_{1}(x)=4l_{0}(x)-l_{1}(x)
L1(x)=y0l0(x)+y1l1(x)=4l0(x)−l1(x)得
L
1
(
x
)
=
−
5
x
−
1
L_{1}(x)=-5x-1
L1(x)=−5x−1
故
f
(
−
1
2
)
≈
L
1
(
−
0.5
)
=
3
2
f(\frac{-1}{2})≈L_{1}(-0.5)=\frac{3}{2}
f(2−1)≈L1(−0.5)=23
三个节点要求三次,无非再算一阶 l ( x ) l(x) l(x)和 L 2 ( x ) L_{2}(x) L2(x)。
拉格朗日插值基函数的性质
1,n个基函数的和为1,
∑
j
=
0
n
l
j
(
x
)
=
1
\sum_{j=0}^{n}l_{j}(x)=1
∑j=0nlj(x)=1
2,
∑
j
=
0
n
l
j
(
x
)
x
j
k
=
x
k
(
k
=
0
,
1...
n
)
\sum_{j=0}^{n}l_{j}(x)x_{j}^{k}=x^{k} (k=0,1...n)
∑j=0nlj(x)xjk=xk(k=0,1...n),本质是1的推广
3,
∑
j
=
0
n
l
j
(
x
)
(
x
j
−
x
)
k
=
0
(
k
=
0
,
1...
n
)
\sum_{j=0}^{n}l_{j}(x)(x_{j}-x)^{k}=0 (k=0,1...n)
∑j=0nlj(x)(xj−x)k=0(k=0,1...n)
拉格朗日误差分析
令 R n ( x ) = f ( x ) − L n ( x ) R_{n}(x)=f(x)-L_{n}(x) Rn(x)=f(x)−Ln(x),即为插值余项。
定理:前置基本条件不说了,总之符合条件的情况下,有:
R
n
(
x
)
=
f
n
+
1
(
ξ
)
(
n
+
1
)
!
w
n
+
1
(
x
)
R_{n}(x)=\frac{f^{n+1}(\xi) }{(n+1)!}w_{n+1}(x)
Rn(x)=(n+1)!fn+1(ξ)wn+1(x),
w
n
+
1
(
x
)
=
(
x
−
x
0
)
(
x
−
x
1
)
.
.
.
(
x
−
x
n
)
w_{n+1}(x)=(x-x_{0})(x-x_{1})...(x-x_{n})
wn+1(x)=(x−x0)(x−x1)...(x−xn)
注:实际中 ξ \xi ξ未知,故通常采用 ∣ ∣ R n ( x ) ∣ ∣ ≤ M n + 1 ( n + 1 ) ! ∣ w n + 1 ( x ) ∣ ||R_{n}(x)||\le\frac{M_{n+1}}{(n+1)!}|w_{n+1}(x)| ∣∣Rn(x)∣∣≤(n+1)!Mn+1∣wn+1(x)∣设置上限来估计误差,其中 M n + 1 = m a x ∣ f n + 1 ( x ) ∣ M_{n+1}=max|f^{n+1}(x)| Mn+1=max∣fn+1(x)∣
例题:
f
(
x
)
=
s
i
n
x
f(x)=sinx
f(x)=sinx,有数据(0,0)、(0.1,0.0998)、(0.2,0.1987)、(0.3,0.2955),利用线性插值求
f
(
0.15
)
f(0.15)
f(0.15)的值并估计误差。
解:迭代节点的原则:选择近的内插点,即x=0.1和x=0.2两个点,用这两个点建立lagrange插值多项式,求
L
(
0.15
)
L(0.15)
L(0.15)
误差=
∣
f
2
(
ξ
)
∣
2
!
∣
(
x
−
x
0
)
(
x
−
x
1
)
∣
\frac{|f^{2}(\xi)|}{2!}|(x-x_{0})(x-x_{1})|
2!∣f2(ξ)∣∣(x−x0)(x−x1)∣
该插值方法格式紧凑,但算法无承袭性,一阶和二阶每个 l i ( x ) l_{i}(x) li(x)彼此独立,需要独立计算,且最终还是需要求解线性方程组,为了解决上述问题,Newton提出新的插值公式。
Newton插值公式
差商定义及其性质
f ( x ) f(x) f(x)关于 x 0 x_{0} x0的零阶差商记为 f [ x 0 ] = f ( x 0 ) f[x_{0}]=f(x_{0}) f[x0]=f(x0), f [ x 0 , x k ] = f ( x k ) − f ( x 0 ) x k − x 0 f[x_{0},x_{k}]=\frac{f(x_{k})-f(x_{0})}{x_{k}-x_{0}} f[x0,xk]=xk−x0f(xk)−f(x0)称为 f ( x ) f(x) f(x)关于 x 0 , x k x_{0},x_{k} x0,xk的一阶差商, f [ x 0 , x 1 , x k ] = f [ x 0 , x k ] − f [ x 0 , x 1 ] x k − x 1 f[x_{0},x_{1},x_{k}]=\frac{f{[x_{0},x_{k}]}-f[x_{0},x_{1}]}{x_{k}-x_{1}} f[x0,x1,xk]=xk−x1f[x0,xk]−f[x0,x1]为 f ( x ) f(x) f(x)关于 x 0 , x 1 , x k x_{0},x_{1},x_{k} x0,x1,xk的二阶差商——故差商本质就是差的商。
例题:
f
(
x
)
=
x
5
−
3
x
−
1
f(x)=x^{5}-3x-1
f(x)=x5−3x−1求
f
[
0
,
1
]
f[0,1]
f[0,1]和
f
[
0
,
1
,
2
]
f[0,1,2]
f[0,1,2]
解:
f
[
0
,
1
]
=
f
(
1
)
−
f
(
0
)
1
=
−
2
f[0,1]=\frac{f(1)-f(0)}{1}=-2
f[0,1]=1f(1)−f(0)=−2,
f
[
0
,
2
]
=
f
(
2
)
−
f
(
0
)
2
=
13
f[0,2]=\frac{f(2)-f(0)}{2}=13
f[0,2]=2f(2)−f(0)=13
f
[
0
,
1
,
2
]
=
f
[
0
,
2
]
−
f
[
0
,
1
]
2
−
1
=
13
+
2
=
15
f[0,1,2]=\frac{f[0,2]-f[0,1]}{2-1}=13+2=15
f[0,1,2]=2−1f[0,2]−f[0,1]=13+2=15
一般地,称 f [ x 0 、 x 1 . . . x k ] = f [ x 0 , x 1 . . . x k − 2 , x k ] − f [ x 0 , x 1 . . . x k − 1 ] x k − x k − 1 f[x_{0}、x_{1}...x_{k}]=\frac{f[x_{0},x_{1}...x_{k-2},x_{k}]-f[x_{0},x_{1}...x_{k-1}]}{x_{k}-x{k-1}} f[x0、x1...xk]=xk−xk−1f[x0,x1...xk−2,xk]−f[x0,x1...xk−1]为关于 x 0 . . . x k x_{0}...x_{k} x0...xk的k阶差商。
差商具有如下性质:
1,线性。若
f
[
x
]
=
a
f
(
x
)
+
b
g
(
x
)
f[x]=af(x)+bg(x)
f[x]=af(x)+bg(x),则
F
[
x
0
.
.
.
x
k
]
=
a
f
[
x
0
.
.
.
x
k
]
+
b
g
[
x
0
.
.
.
x
k
]
F[x_{0}...x_{k}]=af[x_{0}...x_{k}]+bg[x_{0}...x_{k}]
F[x0...xk]=af[x0...xk]+bg[x0...xk]
2,
f
(
x
)
f(x)
f(x)的k阶差商可以表示为函数值的线性组合:
f
[
x
0
.
.
.
x
k
]
=
∑
i
=
0
k
f
(
x
i
)
w
k
+
1
(
x
i
)
f[x_{0}...x_{k}]=\sum_{i=0}^{k} \frac{f(x_{i})}{w_{k+1}(x_{i})}
f[x0...xk]=∑i=0kwk+1(xi)f(xi),其中
w
k
+
1
(
x
i
)
=
k
i
!
=
j
(
x
i
−
x
j
)
w_{k+1}(x_{i})=\frac{k}{_{i!=j}(x_{i}-x_{j})}
wk+1(xi)=i!=j(xi−xj)k
3,对称性。调换k阶差商中
x
0
,
x
1
.
.
.
x
k
x_{0},x_{1}...x_{k}
x0,x1...xk位置不改变差商的值,形式如下:
原有差商
f
[
x
0
,
x
1
,
x
]
=
f
[
x
0
,
x
]
−
f
[
x
0
,
x
1
]
x
−
x
1
f[x_{0},x_{1},x]=\frac{f{[x_{0},x]}-f[x_{0},x_{1}]}{x-x_{1}}
f[x0,x1,x]=x−x1f[x0,x]−f[x0,x1]经过对称性可转化为
f
[
x
1
,
x
,
x
0
]
=
f
[
x
0
,
x
1
]
−
f
[
x
1
,
x
]
x
0
−
x
f[x_{1},x,x_{0}]=\frac{f{[x_{0},x_{1}]}-f[x_{1},x]}{x_{0}-x}
f[x1,x,x0]=x0−xf[x0,x1]−f[x1,x]
该性质直接用于后续差商表的计算。
4,若
f
(
x
)
f(x)
f(x)的k阶差商为x的m次多项式,则其k+1阶差商为x的m-1次多项式,即多项式求一次差商,降低一次。
推论,n次多项式则其差商为n-k次多项式,k>n则差商为0。
牛顿插值公式
由上面差商的概念中剥离出 f ( x ) f(x) f(x)就是牛顿插值公式,
由
f
[
x
0
,
x
]
=
f
(
x
)
−
f
(
x
0
)
x
−
x
0
=
>
f
(
x
)
=
f
(
x
0
)
+
f
[
x
0
,
x
]
(
x
−
x
0
)
f[x_{0},x]=\frac{f(x)-f(x_{0})}{x-x_{0}}=>f(x)=f(x_{0})+f[x_{0},x](x-x_{0})
f[x0,x]=x−x0f(x)−f(x0)=>f(x)=f(x0)+f[x0,x](x−x0)
f
[
x
0
,
x
1
,
x
]
=
f
[
x
0
,
x
]
−
f
[
x
0
,
x
1
]
x
−
x
1
=
>
f
[
x
0
,
x
]
=
f
[
x
0
,
x
1
]
+
f
[
x
0
,
x
1
,
x
]
(
x
−
x
1
)
f[x_{0},x_{1},x]=\frac{f{[x_{0},x]}-f[x_{0},x_{1}]}{x-x_{1}}=>f[x_{0},x]=f[x_{0},x_{1}]+f[x_{0},x_{1},x](x-x_{1})
f[x0,x1,x]=x−x1f[x0,x]−f[x0,x1]=>f[x0,x]=f[x0,x1]+f[x0,x1,x](x−x1)
将二式中
f
[
x
0
,
x
]
f[x_{0},x]
f[x0,x]带入一式可得
f
(
x
)
=
f
(
x
0
)
+
f
[
x
0
,
x
1
]
(
x
−
x
0
)
+
f
[
x
0
,
x
1
,
x
]
(
x
−
x
0
)
(
x
−
x
1
)
f(x)=f(x_{0})+f[x_{0},x_{1}](x-x_{0})+f[x_{0},x_{1},x](x-x_{0})(x-x_{1})
f(x)=f(x0)+f[x0,x1](x−x0)+f[x0,x1,x](x−x0)(x−x1)得到一次插值;
再次代换可得
f
(
x
)
=
f
(
x
0
)
+
f
[
x
0
,
x
1
]
(
x
−
x
0
)
+
f
[
x
0
,
x
1
,
x
]
(
x
−
x
0
)
(
x
−
x
1
)
+
f
[
x
0
,
x
1
,
x
2
,
x
]
(
x
−
x
0
)
(
x
−
x
1
)
(
x
−
x
2
)
f(x)=f(x_{0})+f[x_{0},x_{1}](x-x_{0})+f[x_{0},x_{1},x](x-x_{0})(x-x_{1})+f[x_{0},x_{1},x_{2},x](x-x_{0})(x-x_{1})(x-x_{2})
f(x)=f(x0)+f[x0,x1](x−x0)+f[x0,x1,x](x−x0)(x−x1)+f[x0,x1,x2,x](x−x0)(x−x1)(x−x2)二次插值;
如此下去可得
f
(
x
)
=
f
(
x
0
)
+
f
[
x
0
,
x
1
]
(
x
−
x
0
)
+
.
.
.
+
f
[
x
0
,
x
1
.
.
.
x
n
,
x
]
(
x
−
x
0
)
(
x
−
x
1
)
.
.
.
(
x
−
x
n
)
f(x)=f(x_{0})+f[x_{0},x_{1}](x-x_{0})+...+f[x_{0},x_{1}...x_{n},x](x-x_{0})(x-x_{1})...(x-x_{n})
f(x)=f(x0)+f[x0,x1](x−x0)+...+f[x0,x1...xn,x](x−x0)(x−x1)...(x−xn)
该方法可以让求高次迭代的过程继承上一次的结果,提高了求解速度,计算形式上主要通过差商表实现,具体方法见下面例题。
例题:已知
f
(
x
)
f(x)
f(x)数据有(-1,4)、(0,-1)、(1,2)、(3,6),构建差商表计算牛顿插值公式。
解:
x k x_{k} xk | f ( x k ) f(x_{k}) f(xk) | 一阶 | 二阶 | 三阶 |
---|---|---|---|---|
-1 | 4 | |||
0 | -1 | -5 | ||
1 | 2 | 3 | 4 | |
3 | 6 | 2 | − 1 3 -\frac{1}{3} −31 | − 13 12 -\frac{13}{12} −1213 |
f ( x ) = 4 + ( − 5 ) ( x + 1 ) + 4 ( x + 1 ) ( x − 0 ) − 13 12 ( x + 1 ) ( x − 0 ) ( x − 1 ) f(x)=4+(-5)(x+1)+4(x+1)(x-0)-\frac{13}{12}(x+1)(x-0)(x-1) f(x)=4+(−5)(x+1)+4(x+1)(x−0)−1213(x+1)(x−0)(x−1)
差商表的计算利用差商性质3——对称性,差商计算公式为 f [ x 0 , x 1 . . . x k ] = f [ x 1 . . . f k ] − f [ x 0 . . . x k − 1 ] x k − x 0 f[x_{0},x_{1}...x_{k}]=\frac{f[x_{1}...f_{k}]-f[x_{0}...x_{k-1}]}{x_{k}-x_{0}} f[x0,x1...xk]=xk−x0f[x1...fk]−f[x0...xk−1],故该差商表计算流程为:
解释为:n阶差商的分子为对应位置前一阶两项的差,分母为对应位置x和前n个位置x的差。
牛顿插值公式的余项
注:
1,Lagrange插值公式与Newton插值公式是不同基的表示形式。
2,Newton插值公式具有算法的承袭性,增加一个节点仅需增加一项。
差商公式最后一项
f
[
x
0
,
x
1
.
.
.
x
n
,
x
]
(
x
−
x
0
)
(
x
−
x
1
)
.
.
.
(
x
−
x
n
)
=
f
n
+
1
(
ξ
)
(
n
+
1
)
!
(
x
−
x
0
)
(
x
−
x
1
)
.
.
.
(
x
−
x
n
)
f[x_{0},x_{1}...x_{n},x](x-x_{0})(x-x_{1})...(x-x_{n})=\frac{f^{n+1(\xi)}}{(n+1)!}(x-x_{0})(x-x_{1})...(x-x_{n})
f[x0,x1...xn,x](x−x0)(x−x1)...(x−xn)=(n+1)!fn+1(ξ)(x−x0)(x−x1)...(x−xn),故
f
[
x
0
,
x
1
.
.
.
x
n
,
x
]
=
f
n
+
1
(
ξ
)
(
n
+
1
)
!
f[x_{0},x_{1}...x_{n},x]=\frac{f^{n+1(\xi)}}{(n+1)!}
f[x0,x1...xn,x]=(n+1)!fn+1(ξ)
令
n
=
n
−
1
n=n-1
n=n−1得
f
[
x
0
,
x
1
.
.
.
x
n
−
1
,
x
]
=
f
n
(
ξ
)
(
n
)
!
f[x_{0},x_{1}...x_{n-1},x]=\frac{f^{n(\xi)}}{(n)!}
f[x0,x1...xn−1,x]=(n)!fn(ξ)
特别地,取
x
=
x
n
x=x_{n}
x=xn,得
f
[
x
0
,
x
1
.
.
.
x
n
]
=
f
n
(
ξ
)
(
n
)
!
f[x_{0},x_{1}...x_{n}]=\frac{f^{n(\xi)}}{(n)!}
f[x0,x1...xn]=(n)!fn(ξ),该公式将差商和导数联系起来,揭示了n阶差商和n阶导数的关系,当
f
(
x
)
f(x)
f(x)为小于n阶的多项式时,可用导数计算差商,与
ξ
\xi
ξ的取值无关,即
f
(
x
)
f(x)
f(x)为k阶多项式时,k=n时差商为ak!
,k<n时差商为0.
例题:
f
(
x
)
=
x
7
−
5
x
3
+
2
f(x)=x^{7}-5x^{3}+2
f(x)=x7−5x3+2,求
f
[
2
0
.
.
.
2
7
]
f[2^{0}...2^{7}]
f[20...27]和
f
[
2
0
.
.
.
2
8
]
f[2^{0}...2^{8}]
f[20...28]。
解:
f
[
2
0
.
.
.
2
7
]
=
f
7
(
ξ
)
(
7
)
!
=
7
!
7
!
=
1
f[2^{0}...2^{7}]=\frac{f^{7(\xi)}}{(7)!}=\frac{7!}{7!}=1
f[20...27]=(7)!f7(ξ)=7!7!=1
f
[
2
0
.
.
.
2
8
]
=
f
8
(
ξ
)
(
8
)
!
=
0
f[2^{0}...2^{8}]=\frac{f^{8(\xi)}}{(8)!}=0
f[20...28]=(8)!f8(ξ)=0
Hermite插值
研究背景
一些情景不仅要求节点处函数值相等,还要求在节点出导数值相等,如有 y i = f ( x i ) y_{i}=f(x_{i}) yi=f(xi),导数值 m i = f ′ ( x i ) m_{i}=f'(x_{i}) mi=f′(xi),要求 H ( x ) H(x) H(x)使 H ( x i ) = y i H(x_{i})=y_{i} H(xi)=yi且 H ′ ( x i ) = m i H'(x_{i})=m_{i} H′(xi)=mi,则称 H ( x ) H(x) H(x)为Hermite插值多项式。
注:2n+2个插值条件,可决定次数不超过2n+1次的多项式,记为 H 2 n + 1 ( x ) H_{2n+1}(x) H2n+1(x)。
几何意义:所拟合曲线不仅与已知曲线相交,且在交点出有相同的切线。
该方法用lagrange法证明,用Newton法计算。
埃尔米特插值公式
设 H 2 n + 1 ( x ) = ∑ k = 0 n [ α k ( x ) y k + β k ( x ) m k ] H_{2n+1}(x)=\sum_{k=0}^{n}[\alpha _{k}(x)y_{k}+\beta_{k}(x)m_{k}] H2n+1(x)=∑k=0n[αk(x)yk+βk(x)mk],其中 α k ( x ) \alpha _{k}(x) αk(x)、 β k ( x ) \beta_{k}(x) βk(x)为 H e r m i t e Hermite Hermite插值多项式的基函数,满足如下条件:
1,
α
k
(
x
)
\alpha _{k}(x)
αk(x)、
β
k
(
x
)
\beta_{k}(x)
βk(x)也为次数不超过2n+1的多项式。
2,
α
k
(
x
k
)
\alpha _{k}(x_{k})
αk(xk)当j=k
时为1,j!=k
时为0,
α
k
′
(
x
j
)
=
0
\alpha _{k}'(x_{j})=0
αk′(xj)=0
β
k
(
x
j
)
\beta_{k}(x_{j})
βk(xj)=0,
β
k
′
(
x
j
)
\beta_{k}'(x_{j})
βk′(xj)当j=k
时为1,j!=k
时为0。
验证插值条件:
H
2
n
+
1
(
x
j
)
=
y
j
H_{2n+1}(x_{j})=y_{j}
H2n+1(xj)=yj,即
H
2
n
+
1
(
x
j
)
=
∑
k
=
0
n
(
α
k
(
x
)
k
k
+
β
k
(
x
)
m
k
)
=
y
j
H_{2n+1}(x_{j})=\sum_{k=0}^{n}(\alpha _{k}(x)k_{k}+\beta_{k}(x)m_{k})=y_{j}
H2n+1(xj)=∑k=0n(αk(x)kk+βk(x)mk)=yj
H
2
n
+
1
′
(
x
j
)
=
m
j
H_{2n+1}'(x_{j})=m_{j}
H2n+1′(xj)=mj,即
H
2
n
+
1
′
(
x
j
)
=
∑
k
=
0
n
(
α
k
′
(
x
)
k
k
+
β
k
′
(
x
)
m
k
)
=
y
j
=
m
j
H_{2n+1}'(x_{j})=\sum_{k=0}^{n}(\alpha' _{k}(x)k_{k}+\beta'_{k}(x)m_{k})=y_{j}=m_{j}
H2n+1′(xj)=∑k=0n(αk′(x)kk+βk′(x)mk)=yj=mj
构造
α
k
\alpha_{k}
αk和
β
k
(
x
)
\beta_{k}(x)
βk(x),
α
k
=
(
a
x
+
b
)
(
x
−
x
0
)
2
(
x
−
x
1
)
2
.
.
.
(
x
−
x
k
−
1
)
2
(
x
−
x
k
+
1
)
2
.
.
.
(
x
−
x
n
)
2
=
(
a
x
+
b
)
l
k
2
(
x
)
\alpha_{k}=(ax+b)(x-x_{0})^2(x-x_{1})^{2}...(x-x_{k-1})^2(x-x_{k+1})^2...(x-x_{n})^2=(ax+b)l_{k}^{2}(x)
αk=(ax+b)(x−x0)2(x−x1)2...(x−xk−1)2(x−xk+1)2...(x−xn)2=(ax+b)lk2(x),根据已有点求出a
和b
即可,该基函数只有k=j
时为1。
再由
α
k
(
x
k
)
=
1
\alpha_{k}(x_{k})=1
αk(xk)=1,故
(
a
x
+
b
)
l
k
2
(
x
)
=
a
x
k
+
b
=
1
(ax+b)l_{k}^{2}(x)=ax_{k}+b=1
(ax+b)lk2(x)=axk+b=1
α
k
′
(
x
k
)
=
0
\alpha_{k}'(x_{k})=0
αk′(xk)=0,故
α
k
′
(
x
k
)
=
a
l
k
2
(
x
k
)
+
(
a
x
+
b
)
H
k
(
x
k
l
k
′
(
x
k
)
=
a
+
2
(
a
x
k
+
b
)
l
k
′
(
x
k
)
=
0
\alpha_{k}'(x_{k})=al_{k}^{2}(x_{k})+(ax+b)H_{k}(x_{k}l_{k}'(x_{k})=a+2(ax_{k}+b)l_{k}'(x_{k})=0
αk′(xk)=alk2(xk)+(ax+b)Hk(xklk′(xk)=a+2(axk+b)lk′(xk)=0
解得 a = − 2 l k ( x k ) a=-2l_{k}(x_{k}) a=−2lk(xk) b = 1 + 2 x k l k ′ ( x k ) b=1+2x_{k}l_{k}'(x_{k}) b=1+2xklk′(xk) l k ′ ( x ) = [ ( x − x 0 ) ( x − x 1 . . . ( x − x k − 1 ) ( x − x k + 1 ) . . . ( x − x n ) ) ( x k − x 0 ) ( x k − x 1 ) . . . ( x k − x k + 1 ) ( x k − x k + 1 ) . . . ( x k − x n ) ] ′ = ∑ j = 0 , j ! = k n ( 1 x k − x j ) l_{k}'(x)=[\frac{(x-x_{0})(x-x_{1}...(x-x_{k-1})(x-x_{k+1})...(x-x_{n}))}{(x_{k}-x_{0})(x_{k}-x_{1})...(x_{k}-x_{k+1})(x_{k}-x_{k+1})...(x_{k}-x_{n})}]'=\sum_{j=0,j!=k}^{n}(\frac{1}{x_{k}-x_{j}}) lk′(x)=[(xk−x0)(xk−x1)...(xk−xk+1)(xk−xk+1)...(xk−xn)(x−x0)(x−x1...(x−xk−1)(x−xk+1)...(x−xn))]′=j=0,j!=k∑n(xk−xj1)
Hermite插值公式余项
R ( x ) = f ( x ) − H 2 n + 1 ( x ) = f 2 n + 2 ( ξ ) ( 2 n + 2 ) ! ∣ w n + 1 2 ( x ) ∣ R(x)=f(x)-H_{2n+1}(x)=\frac{f^{2n+2}(\xi)}{(2n+2)!}|w_{n+1}^2(x)| R(x)=f(x)−H2n+1(x)=(2n+2)!f2n+2(ξ)∣wn+12(x)∣
常用 ∣ R n ( x ) ∣ ≤ M ( 2 n + 2 ) ! ∣ w n + 1 2 ( x ) ∣ |R_{n}(x)|\le\frac{M}{(2n+2)!}|w^{2}_{n+1}(x)| ∣Rn(x)∣≤(2n+2)!M∣wn+12(x)∣,其中 M = m a x a ≤ x ≤ b ∣ f 2 n + 2 ( x ) ∣ M=max_{a\le x\le b}|f^{2n+2}(x)| M=maxa≤x≤b∣f2n+2(x)∣
计算方法—带重节点的Newton插值公式
用于求有重节点的差商,同时用于求Hermite插值
f
[
x
0
,
x
0
]
=
lim
x
→
x
0
f
[
x
0
,
x
1
]
=
lim
x
→
x
0
f
(
x
1
)
−
f
(
x
0
)
x
1
−
x
0
=
f
′
(
x
0
)
f[x_{0},x_{0}]=\lim_{x \to x_{0}}f[x_{0},x_{1}]= \lim_{x \to x_{0}}\frac{f(x_{1})-f({x_{0}})}{x_{1}-x_{0}}=f'(x_{0})
f[x0,x0]=limx→x0f[x0,x1]=limx→x0x1−x0f(x1)−f(x0)=f′(x0)
f
[
x
0
,
x
0
,
x
1
]
=
lim
x
→
x
0
f
[
x
0
,
x
1
−
f
[
x
0
,
x
0
]
]
x
1
−
x
0
=
f
[
x
0
,
x
1
]
−
f
′
(
x
0
)
x
1
−
x
0
f[x_{0},x_{0},x_{1}]= \lim_{x \to x_{0}}\frac{f[x_{0},x_{1}-f[x_{0},x_{0}]]}{x_{1}-x_{0}}=\frac{f[x_{0},x_{1}]-f'(x_{0})}{x_{1}-x_{0}}
f[x0,x0,x1]=limx→x0x1−x0f[x0,x1−f[x0,x0]]=x1−x0f[x0,x1]−f′(x0)
例题1:求
H
3
(
x
0
)
=
f
(
x
0
)
=
y
0
,
H
3
′
(
x
0
)
=
f
′
(
x
0
)
=
y
0
′
,
H
3
(
x
1
)
=
f
(
x
1
)
=
y
1
,
H
3
′
(
x
1
)
=
f
′
(
x
1
)
=
y
1
′
H_{3}(x_{0})=f(x_{0})=y_{0},H_{3}'(x_{0})=f'(x_{0})=y_{0}',H_{3}(x_{1})=f(x_{1})=y_{1},H_{3}'(x_{1})=f'(x_{1})=y_{1}'
H3(x0)=f(x0)=y0,H3′(x0)=f′(x0)=y0′,H3(x1)=f(x1)=y1,H3′(x1)=f′(x1)=y1′。
解:
首先构建差商表
x | f(x) | 一阶 | 二阶 | 三阶 |
---|---|---|---|---|
x 0 x_{0} x0 | f ( x 0 ) f(x_{0}) f(x0) | |||
x 0 x_{0} x0 | f ( x 0 ) f(x_{0}) f(x0) | f ′ ( x 0 ) f'(x_{0}) f′(x0) | ||
x 1 x_{1} x1 | f ( x 1 ) f(x_{1}) f(x1) | f ( x 1 ) − f ( x 0 ) x 1 − x 0 \frac{f(x_{1})-f(x_{0})}{x_{1}-x_{0}} x1−x0f(x1)−f(x0) | f [ x 0 , x 0 , x 1 ] f[x_{0},x_{0},x_{1}] f[x0,x0,x1] | |
x 1 x_{1} x1 | f ( x 1 ) f(x_{1}) f(x1) | f ′ ( x 1 ) f'(x_{1}) f′(x1) | f [ x 0 , x 1 , x 1 ] f[x_{0},x_{1},x_{1}] f[x0,x1,x1] | f [ x 0 , x 0 , x 1 , x 1 ] f[x_{0},x_{0},x_{1},x_{1}] f[x0,x0,x1,x1] |
H 3 ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + f [ x 0 , x 0 , x 1 ] ( x − x 0 ) 2 + f [ x 0 , x 0 , x 1 , x 1 ] ( x − x 0 ) 2 ( x − x 1 ) H_{3}(x)=f(x_{0})+f'(x_{0})(x-x_{0})+f[x_{0},x_{0},x_{1}](x-x_{0})^2+f[x_{0},x_{0},x_{1},x_{1}](x-x_{0})^2(x-x_{1}) H3(x)=f(x0)+f′(x0)(x−x0)+f[x0,x0,x1](x−x0)2+f[x0,x0,x1,x1](x−x0)2(x−x1)
其实就是把导数点也当作重节点计算差商
例题2:导数不完全的混合条件。
有4阶多项式
x
0
=
1
,
x
1
=
2
,
x
2
=
3
x_{0}=1,x_{1}=2,x_{2}=3
x0=1,x1=2,x2=3,求满足插值条件
p
(
x
0
)
=
f
(
x
0
)
=
6
,
p
(
x
1
)
=
f
(
x
1
)
=
25
,
p
(
x
2
)
=
f
(
x
2
)
=
70
,
p
′
(
x
1
)
=
f
′
(
x
1
)
=
30
p(x_{0})=f(x_{0})=6,p(x_{1})=f(x_{1})=25,p(x_{2})=f(x_{2})=70,p'(x_{1})=f'(x_{1})=30
p(x0)=f(x0)=6,p(x1)=f(x1)=25,p(x2)=f(x2)=70,p′(x1)=f′(x1)=30,求次数不超过3次的多项式
p
(
x
)
p(x)
p(x)满足以上条件,求其余项表达式。
解:使用带重节点的Newton插值公式,构造差商表:
x | f(x) | 一阶 | 二阶 | 三阶 |
---|---|---|---|---|
1 | 6 | |||
2 | 25 | 19 | ||
2 | 25 30 | 11 | ||
3 | 70 | 45 | 15 | 2 |
故 p ( x ) = 6 + 19 ( x − 1 ) + 11 ( x − 1 ) ( x − 2 ) + 2 ( x − 1 ) ( x − 2 ) 2 = 2 x 3 + x 2 + 2 x + 1 p(x)=6+19(x-1)+11(x-1)(x-2)+2(x-1)(x-2)^2=2x^3+x^2+2x+1 p(x)=6+19(x−1)+11(x−1)(x−2)+2(x−1)(x−2)2=2x3+x2+2x+1
Hermite余项
R ( x ) = f ( x ) − p ( x ) = k ( x ) ( x − x 0 ) ( x − x 1 ) 2 ( x − x 2 ) R(x)=f(x)-p(x)=k(x)(x-x_{0})(x-x_{1})^2(x-x_{2}) R(x)=f(x)−p(x)=k(x)(x−x0)(x−x1)2(x−x2),其中 k ( x ) = f 4 ( ξ ) 4 ! k(x)=\frac{f^{4}(\xi)}{4!} k(x)=4!f4(ξ),导数点当作二重根构造函数。
例题:
f
(
−
1
)
=
−
3
,
f
(
0
)
=
−
1
,
f
(
1
)
=
−
1
,
f
′
(
0
)
=
1
,
f
′
(
1
)
=
3
f(-1)=-3,f(0)=-1,f(1)=-1,f'(0)=1,f'(1)=3
f(−1)=−3,f(0)=−1,f(1)=−1,f′(0)=1,f′(1)=3
1,求次数小于等于4的多项式
p
(
x
)
,
使
p
(
−
1
)
=
f
(
−
1
)
,
p
(
0
)
=
f
(
0
)
,
p
′
(
0
)
=
f
′
(
0
)
,
p
′
(
1
)
=
f
′
(
1
)
p(x),使p(-1)=f(-1),p(0)=f(0),p'(0)=f'(0),p'(1)=f'(1)
p(x),使p(−1)=f(−1),p(0)=f(0),p′(0)=f′(0),p′(1)=f′(1)
2,写出余项并证明。
解:
1,构造差商表
x | f(x) | 一阶 | 二阶 | 三阶 | 四阶阶 |
---|---|---|---|---|---|
-1 | -3 | ||||
0 | -1 | 2 | |||
0 | -1 | 1 | -1 | ||
1 | -1 | 0 | -1 | 0 | |
1 | -1 | 3 | 3 | 4 | 2 |
故 p ( x ) = − 3 + 2 ( x + 1 ) − ( x + 1 ) x + 2 ( x + 1 ) x 2 ( x − 1 ) = 2 x 4 − 3 x 2 + x − 1 p(x)=-3+2(x+1)-(x+1)x+2(x+1)x^2(x-1)=2x^{4}-3x^2+x-1 p(x)=−3+2(x+1)−(x+1)x+2(x+1)x2(x−1)=2x4−3x2+x−1,可带入验证插值条件检验。
2,设余项
R
(
x
)
=
f
(
x
)
−
p
(
x
)
=
k
(
x
)
x
(
x
+
1
)
x
2
(
x
−
1
)
2
R(x)=f(x)-p(x)=k(x)x(x+1)x^2(x-1)^2
R(x)=f(x)−p(x)=k(x)x(x+1)x2(x−1)2,构造
u
(
t
)
=
f
(
t
)
−
p
(
t
)
−
k
(
t
)
(
t
+
1
)
t
2
(
t
−
1
)
2
u(t)=f(t)-p(t)-k(t)(t+1)t^2(t-1)^2
u(t)=f(t)−p(t)−k(t)(t+1)t2(t−1)2。
则
u
(
t
)
u(t)
u(t)在区间内分别有
−
1
,
二重零
0
,
二重
1
,
x
-1,二重零0,二重1,x
−1,二重零0,二重1,x六个零点,利用罗尔定理可得
u
′
(
t
)
u'(t)
u′(t)在区间内有五个零点,
反复使用可得
u
5
(
t
)
u^5(t)
u5(t)至少有一个零点,记为
ξ
\xi
ξ,则
u
5
(
t
)
=
f
5
(
ξ
)
−
k
(
x
)
5
!
=
0
u^5(t)=f^5(\xi)-k(x)5!=0
u5(t)=f5(ξ)−k(x)5!=0,推出
k
(
x
)
=
f
5
(
ξ
)
5
!
k(x)=\frac{f^5(\xi)}{5!}
k(x)=5!f5(ξ)
故余项
R
(
x
)
=
f
5
(
ξ
)
5
!
(
x
+
1
)
(
x
−
1
)
2
x
2
,
ξ
∈
[
−
1
,
1
]
R(x)=\frac{f^5(\xi)}{5!}(x+1)(x-1)^2x^2, \xi\in[-1,1]
R(x)=5!f5(ξ)(x+1)(x−1)2x2,ξ∈[−1,1]
分段插值
Rouge现象
该现象只一些函数使用插值预测时,会在边缘点产生极大的误差,且插值多项式次数越高误差越大,详细介绍可见该文章,形如下图:
所以在一些函数中并非多项式的次数越高越能逼近原曲线,针对这类函数,我们采用分治法进行处理,即在多个区间分别使用插值法进行逼近。
分段线性插值
设
y
=
f
(
x
)
在
a
=
x
0
<
x
2
<
.
.
.
<
x
n
=
b
处的函数值
y
k
=
f
(
x
k
)
y=f(x)在a=x_{0}<x_{2}<...<x_{n}=b处的函数值y_{k}=f(x_{k})
y=f(x)在a=x0<x2<...<xn=b处的函数值yk=f(xk),求一折现函数
φ
n
(
x
)
\varphi_{n}(x)
φn(x)满足
1,在[a,b]上连续
2,
φ
(
x
k
)
=
f
(
x
k
)
\varphi(x_{k})=f(x_{k})
φ(xk)=f(xk)函数值相同
3,
φ
n
(
x
)
=
x
−
x
k
+
1
x
k
−
x
k
+
1
f
(
x
k
)
+
x
−
x
k
x
k
+
1
−
x
k
f
(
x
k
+
1
)
\varphi_{n}(x)=\frac{x-x_{k+1}}{x_{k}-x_{k+1}}f(x_{k})+\frac{x-x_{k}}{x_{k+1}-x_{k}}f(x_{k+1})
φn(x)=xk−xk+1x−xk+1f(xk)+xk+1−xkx−xkf(xk+1)
则称
φ
n
(
x
)
\varphi_{n}(x)
φn(x)为
f
(
x
)
f(x)
f(x)在[a,b]上的分段线性插值多项式。
定理: ∣ f ( x ) − φ ( x ) ∣ ≤ M 8 h 2 |f(x)-\varphi(x)|\le\frac{M}{8}h^2 ∣f(x)−φ(x)∣≤8Mh2, M = m a x 0 ≤ x ≤ b ∣ f ′ ′ ( x ) ∣ M=max_{0\le x\le b}|f''(x)| M=max0≤x≤b∣f′′(x)∣, h = m a x 0 ≤ k ≤ n − 1 ∣ x k + 1 − x k ∣ h=max_{0\le k\le n-1}|x_{k+1}-x_{k}| h=max0≤k≤n−1∣xk+1−xk∣
例题:
f
(
x
)
=
1
1
+
x
2
,
−
5
≤
x
≤
5
f(x)=\frac{1}{1+x^2},-5\le x \le 5
f(x)=1+x21,−5≤x≤5,取
n
=
10
n=10
n=10,按等距节点求分段线性插值多项式,记为
φ
n
(
x
)
\varphi_{n}(x)
φn(x),并求
φ
n
(
0.5
)
\varphi_{n}(0.5)
φn(0.5)
解:
f
(
0
)
=
1
,
f
(
1
)
=
1
2
,
x
∈
(
0
,
1
)
f(0)=1,f(1)=\frac{1}{2},x\in(0,1)
f(0)=1,f(1)=21,x∈(0,1),使用拉格朗日构造插值多项式,
φ
n
(
x
)
=
y
0
l
0
(
x
)
+
y
1
l
1
(
x
)
=
1
x
−
1
0
−
1
+
1
2
x
−
3
1
−
3
\varphi_{n}(x)=y_{0}l_{0}(x)+y_{1}l_{1}(x)=1\frac{x-1}{0-1}+\frac{1}{2}\frac{x-3}{1-3}
φn(x)=y0l0(x)+y1l1(x)=10−1x−1+211−3x−3,
φ
n
(
0.5
)
=
0.5
+
0.25
=
0.75
\varphi_{n}(0.5)=0.5+0.25=0.75
φn(0.5)=0.5+0.25=0.75
总的来说就是区间节点求两端函数值,中间用线性插值,全写为分段函数的形式。
总结
本章介绍了给定离散点,建立多项式函数预测其中为给定的函数值的方法,建立多项式函数的方法有以下两种:
1,Lagrange插值法,
L
n
(
x
)
=
y
0
l
0
(
x
)
+
y
1
l
1
(
x
)
+
.
.
.
+
y
n
l
n
(
x
)
L_{n}(x)=y_{0}l_{0}(x)+y_{1}l_{1}(x)+...+y_{n}l_{n}(x)
Ln(x)=y0l0(x)+y1l1(x)+...+ynln(x),
l
i
(
x
)
=
(
x
−
x
0
)
(
x
−
x
1
.
.
.
(
x
−
x
i
−
1
)
(
x
−
x
i
+
1
)
.
.
.
(
x
−
x
n
)
(
x
i
−
x
0
)
(
x
i
−
x
1
)
.
.
.
(
x
i
−
x
i
−
1
)
(
x
i
−
x
i
+
1
)
.
.
.
(
x
i
−
x
n
)
l_{i}(x)=\frac{(x-x_{0})(x-x_{1}...(x-x_{i-1})(x-x_{i+1})...(x-x_{n})}{(x_{i}-x_{0})(x_{i}-x_{1})...(x_{i}-x_{i-1})(x_{i}-x_{i+1})...(x_{i}-x_{n})}
li(x)=(xi−x0)(xi−x1)...(xi−xi−1)(xi−xi+1)...(xi−xn)(x−x0)(x−x1...(x−xi−1)(x−xi+1)...(x−xn),该算法没有承袭性,故有Newton法来补足。
2,Newton插值法,该方法利用定义的差商进行计算,公式为
f
(
x
)
=
f
(
x
0
)
+
f
[
x
0
,
x
1
]
(
x
−
x
0
)
+
.
.
.
+
f
[
x
0
,
x
1
.
.
.
x
n
,
x
]
(
x
−
x
0
)
(
x
−
x
1
)
.
.
.
(
x
−
x
n
)
f(x)=f(x_{0})+f[x_{0},x_{1}](x-x_{0})+...+f[x_{0},x_{1}...x_{n},x](x-x_{0})(x-x_{1})...(x-x_{n})
f(x)=f(x0)+f[x0,x1](x−x0)+...+f[x0,x1...xn,x](x−x0)(x−x1)...(x−xn),计算时利用差商表,每一项的计算可用上一步的计算结果,加快了迭代过程。
除了函数值预测以外,还要满足导数相等时,需使用Hermite插值法,该方法使用Lagrange法证明,Newton法计算,计算时将导数值相等的点视为重节点,使用Newton法计算即可,重节点的插值即为该点导数。
最后介绍了一种应对容格现象的插值方法——分段插值法,只是将函数拆分成多个区间,分别计算插值公式,最后得到分段函数。