从R中的插值样条得到多项式系数

从R中的插值样条得到多项式系数,r,interpolation,integral,splines,R,Interpolation,Integral,Splines,我有一组测量值,我想用三次样条插值R。因为这些都是分段多项式,所以我接下来想对插值函数进行代数积分。因此我需要系数。有办法获得这些吗? 调用spline::interspline(foo,bar)$coef似乎不会返回实际的多项式系数 样条函数的输出:spline::interspline(x,y)$coef给出了x(i)和x(i+1)之间部分的多项式系数,表示的是(x-x(i))的幂,而不是x的幂。这是有意义的,因为得到的系数大小合理,并且更容易解释:例如,每个常数项只是y(i),二次系数给出

我有一组测量值,我想用三次样条插值
R
。因为这些都是分段多项式,所以我接下来想对插值函数进行代数积分。因此我需要系数。有办法获得这些吗?

调用
spline::interspline(foo,bar)$coef
似乎不会返回实际的多项式系数

样条函数的输出:
spline::interspline(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
>x-y样条线::样条线间(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.54054*(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.54054*(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.40540540541*(x-6)^2/2-0.7027027*(x-6)^3/3+0.07807808*(x-6)^4/4
    。这里C2是x=6时先前反导数的值