R
3 次スプラインを使用して補間したい一連の測定値があります。これらは区分的な多項式にすぎないため、後で補間関数を代数的に統合したいと思います。したがって、係数が必要です。これらを入手する方法はありますか?
呼び出しsplines::interpSpline(foo, bar)$coef
ても、実際の多項式係数が返されないようです。
1071 次
1 に答える
2
の出力はsplines::interpSpline(x,y)$coef
、x(i) と x(i+1) の間の部分の多項式係数を、xの累乗ではなく(xx(i))の累乗で表します。結果の係数は妥当なサイズであり、解釈しやすいため、これは理にかなっています。たとえば、各定数項はちょうど y(i) であり、2 次係数は 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 での前の反導関数の値です。
于 2016-01-31T02:41:42.750 に答える