离散数据关于时间的双重积分

Double integration of discrete data with respect to time

假设我有一组名为 signal 的数据点,我想在时间上对它进行两次积分(即,如果 signal 是加速度,我想对它进行积分两次 w.r.t. 获得位置的时间)。我可以使用 simps 集成一次,但这里的输出是一个标量。您如何对(随机)数据集进行两次数值积分?我想象它看起来像这样,但显然在第一次集成后输入不兼容。

n_samples = 5000
t_range = np.arange(float(n_samples))
signal = np.random.normal(0.,1.,n_samples)
signal_integration = simps(signal, t_range)
signal_integration_double = simps(simps(signal, t_range), t_range)

如有任何帮助,我们将不胜感激。

抱歉我回答得太快了。 scipy.integrate.simps 给出你给定范围内的积分值,类似于 np.sum(signal).

你想要的是开始和每个数据点之间的集成,这就是 cumsum 所做的。更好的方法可能是 scipy.integrate.cumtrapz。您可以将任一方法应用两次以获得您想要的结果。

参见:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.simps.html
https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.cumtrapz.html

原回答:
我想你想要 np.cumsum。离散数据的整合只是一个求和。您必须将结果乘以步长值才能获得正确的比例。

https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.cumsum.html

通过部分积分,您可以从 y''=f

y(t) = y(0) + y'(0)*t + integral from 0 to t of (t-s)*f(s) ds

正如您似乎假设 y(0)=0y'(0)=0,因此您可以在一次积分中获得所需的积分值

simps((t-t_range)*signal, t_range)