Числовая производная в R? - PullRequest
0 голосов
/ 18 апреля 2020

Я сгенерировал некоторые реальные данные о движении демпфирующего маятника:

Angle

Я взял его производную в R, взяв разность последовательных очки и деление на разницу во времени. На этой картинке 1202 точки данных.

, которые дали этот график:

Angular Velocity R

Я снова взял производную этого графика:

Angular acceleration

Однако этот график очень ошибочен c и непригоден для анализа. Мне было интересно, есть ли функция в R, которая позволяет для точного численного дифференцирования? Я знаю о преобразованиях Фурье, хотя я не уверен, как непосредственно применить их к демпфирующему маятнику.

Это функция, которую я использую в R для вычисления производной:

derivative <- function(x,y,deriv0){
  # deriv0 = value of the derivative at time zero
  deriv <- diff(y[2:length(x)]) / diff(x[2:length(y)])
  w = length(x)-2
  deriv <- c(deriv0,deriv[1:w])
  time <- x[1:length(x)-1]
  return(data.frame(time,deriv))
}

Исходный набор данных находится здесь:

Набор данных маятника

Спасибо

1 Ответ

0 голосов
/ 18 апреля 2020

В итоге я нашел простое и элегантное решение.

library(pspline)
t <- time vector
x <- data vector

For the first derivative:
deriv1st <- predict(sm.spline(t, x), t, 1)

plot(t,deriv1st)

For the second derivative:
deriv2nd <- predict(sm.spline(t, x), t, 2)

plot(t,deriv2nd)
...