离散数据关于时间的双重积分
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)=0
和 y'(0)=0
,因此您可以在一次积分中获得所需的积分值
simps((t-t_range)*signal, t_range)
假设我有一组名为 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)=0
和 y'(0)=0
,因此您可以在一次积分中获得所需的积分值
simps((t-t_range)*signal, t_range)