美文网首页
三次样条插值

三次样条插值

作者: carry_xz | 来源:发表于2019-05-24 14:50 被阅读0次

    三次样条插值

       设S(x)满足样本点要求,则只需在每个子区间[x_j,x_{j+1}]上确定1个三次多项式,假设为:
    S_j(x)=a_jx^3+b_jx^2+c_jx+d
       假设有n个点,需要n-1条线描述,每条线四个未知数, 则未知数个数为4(n-1)。显然中间(n-2)个点具有4个约束条件:
    S(x_j) = f(x_j)
    S'(x_j+0) = f'(x_j-0)
    S''(x_j+0) = f''(x_j-0)
    S'''(x_j+0) = f'''(x_j-0)
       两端端点存在约束S(x_i) = f(x_i),则约束方程有4(n-2)+2=4(n-1)-2,所以,总的未知数个数比方程个数多两个。所以需要额外的两个约束,于是就有了三种边界条件的插值算法。

    • 第 1 类边界条件:给定端点处的一阶导数值S'(x_1)=y_1',S'(x_n)=y_n'
    • 第 2 类边界条件:给定端点处的二阶导数值
      S'' (x_1)=y_1'',S'' (x_n)=y_n''
    • 第 3 类边界条件是周期性条件,如果y=f(x)是以[xj,xj+1]为周期的函数,于是S(x) 在端点处满足条件
      S'(x_1+0)=S'(x_n-0),S"(x+0)=S"(x_n-0)

    推导过程

       S(x) 在 [x_j,x_{j+1}](j=1,2,⋯,n-1)上是三次多项式,于是S"(x)在[x_j,x_{j+1}]上是一次多项式,假设S"(x) 在[x_j,x_{j+1}](j=1,2,⋯,n-1)两端点上的值已知,设

    S''(x) = \frac {x_{j+1}-x}{h_j}M_j+\frac {x-x_j}{h_j}M_{j+1}

      其中h_j = x_{j+1}- x_j
      对S''(x)进行两次积分可得:

    S(x) = \frac{(x_{j+1}-x)^3}{6h_j}M_j+\frac{(x-x_j)^3}{6h_j}M_{j+1}+A_jx+B_j

      以上是在[x_j,x_{j+1}]上求得的S(x)同理可求[x_{j-1},x_j]上的S(x),将x_j同时代入两个函数联立方程,可以求得A_j、B_j

    A_j = \frac{y_{j+1}-y_j}{h_j}-\frac{M_{j+1}-M_j}{6}h_j

    B_j = y_{j+1}-\frac{M_{j+1}}{6}h_j^2-[\frac{y_{j+1}-y_j}{h_j}-\frac{M_{j+1}-M_j}{6}h_j]x_{j+1}
      将A_j、B_j代入S(x)可得
    S(x) = -\frac{(x_{j+1}-x)^3}{6h_j}M_j+\frac{(x-x_{j})^3}{6h_j}M_{j+1}+[y_j-\frac{M_{j}}{6}h_j^2]\frac{x_{j+1}-x}{h_j}+[y_{j+1}-\frac{M_{j+1}}{6}h_j^2]\frac{x-x_{j}}{h_j}
      求导后得:
    S'(x) = -\frac{(x_{j+1}-x)^2}{2h_j}M_j+\frac{(x-x_{j})^2}{2h_j}M_{j+1}+\frac{y_{j+1}-y_j}{h_j}-\frac{M_{j+1}-M_j}{6}h_j
      同理分别写出[x_{j-1},x_j],[x_j,x_{j+1}]上的S'(x),联立等式,简化后可得:

    \gamma M_{j-1}+2M_j+\mu M_{j+1}=d_j

    在matlab实现时注意:n个点,n-1条线,以上矩阵是由相邻的两条线的微分方程联立而来(一阶连续),因此方程总个数减少了1,矩阵中有n-2个方程。 另外,用matlab实现时需要注意,matlab中下标从1开始,其他语言下标可能从0开始。

    相关文章

      网友评论

          本文标题:三次样条插值

          本文链接:https://www.haomeiwen.com/subject/nonfoqtx.html