数值分析 插值法
插值法的基本概念
对于一条未知曲线,通过已知过曲线的一些点来近似求出这个曲线的函数表达式
线性插值
通过泰勒展开式,已知任何一种曲线都可以多项式线性表出,已知点 x 1 , x 2 . . . x n x_1,x_2...x_n x1,x2...xn以及对应点的函数值 f ( x 1 ) , f ( x 2 ) . . . , f ( x n ) f(x_1),f(x_2)...,f(x_n) f(x1),f(x2)...,f(xn)(此条件以下默认),求过这些点的多项式
已知如果已知n个节点和对应的函数值,就有n个已知条件、可以求出n个位置数、可以确定n-1次方程
拉格朗日插值法
拉格朗日插值多项式的基本表达式:
f
(
x
)
=
∑
i
=
0
n
l
i
f
(
x
i
)
f(x)=\sum_{i=0}^{n}l_if(x_i)
f(x)=i=0∑nlif(xi)
其中
l
i
l_i
li是拉个朗日插值基函数
l
i
=
∏
j
=
0
,
j
≠
i
n
x
−
x
j
x
i
−
x
j
l_i=\prod_{j=0,j\neq{i}}^n\frac{x-x_j}{x_i-x_j}
li=j=0,j=i∏nxi−xjx−xj
n个插值点的拉格朗日插值多项是的误差:
R
n
=
f
n
+
1
(
ξ
)
(
n
+
1
)
!
ω
n
+
1
(
x
)
R_n=\frac{f^{n+1}(\xi)}{(n+1)!}\omega_{n+1}(x)
Rn=(n+1)!fn+1(ξ)ωn+1(x)
其中
ω
n
+
1
(
x
)
=
∏
i
=
0
n
(
x
−
x
i
)
\omega_{n+1}(x)=\prod _{i=0}^{n}(x-x_i)
ωn+1(x)=i=0∏n(x−xi)
ps:线性插值的多项式是唯一的,及拉格朗日插值多项式和牛顿插值多项是虽然表示形式不同,本质还是一样的,并且误差项也是相同的
常用的拉格朗日插值多项式:
-
拉格朗日线性插值(n=2),方程式
f ( x ) = x − x 2 x 1 − x 2 f ( x 1 ) + x − x 1 x 2 − x 1 f ( x 2 ) f(x)=\frac{x-x_2}{x_1-x_2}f(x_1)+\frac{x-x_1}{x_2-x_1}f(x_2) f(x)=x1−x2x−x2f(x1)+x2−x1x−x1f(x2)误差项
R n ( x ) = f ′ ′ ′ ( ξ ) 6 ( x − x 1 ) ( x − x 2 ) R_n(x)=\frac{f'''(\xi)}{6}(x-x_1)(x-x_2) Rn(x)=6f′′′(ξ)(x−x1)(x−x2) -
拉格朗日抛物线插值(n=3),方程式
f ( x ) = ( x − x 2 ) ( x − x 3 ) ( x 1 − x 2 ) ( x 1 − x 3 ) f ( x 1 ) + ( x − x 1 ) ( x − x 3 ) ( x 2 − x 1 ) ( x 2 − x 3 ) f ( x 2 ) + ( x − x 1 ) ( x − x 2 ) ( x 3 − x 1 ) ( x 3 − x 2 ) f ( x 2 ) f(x)=\frac{(x-x_2)(x-x_3)}{(x_1-x_2)(x_1-x_3)}f(x_1)+\frac{(x-x_1)(x-x_3)}{(x_2-x_1)(x_2-x_3)}f(x_2)+\frac{(x-x_1)(x-x_2)}{(x_3-x_1)(x_3-x_2)}f(x_2) f(x)=(x1−x2)(x1−x3)(x−x2)(x−x3)f(x1)+(x2−x1)(x2−x3)(x−x1)(x−x3)f(x2)+(x3−x1)(x3−x2)(x−x1)(x−x2)f(x2)误差项
R n ( x ) = f ( 4 ) ( ξ ) 24 ( x − x 1 ) ( x − x 2 ) ( x − x 3 ) R_n(x)=\frac{f^{(4)}(\xi)}{24}(x-x_1)(x-x_2)(x-x_3) Rn(x)=24f(4)(ξ)(x−x1)(x−x2)(x−x3)
牛顿插值多项式法
牛顿插值多项式的基本表达式:
f
(
x
)
=
f
(
x
0
)
+
f
[
x
0
,
x
1
]
(
x
−
x
0
)
+
f
[
x
0
,
x
1
,
x
2
]
(
x
−
x
0
)
(
x
−
x
1
)
+
.
.
.
+
f
[
x
0
,
x
1
,
.
.
.
.
,
x
n
]
(
x
−
x
0
)
(
x
−
x
1
)
.
.
.
(
x
−
x
n
−
1
)
f(x)=f(x_0)+f[x_0,x_1](x-x_0)+f[x_0,x_1,x_2](x-x_0)(x-x_1)+...+f[x_0,x_1,....,x_n](x-x_0)(x-x_1)...(x-x_n-1)
f(x)=f(x0)+f[x0,x1](x−x0)+f[x0,x1,x2](x−x0)(x−x1)+...+f[x0,x1,....,xn](x−x0)(x−x1)...(x−xn−1)
牛顿插值多项式的误差
R
n
(
x
)
=
f
[
x
,
x
0
,
x
1
,
.
.
.
,
x
n
]
ω
n
+
1
(
x
)
=
R
n
=
f
n
+
1
(
ξ
)
(
n
+
1
)
!
ω
n
+
1
(
x
)
R_n(x)=f[x,x_0,x_1,...,x_n]\omega_{n+1}(x)=R_n=\frac{f^{n+1}(\xi)}{(n+1)!}\omega_{n+1}(x)
Rn(x)=f[x,x0,x1,...,xn]ωn+1(x)=Rn=(n+1)!fn+1(ξ)ωn+1(x)
其中 f [ x 0 , x 1 ] f[x_0,x_1] f[x0,x1] 表示均差(差商),一阶均差 f [ x 0 , x 1 ] = f ( x 0 ) − f ( x 1 ) x 0 − X 1 f[x_0,x_1]=\frac{f(x_0)-f(x_1)}{x_0-X_1} f[x0,x1]=x0−X1f(x0)−f(x1)
n+1阶均差可由n阶均差求得
f
n
+
1
[
x
0
,
x
1
,
.
.
.
,
x
n
]
=
f
n
[
x
0
,
x
1
,
.
.
.
,
x
n
−
1
]
−
f
n
[
x
1
,
x
2
,
.
.
.
,
x
n
]
x
0
−
x
n
f_{n+1}[x_0,x_1,...,x_n]=\frac{f_{n}[x_0,x_1,...,x_{n-1}]-f_{n}[x_1,x_2,...,x_{n}]}{x_0-x_n}
fn+1[x0,x1,...,xn]=x0−xnfn[x0,x1,...,xn−1]−fn[x1,x2,...,xn]
亦可以通过均差表线性表出
x i x_i xi | y i y_i yi | 一阶均差 | 二阶均差 | … | n阶均差 |
---|---|---|---|---|---|
x 0 x_0 x0 | y 0 y_0 y0 | ||||
x 1 x_1 x1 | y 1 y_1 y1 | f [ x 0 , x 1 ] f[x_0,x_1] f[x0,x1] | |||
x 2 x_2 x2 | y 2 y_2 y2 | f [ x 1 , x 2 ] f[x_1,x_2] f[x1,x2] | f [ x 0 , x 1 , x 2 ] f[x_0,x_1,x_2] f[x0,x1,x2] | ||
… | … | … | … | ||
x n x_n xn | y n y_n yn | f [ x n − 1 , x n ] f[x_{n-1},x_{n}] f[xn−1,xn] | f [ x n − 2 , x n − 1 , x n ] f[x_n-2,x_n-1,x_n] f[xn−2,xn−1,xn] | … | f [ x 0 , x 1 , . . . , x n ] f[x_0,x_1,...,x_n] f[x0,x1,...,xn] |
由均差表可以知道在增加一个节点的时候只需要在表的最下方增加一行,原有的计算可以全部保留,对于迭代计算来说省去计算量
埃米尔特插值
三次埃米尔特插值公式,已知两点以及两点的导数求原函数
H
3
(
x
)
=
y
0
α
0
(
x
)
+
y
1
α
1
(
x
)
+
m
0
β
0
(
x
)
+
m
1
β
1
(
x
)
H_3(x)=y_0\alpha_0(x)+y_1\alpha_1(x)+m_0\beta_0(x)+m_1\beta_1(x)
H3(x)=y0α0(x)+y1α1(x)+m0β0(x)+m1β1(x)
其中
α
0
(
x
)
=
(
1
+
2
x
−
x
0
x
1
−
x
0
)
(
x
−
x
1
x
0
−
x
1
)
2
α
1
(
x
)
=
(
1
+
2
x
−
x
1
x
0
−
x
1
)
(
x
−
x
0
x
1
−
x
0
)
2
β
0
(
x
)
=
(
x
−
x
0
)
(
x
−
x
1
x
0
−
x
1
)
2
β
1
(
x
)
=
(
x
−
x
1
)
(
x
−
x
0
x
1
−
x
0
)
2
\\[5pt]\alpha_0(x)=(1+2\frac{x-x_0}{x_1-x_0})(\frac{x-x_1}{x_0-x_1})^2 \\[5pt]\alpha_1(x)=(1+2\frac{x-x_1}{x_0-x_1})(\frac{x-x_0}{x_1-x_0})^2 \\[5pt]\beta_0(x)=(x-x_0)(\frac{x-x_1}{x_0-x_1})^2 \\[5pt]\beta_1(x)=(x-x_1)(\frac{x-x_0}{x_1-x_0})^2
α0(x)=(1+2x1−x0x−x0)(x0−x1x−x1)2α1(x)=(1+2x0−x1x−x1)(x1−x0x−x0)2β0(x)=(x−x0)(x0−x1x−x1)2β1(x)=(x−x1)(x1−x0x−x0)2
埃米尔特三次插值多项式的误差
R
3
(
x
)
=
1
4
!
f
(
4
)
(
ξ
)
(
x
−
x
0
)
2
(
x
−
x
1
)
2
R_3(x)=\frac{1}{4!}f^{(4)}(\xi)(x-x_0)^2(x-x_1)^2
R3(x)=4!1f(4)(ξ)(x−x0)2(x−x1)2
三个节点的埃米尔特三次插值多项式
已知三个节点和对应节点的函数值以及对应一个节点的导数值求三次多项式
利用三个节点构造二阶牛顿插值多项式
N
2
N_2
N2加上,利用导数值列出等式,求出待定系数
P
(
x
)
=
N
2
(
x
)
+
C
(
x
−
x
0
)
(
x
−
x
1
)
(
x
−
x
2
)
N
2
(
x
)
=
f
(
x
0
)
+
f
[
x
0
,
x
1
]
(
x
−
x
0
)
+
f
[
x
0
,
x
1
,
x
2
]
(
x
−
x
0
)
(
x
−
x
1
)
\\[5pt]P(x)=N_2(x)+C(x-x_0)(x-x_1)(x-x_2) \\[5pt]N_2(x)=f(x_0)+f[x_0,x_1](x-x_0)+f[x_0,x_1,x_2](x-x_0)(x-x_1)
P(x)=N2(x)+C(x−x0)(x−x1)(x−x2)N2(x)=f(x0)+f[x0,x1](x−x0)+f[x0,x1,x2](x−x0)(x−x1)
三次埃米尔特插值多项式的误差项
R
n
(
x
)
=
f
(
4
)
(
ξ
)
4
!
(
x
−
x
0
)
(
x
−
x
1
)
2
(
x
−
x
2
)
R_n(x)=\frac{f^{(4)}(\xi)}{4!}(x-x_0)(x-x_1)^2(x-x_2)
Rn(x)=4!f(4)(ξ)(x−x0)(x−x1)2(x−x2)
分段插值多项式
分段线性插值
将区间分成n个小区间,每个小区间里面使用拉格朗日线性插值得到一个多项式
避免了龙格现象,误差不会扩散
分段线性插值多项式的误差项为
R
(
x
)
=
∣
f
(
x
)
−
φ
(
x
)
∣
≤
h
2
8
M
M
=
max
x
∈
[
a
,
b
]
f
′
′
(
x
)
R(x)=|f(x)-\varphi(x)|\le\frac{h^2}{8}M \\M=\max \limits_{x\in[a,b]}f''(x)
R(x)=∣f(x)−φ(x)∣≤8h2MM=x∈[a,b]maxf′′(x)
三次样条插值函数
2021年4月8日20点36分
待更新…