多项式插值随着点数的增加,多项式的次数也在增加,由于 龙格现象,所以多项式插值的误差也增加了。
那怎么做才可以使增加节点,多项式插值误差减小呢?
这种方法叫做分段插值方法:
先将区间划分为若干个小区间,然后在每个小区间用低次多项式代替单个多项式做插值,并将每个小区间上所得到的多项式连接成一条连续曲线。
所得的多项式称为 分段插值多项式。
分段线性插值
即在每一个区间上使用一次多项式作为插值多项式,即每段一条直线。
设 a = x 0 < x 1 < x 2 < . . . < x n = b a = {x_0} < {x_1} < {x_2} < ... < {x_n} = b a=x0<x1<x2<...<xn=b,则节点把 [ a , b ] [a,b] [a,b]分成n个小区间,当插值点x在第i个小区间 [ x i − 1 , x i ] [{x_{i - 1}},{x_i}] [xi−1,xi]时,
采用一次Lagrange插值多项式:
g 1 i ( x ) = x − x i x i − 1 − x i y i − 1 + x − x i − 1 x i − x i − 1 y i , x i − 1 ≤ x ≤ x i , i = 1 , 2 , . . . , n g_{1i}^{}(x) = \frac{
{x - {x_i}}}{
{
{x_{i - 1}} - {x_i}}}{y_{i - 1}} + \frac{
{x - {x_{i - 1}}}}{
{
{x_i} - {x_{i - 1}}}}{y_i},{x_{i - 1}} \le x \le {x_i},i = 1,2,...,n g1i(x)=xi−1−xix−xiyi−1+xi−xi−1x−xi−1yi,xi−1≤x≤xi,i=1,2,...,n
采用Newton插值多项式:
g 1 i ( x ) = y i − 1 + y [ x i − 1 , x i ] ( x − x i − 1 ) , x i − 1 ≤ x ≤ x i , i = 1 , 2 , . . . , n g_{1i}^{}(x) = {y_{i - 1}} + y[{x_{i - 1}},{x_i}](x - {x_{i - 1}}),{x_{i - 1}} \le x \le {x_i},i = 1,2,...,n g1i(x)=yi−1+y[xi−1,xi](x−xi−1),xi−1≤x≤xi,i=1,2,...,n
分段线型插值的误差:
E ( g 1 i ) = ∣ y ′ ′ ( ξ ) 2 ( x − x i − 1 ) ( x − x i ) ∣ ≤ M 2 , i 2 ∣ ( x − x i − 1 ) ( x − x i ) ∣ E({g_{1i}}) = \left| {\frac{
{y''(\xi )}}{2}(x - {x_{i - 1}})(x - {x_i})} \right| \le \frac{
{
{M_{2,i}}}}{2}\left| {(x - {x_{i - 1}})(x - {x_i})} \right| E(g1i)=∣∣∣2y′′(ξ)(x−xi−1)(x−xi)∣∣∣≤2M2,i∣(x−xi−1)(x−xi)∣
设 M 2 , i = max x i − 1 ≤ x ≤ x i ∣ y ′ ′ ( x ) ∣ {M_{2,i}} = \mathop {\max }\limits_{
{x_{i - 1}} \le x \le {x_i}} \left| {y''(x)} \right| M2,i=xi−1≤x≤ximax∣y′′(x)∣,表示在 [ x i − 1 , x i ] [x_{i-1},x_i] [xi−1,xi]区间上的2阶导的绝对值最大值。
max x ∣ ( x − x i − 1 ) ( x − x i ) ∣ = 1 4 ( x i − x i − 1 ) 2 \mathop {\max }\limits_x \left| {(x - {x_{i - 1}})(x - {x_i})} \right| = \frac{1}{4}{({x_i} - {x_{i - 1}})^2} xmax∣(x−xi−1)(x−xi)∣=41(xi−xi−1)2
因此 E ( g 1 i ) ≤ M 2 , i 8 ( x i − x i − 1 ) 2 \mathop {E({g_{1i}}) \le \frac{
{
{M_{2,i}}}}{8}}\limits_{} {({x_i} - {x_{i - 1}})^2} E(g1i)≤8M2,i(xi−xi−1)2
定理:
设 g 1 ( x ) {g_1}(x) g1(x)是在 a = x 0 < x 1 < ⋯ < x n = b a = {x_0} < {x_1} < \cdots < {x_n} = b a=x0<x1<⋯<xn=b上插值 y ( x i ) y({x_i}) y(xi)的分段线型插值多项式,若 y ′ ′ ( x ) y''(x) y′′(x)在 [ a , b ] [a,b] [a,b]上连续,则有误差估计:
E ( g 1 ) ≤ 1 8 M 2 Δ 2 E({g_1}) \le \frac{1}{8}{M_2}{\Delta ^2} E(g1)≤81M2Δ2
其中 M 2 = max x M 2 , i = max a ≤ x ≤ b ∣ y ′ ′ ( x ) ∣ , Δ = max 1 ≤ i ≤ n ( x i − x i − 1 ) {M_2} = \mathop {\max }\limits_x {M_{2,i}} = \mathop {\max }\limits_{a \le x \le b} \left| {y''(x)} \right|,\Delta = \mathop {\max }\limits_{1 \le i \le n} ({x_i} - {x_{i - 1}}) M2=xmaxM2,i=a≤x≤bmax∣y′′(x)∣,Δ=1≤i≤nmax(xi−xi−1)
式中,只有 Δ \Delta Δ会随n的变化而改变。所以,只要增加的插值数据点在最长的子区间中,那么当节点数目增大时, Δ \Delta Δ将减小。所以按照这种方法增加插值数据点会使误差随n的增大而趋于0。
优缺点:
优点:计算量少,可以保证插值准确性。
缺点:曲线在节点处不可导,即光滑程度较差。
分段二次插值
既然线性插值的光滑程度较差,我们可以尝试提高次数,使用二次插值。
若将区间[a,b]分成偶数个子区间,在每相邻的两个子区间上做二次插值多项式 g 2 i ( x ) {g_{2i}}(x) g2i(x),即在子区间 [ x i − 1 , x i + 1 ] [{x_{i - 1}},{x_{i + 1}}] [xi−1,xi+1]上, g 2 i ( x ) {g_{2i}}(x) g2i(x)是以 ( x i − 1 , y i − 1 ) , ( x i , y i ) , ( x i + 1 , y i + 1 ) ({x_{i - 1}},{y_{i - 1}}),({x_i},{y_i}),({x_{i + 1}},{y_{i + 1}}) (xi−1,yi−1),(xi,yi),(xi+1,yi+1)为插值点的插值多项式 ( i = 1 , 3 , . . . , n − 1 ) (i = 1,3,...,n - 1) (i=1,3,...,n−1)。
采用Newton插值多项式:
g 2 i ( x ) = y i − 1 + y [ x i − 1 , x i ] ( x − x i − 1 ) + y [ x i − 1 , x i , x i + 1 ] ( x − x i − 1 ) ( x − x i ) {g_{2i}}(x) = {y_{i - 1}} + y[{x_{i - 1}},{x_i}](x - {x_{i - 1}}) + y[{x_{i - 1}},{x_i},{x_{i + 1}}](x - {x_{i - 1}})(x - {x_i}) g2i(x)=yi−1+y[xi−1,xi](x−xi−1)+y[xi−1,xi,xi+1](x−xi−1)(x−xi)
余项为:
y ( x ) − g 2 i ( x ) = y ′ ′ ′ ( ξ i ) 3 ! ( x − x i − 1 ) ( x − x i ) ( x − x i + 1 ) , x ∈ [ x i − 1 , x i + 1 ] , ξ i ∈ [ x i − 1 , x i + 1 ] \begin{array}{l} y(x) - {g_{2i}}(x) = \frac{
{y'''({\xi _i})}}{
{3!}}(x - {x_{i - 1}})(x - {x_i})(x - {x_{i + 1}}), x \in [{x_{i - 1}},{x_{i + 1}}],{\xi _i} \in [{x_{i - 1}},{x_{i + 1}}] \end{array} y(x)−g2i(x)=3!y′′′(ξi)(x−xi−1)(x−xi)(x−xi+1),x∈[xi−1,xi+1],ξi∈[xi−1,xi+1]
定理:
设 g 2 i ( x ) g_{2i}(x) g2i(x)是在 a = x 0 < x 1 < ⋯ < x n = b a = {x_0} < {x_1} < \cdots < {x_n} = b a=x0<x1<⋯<xn=b上插值 y ( x i ) y({x_i}) y(xi)的分段二次插值多项式,若 y ′ ′ ′ ( x ) y'''(x) y′′′(x)在 [ a , b ] [a,b] [a,b]上连续,则有误差估计:
E ( g 1 ) ≤ M 3 12 Δ 3 E({g_1}) \le \frac{M_3}{12}{\Delta ^3} E(g1)≤12M3Δ3
其中 M 2 = max a ≤ x ≤ b ∣ y ′ ′ ′ ( x ) ∣ {M_2} = \mathop {\max }\limits_{a \le x \le b} \left| {y'''(x)} \right| M2=a≤x≤bmax∣y′′′(x)∣
这里的 Δ \Delta Δ指相邻两个区间中较大的。
上述定理可以看出,分段二次插值当合理增加插值点数使 Δ \Delta Δ减小时,分段二次插值的误差也随之减小。光滑性相比样条插值得到了改善,但是仍然一个不可导节点相邻一个可导节点。
三次样条插值
要想让所有节点都“光滑”,按照二次函数的方法只能提高到n次,那就变成了多项式插值。
还有另外一种办法。
在每一个子区间 [ x i − 1 , x i ] [{x_{i - 1}},{x_i}] [xi−1,xi]上是一个三阶多项式,这些多项式的曲线在节点 x i x_i xi处光滑的连接起来,这样的分段三次多项式称为 三次样条函数。
通过数据点 { ( x i , y i ) } ( i = 0 , 1 , 2 , . . . , n ) \{ ({x_i},{y_i})\} (i = 0,1,2,...,n) {
(xi,y