分段插值法 | 分段线性插值 + 分段抛物插值

分段插值法

用多项式作为插值函数来逼近某一函数 f ( x ) f(x) f(x)是最简单易行的一种插值方法,但是插值多项式的次数是随着插值节点的数目而增加的,且次数高的插值多项式往往插值效果并不理想,会出现所谓的Runge现象,即在插值函数 p n ( x ) p_n(x) pn(x)的两端会发生激烈地震荡(不稳定)。为此,在实际应用中常采用分段插值方法。

所谓分段插值法就是将被插值函数逐段多项式化,构造一个分段多项式作为插值函数。

分段插值:首先,将插值区间划分为若干小段,在每一小段上使用低阶插值;然后,将各小段上的插值多项式拼接在一起作为整个区间上的插值函数。如果使用的低阶插值为线性插值(两点插值),则将拼接成一条折线,用它来逼近函数 f ( x ) f(x) f(x)

应用低阶插值的关键在于恰当地选择插值节点。由插值余项公式(9)可知,所选节点 x i x_i xi离插值点x越近则误差越小。

  1. 分段线性插值

将插值区间 [ a , b ] [a,b] [a,b]分成
a = x 0 , x 1 , x 2 , ⋯   , x n = b a=x_0,x_1,x_2,\cdots,x_n=b a=x0,x1,x2,,xn=b
n个小段,在每一个小段 [ x i − 1 , x i ] ( i = 1 , 2 , ⋯   , n ) [x_{i-1},x_i](i=1,2,\cdots,n) [xi1,xi](i=1,2,,n)上,其分段线性插值的公式为:
s ( x ) = y i + y i − y i − 1 x i − x i − 1 ( x − x i ) s(x)=y_i+\frac{y_i-y_{i-1}}{x_i-x_{i-1}}(x-x_i) s(x)=yi+xixi1yiyi1(xxi)
根据
i = { 1 x ≤ x 0 k x k − 1 < x ≤ x k 时 , ( 1 ≤ k ≤ n ) n x > x n 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=1xx0kxk1<xxk(1kn)nx>xn
选择插值节点,即当插值节点为 x 0 , x 1 , x 2 , ⋯   , x k − 1 , x k , ⋯   , x n x_0,x_1,x_2,\cdots,x_{k-1},x_k,\cdots,x_n x0,x1,x2,,xk1,xk,,xn时,依次从左至右取出各节点。如果插值点x不超过节点 x 1 x_1 x1(即在 [ x 0 , x 1 ] [x_0,x_1] [x0,x1]之间),则取节点 x 0 x_0 x0 x 1 x_1 x1进行线性插值,否则,再检查x是否超过 x 2 , ⋯ x_2,\cdots x2,,依次逐步检查。一旦发现x不超过某个节点 x n x_n xn,则取它与前面一个节点 x n − 1 x_{n-1} xn1进行线性插值。如果x已超过 x n − 1 x_{n-1} xn1,则不论是否超过 x n x_n xn,插值节点均取 x n x_n xn x n − 1 x_{n-1} xn1(也就是一律当成是在 [ x n − 1 , x n ] [x_{n-1},x_n] [xn1,xn])范围内取插值点。

在小段 [ x n − 1 , x n ] [x_{n-1},x_n] [xn1,xn]上,分段线性插值的误差是:
∣ R ( x ) ∣ = ∣ f ( x ) − s ( x ) ∣ ≤ ∣ f ( 2 ) ( ξ ) ∣ 8 ( x n − x n − 1 ) 2 , ξ ∈ [ x n − 1 , x n ] |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)8f(2)(ξ)(xnxn1)2,ξ[xn1,xn]
可见,当 f ( 2 ) f^{(2)} f(2)有界时,小段 [ x n − 1 , x n ] [x_{n-1},x_n] [xn1,xn]越小,分段线性插值的误差就越小。用分段线性插值方法提高插值精度是有效的。

  1. 分段抛物插值

为了提高插值精度,可以在每一小段取3个节点 x i − 1 , x i x_{i-1},x_i xi1,xi x i + 1 x_{i+1} xi+1进行二次插值,从而构成分段抛物插值。其插值公式如下:
y = ( x − x i ) ( x − x i + 1 ) ( x i − 1 − x i ) ( x i − 1 − x i + 1 ) ⋅ y x − 1 + ( x − x i − 1 ) ( x − x i + 1 ) ( x i − x i − 1 ) ( x i − x i + 1 ) ⋅ y i + ( x − x i − 1 ) ( x − x i ) ( x i + 1 − x i − 1 ) ( x i + 1 − x i ) ⋅ y i 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=(xi1xi)(xi1xi+1)(xxi)(xxi+1)yx1+(xixi1)(xixi+1)(xxi1)(xxi+1)yi+(xi+1xi1)(xi+1xi)(xxi1)(xxi)yi
根据
i = { 1 x < x 1 k − 1 x k − 1 < x < x k 且 ∣ x − x k − 1 ∣ ≤ ∣ x − x k ∣ , k = 2 , 3 , ⋯   , n − 1 k x k − 1 < x < x k 且 ∣ x − x k − 1 ∣ > ∣ x − x k ∣ , k = 2 , 3 , ⋯   , n − 1 n − 1 x > x n − 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<x1k1xk1<x<xkxxk1xxk,k=2,3,,n1kxk1<x<xkxxk1>xxk,k=2,3,,n1n1x>xn1
选择插值节点。即靠近 x 0 x_0 x0 i = 1 i=1 i=1,计算节点为 x 0 , x 1 , x 2 x_0,x_1,x_2 x0,x1x2;靠近 x k − 1 x_{k-1} xk1 i = k − 1 i=k-1 i=k1,计算节点为 x k − 2 , x k − 1 , x k x_{k-2},x_{k-1},x_k xk2,xk1,xk;靠近 x k x_k xk i = k i=k i=k,计算节点为 x k − 1 , x k , x k + 1 x_{k-1},x_k,x_{k+1} xk1,xk,xk+1;靠近 x n x_n xn i = n − 1 i=n-1 i=n1,计算节点为 x n − 2 , x n − 1 , x n x_{n-2},x{n-1},x_n xn2,xn1,xn

  1. 分段插值方法特点

(1)分段插值方法算法简单,收敛性可以得到保证,只要节点间距充分小,就能达到任何精度的要求。

(2)如需修改某个数据,则插值函数仅在相关的某个局部范围内受影响。

(3)分段抛物插值所拼接成的插值函数曲线不一定光滑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值