我有一个随时间推移的数据流。如何使用C#确定变化率?
自微积分课以来已经很长时间了,但现在是我第一次真正需要它(15年后)。现在,当我搜索“衍生物”一词时,我会得到财务资料,以及其他我不认为我真正需要的数学事物。
介意我指向正确的方向?
答案 0 :(得分:3)
您需要数据值V
和相应的时间T
,至少对于最新的数据点和之前的数据点。然后,变化率可以用Eulers backward formula近似,转换为
dvdt = (V_now - V_a_moment_ago) / (T_now - T_a_moment_ago);
在C#中。
答案 1 :(得分:3)
变化率计算如下
答案 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点才能在“现在”时间获得衍生物。
有关更多系数,请参阅附录
答案 3 :(得分:0)
总变化率,即(new_value - original_value)/时间?