【问题标题】:Get polynomial coefficients from interpolation splines in R从R中的插值样条获取多项式系数
【发布时间】:2016-01-29 22:03:15
【问题描述】:

我有一组测量值,我想使用三次样条在R 中插值。由于这些只是分段多项式,我随后想代数集成插值函数。因此我需要系数。有没有办法获得这些?
调用 splines::interpSpline(foo, bar)$coef 似乎不会返回实际的多项式系数。

【问题讨论】:

    标签: r interpolation integral splines


    【解决方案1】:

    splines::interpSpline(x,y)$coef 的输出给出了 x(i) 和 x(i+1) 之间部分的多项式系数根据 (x-x(i)) 的幂,而不是幂x。这是有道理的,因为得到的系数大小合理并且更容易解释:例如,每个常数项只是 y(i),二次系数给出了 x(i) 处的凹度,等等。

    例如这个输出

    > x <- c(1,3,6,9)
    > y <- c(3,1,4,1)
    > splines::interpSpline(x,y)$coef
         [,1]        [,2]       [,3]        [,4]
    [1,]    3 -1.54054054  0.0000000  0.13513514
    [2,]    1  0.08108108  0.8108108 -0.16816817
    [3,]    4  0.40540541 -0.7027027  0.07807808
    [4,]    1 -1.70270270  0.0000000  0.00000000
    

    表示

    • 在区间 [1,3] 上,多项式为3 - 1.54054054*(x-1) + 0.13513514*(x-1)^3
    • 在区间 [3,6] 上,多项式为1 + 0.08108108*(x-3) + 0.8108108*(x-3)^2 - 0.16816817*(x-3)^3
    • 在区间 [6,9] 上,多项式为4 + 0.40540541*(x-6) - 0.7027027*(x-6)^2 + 0.07807808*(x-6)^3

    我看不到最后一行有太多用处,它描述了样条线超出 x=9(数据的右端点)的线性延续。

    积分这些并不比积分 x 的幂更难,但如果目标是获得连续的反导数,当然需要选择积分常数。多项式形式的选择使得处理积分常数更容易。假设我们选择左端点值为 0 的反导数,其余如下:

    • 在区间 [1,3] 上,反导数是 3*(x-1) - 1.54054054*(x-1)^2/2 + 0.13513514*(x-1)^4/4
    • 在区间 [3,6] 上,反导数是 C1 + 1*(x-3) + 0.08108108*(x-3)^2/2 + 0.8108108*(x-3)^3/3 - 0.16816817*(x-3)^4/4。这里 C1 是前一个反导数在 x=3 处的值。
    • 在区间 [6,9] 上,反导数是 C2 + 4*(x-6) + 0.40540541*(x-6)^2/2 - 0.7027027*(x-6)^3/3 + 0.07807808*(x-6)^4/4。这里 C2 是前一个反导数在 x=6 处的值。

    【讨论】:

      猜你喜欢
      • 2019-12-27
      • 2012-11-03
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多