离散数据相对时间的双重集成

时间:2018-06-19 23:30:21

标签: python numerical-methods numerical-integration

比方说,我有一组称为signal的数据点,我想就时间对其进行两次集成(即,如果signal是加速,我想对其进行两次集成)时间来获得职位)。我可以使用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)

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

对不起,我回答得太快了。 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

答案 1 :(得分:0)

通过部分集成,您可以从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)