0

我已经生成了一些阻尼摆运动的真实数据:

角度

我通过取连续点的差异并除以时间差异来取其在 R 中的导数。这张图片有1202个数据点。

这给出了这个图表:

角速度 R

我再次取了这张图的导数:

角加速度

但是,此图非常不稳定且无法用于分析。我想知道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))
}

原始数据集在这里:

摆数据集

谢谢

4

1 回答 1

1

我最终找到了一个简单而优雅的解决方案。

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)
于 2020-04-18T09:46:50.940 回答