2016-01-29 2 views
3

У меня есть набор измеренных значений, которые я хотел бы интерполировать в R с использованием кубических сплайнов. Так как это просто кусочные полиномы, я хотел бы впоследствии интегрировать интерполяционную функцию алгебраически. Поэтому мне нужны коэффициенты. Есть ли способ получить их?
Вызов splines::interpSpline(foo, bar)$coef, похоже, не возвращает фактические коэффициенты полинома.Получите полиномиальные коэффициенты от интерполяционных сплайнов в R

ответ

2

Выход splines::interpSpline(x,y)$coef дает полиномиальные коэффициенты части между й (I) и х (г + 1) в терминах степеней (х-х (I)), а не полномочий х. Это имеет смысл, потому что результирующие коэффициенты имеют разумный размер и их легче интерпретировать: например, каждый постоянный член равен только 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.
Смежные вопросы