4

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

自从上微积分课已经很久了,但现在是我第一次真正需要它(15 年来)。现在,当我搜索“衍生品”这个词时,我会得到金融方面的东西,以及我认为我并不真正需要的其他数学方面的东西。

介意指出我正确的方向吗?

4

4 回答 4

4

如果你想要更复杂的东西来平滑数据,你应该研究一种数字滤波器算法。如果您可以切入工程术语,则实施起来并不难。经典方法是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

于 2016-07-30T00:10:54.200 回答
3

您需要数据值V和相应的时间T,至少对于最新数据点和之前的数据点。然后可以用欧拉后向公式来近似变化率,该公式转化为

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

在 C# 中。

于 2011-01-27T17:18:36.613 回答
3

变化率计算如下

  1. 计算一个增量,例如“价格减去 - 20 天前的价格”
  2. 计算变化率,例如“delta / price 99 days ago”
于 2012-11-10T15:23:23.553 回答
0

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

于 2011-01-27T17:12:25.610 回答