从R

时间:2016-01-29 22:03:16

标签: r interpolation integral splines

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

1 个答案:

答案 0 :(得分:2)

splines::interpSpline(x,y)$coef的输出根据(xx(i))的幂,给出x(i)和x(i + 1)之间部分的多项式系数,而不是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时前一个反衍生物的值。