分段插值法
用多项式作为插值函数来逼近某一函数f(x)f(x)f(x)是最简单易行的一种插值方法,但是插值多项式的次数是随着插值节点的数目而增加的,且次数高的插值多项式往往插值效果并不理想,会出现所谓的Runge现象,即在插值函数pn(x)p_n(x)pn(x)的两端会发生激烈地震荡(不稳定)。为此,在实际应用中常采用分段插值方法。
所谓分段插值法就是将被插值函数逐段多项式化,构造一个分段多项式作为插值函数。
分段插值:首先,将插值区间划分为若干小段,在每一小段上使用低阶插值;然后,将各小段上的插值多项式拼接在一起作为整个区间上的插值函数。如果使用的低阶插值为线性插值(两点插值),则将拼接成一条折线,用它来逼近函数f(x)f(x)f(x)。
应用低阶插值的关键在于恰当地选择插值节点。由插值余项公式(9)可知,所选节点xix_ixi离插值点x越近则误差越小。
- 分段线性插值
将插值区间[a,b][a,b][a,b]分成
a=x0,x1,x2,⋯ ,xn=b
a=x_0,x_1,x_2,\cdots,x_n=b
a=x0,x1,x2,⋯,xn=b
n个小段,在每一个小段[xi−1,xi](i=1,2,⋯ ,n)[x_{i-1},x_i](i=1,2,\cdots,n)[xi−1,xi](i=1,2,⋯,n)上,其分段线性插值的公式为:
s(x)=yi+yi−yi−1xi−xi−1(x−xi)
s(x)=y_i+\frac{y_i-y_{i-1}}{x_i-x_{i-1}}(x-x_i)
s(x)=yi+xi−xi−1yi−yi−1(x−xi)
根据
i={1x≤x0kxk−1<x≤xk时,(1≤k≤n)nx>xn
i = \begin{cases}
1 \quad x\leq x_0 \\
k \quad x_{k-1}<x\leq x_k时,(1\leq k\leq n) \\
n \quad x>x_n
\end{cases}
i=⎩⎪⎨⎪⎧1x≤x0kxk−1<x≤xk时,(1≤k≤n)nx>xn
选择插值节点,即当插值节点为x0,x1,x2,⋯ ,xk−1,xk,⋯ ,xnx_0,x_1,x_2,\cdots,x_{k-1},x_k,\cdots,x_nx0,x1,x2,⋯,xk−1,xk,⋯,xn时,依次从左至右取出各节点。如果插值点x不超过节点x1x_1x1(即在[x0,x1][x_0,x_1][x0,x1]之间),则取节点x0x_0x0和x1x_1x1进行线性插值,否则,再检查x是否超过x2,⋯x_2,\cdotsx2,⋯,依次逐步检查。一旦发现x不超过某个节点xnx_nxn,则取它与前面一个节点xn−1x_{n-1}xn−1进行线性插值。如果x已超过xn−1x_{n-1}xn−1,则不论是否超过xnx_nxn,插值节点均取xnx_nxn和xn−1x_{n-1}xn−1(也就是一律当成是在[xn−1,xn][x_{n-1},x_n][xn−1,xn])范围内取插值点。
在小段[xn−1,xn][x_{n-1},x_n][xn−1,xn]上,分段线性插值的误差是:
∣R(x)∣=∣f(x)−s(x)∣≤∣f(2)(ξ)∣8(xn−xn−1)2,ξ∈[xn−1,xn]
|R(x)|=|f(x)-s(x)|\leq \frac{|f^{(2)}(\xi)|}{8}(x_n-x_{n-1})^2, \quad \xi \in [x_{n-1},x_n]
∣R(x)∣=∣f(x)−s(x)∣≤8∣f(2)(ξ)∣(xn−xn−1)2,ξ∈[xn−1,xn]
可见,当f(2)f^{(2)}f(2)有界时,小段[xn−1,xn][x_{n-1},x_n][xn−1,xn]越小,分段线性插值的误差就越小。用分段线性插值方法提高插值精度是有效的。
- 分段抛物插值
为了提高插值精度,可以在每一小段取3个节点xi−1,xix_{i-1},x_ixi−1,xi和xi+1x_{i+1}xi+1进行二次插值,从而构成分段抛物插值。其插值公式如下:
y=(x−xi)(x−xi+1)(xi−1−xi)(xi−1−xi+1)⋅yx−1+(x−xi−1)(x−xi+1)(xi−xi−1)(xi−xi+1)⋅yi+(x−xi−1)(x−xi)(xi+1−xi−1)(xi+1−xi)⋅yi
y=\frac{(x-x_i)(x-x_{i+1})}{(x_{i-1}-x_i)(x_{i-1}-x_{i+1})}·y_{x-1}+\frac{(x-x_{i-1})(x-x_{i+1})}{(x_i-x_{i-1})(x_i-x_{i+1})}·y_i+\frac{(x-x_{i-1})(x-x_{i})}{(x_{i+1}-x_{i-1})(x_{i+1}-x_i)}·y_i
y=(xi−1−xi)(xi−1−xi+1)(x−xi)(x−xi+1)⋅yx−1+(xi−xi−1)(xi−xi+1)(x−xi−1)(x−xi+1)⋅yi+(xi+1−xi−1)(xi+1−xi)(x−xi−1)(x−xi)⋅yi
根据
i={1x<x1k−1xk−1<x<xk且∣x−xk−1∣≤∣x−xk∣,k=2,3,⋯ ,n−1kxk−1<x<xk且∣x−xk−1∣>∣x−xk∣,k=2,3,⋯ ,n−1n−1x>xn−1
i=\begin{cases}
1 \quad x<x_1 \\
k-1 \quad x_{k-1}<x<x_k 且 |x-x_{k-1}|\leq |x-x_k|, k=2,3,\cdots,n-1 \\
k \quad x_{k-1}<x<x_k 且|x-x_{k-1}|>|x-x_k|,k=2,3,\cdots,n-1 \\
n-1 \quad x>x_{n-1}
\end{cases}
i=⎩⎪⎪⎪⎨⎪⎪⎪⎧1x<x1k−1xk−1<x<xk且∣x−xk−1∣≤∣x−xk∣,k=2,3,⋯,n−1kxk−1<x<xk且∣x−xk−1∣>∣x−xk∣,k=2,3,⋯,n−1n−1x>xn−1
选择插值节点。即靠近x0x_0x0取i=1i=1i=1,计算节点为x0,x1,x2x_0,x_1,x_2x0,x1,x2;靠近xk−1x_{k-1}xk−1取i=k−1i=k-1i=k−1,计算节点为xk−2,xk−1,xkx_{k-2},x_{k-1},x_kxk−2,xk−1,xk;靠近xkx_kxk取i=ki=ki=k,计算节点为xk−1,xk,xk+1x_{k-1},x_k,x_{k+1}xk−1,xk,xk+1;靠近xnx_nxn取i=n−1i=n-1i=n−1,计算节点为xn−2,xn−1,xnx_{n-2},x{n-1},x_nxn−2,xn−1,xn。
- 分段插值方法特点
(1)分段插值方法算法简单,收敛性可以得到保证,只要节点间距充分小,就能达到任何精度的要求。
(2)如需修改某个数据,则插值函数仅在相关的某个局部范围内受影响。
(3)分段抛物插值所拼接成的插值函数曲线不一定光滑。
本文详细介绍了分段插值法,一种有效避免高次插值多项式不稳定性的方法。通过将插值区间分为多个小段,每段进行低阶插值,既保证了插值效果又提高了精度。文章探讨了分段线性插值和分段抛物插值的原理及应用。
1243

被折叠的 条评论
为什么被折叠?



