如何计算流数据的变化率(衍生物)?

时间:2011-01-27 17:08:25

标签: math derivative

我有一个随时间推移的数据流。如何使用C#确定变化率?

自微积分课以来已经很长时间了,但现在是我第一次真正需要它(15年后)。现在,当我搜索“衍生物”一词时,我会得到财务资料,以及其他我不认为我真正需要的数学事物。

介意我指向正确的方向?

4 个答案:

答案 0 :(得分:3)

您需要数据值V和相应的时间T,至少对于最新的数据点和之前的数据点。然后,变化率可以用Eulers backward formula近似,转换为

dvdt = (V_now - V_a_moment_ago) / (T_now - T_a_moment_ago);

在C#中。

答案 1 :(得分:3)

变化率计算如下

  1. 计算一个增量,例如“价格减去 - 价格20天前”
  2. 计算变化率,例如“delta / price 99 days ago”

答案 2 :(得分:3)

如果您想要更复杂的数据来平滑数据,您应该研究一种数字滤波算法。如果你可以通过工程术语来实现它并不难。经典方法是Savitzky-Golay

如果最后n个样本存储在数组y中且每个样本的时间间隔相等,那么您可以使用以下内容计算导数:

deriv = 0
coefficient = (1,-8,0,8,-1)
N = 5 # points
h = 1 # second
for i range(0,N):
   deriv += y[i] * coefficient[i]
deriv /= (12 * h)

这个例子恰好是“3/4(立方/四次)”滤波器的N = 5滤波器。 N越大,它的平均点越多,它就越平滑,但延迟也会越高。您必须等待N / 2点才能在“现在”时间获得衍生物。

有关更多系数,请参阅附录

https://en.wikipedia.org/wiki/Savitzky%E2%80%93Golay_filter

答案 3 :(得分:0)

总变化率,即(new_value - original_value)/时间?