我正在尝试一个项目来整合加速度数据以获得位置的近似值。我从一组真正简单的数据开始,并以恒定的加速度。
from scipy.integrate import cumtrapz
t = [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7]
a = [-9.8, -9.8, -9.8, -9.8, -9.8, -9.8, -9.8, -9.8, -9.8, -9.8, -9.8, -9.8, -9.8, -9.8, -9.8]
v = cumtrapz(a, t, initial=0)
z = cumtrapz(v, t, initial=5)
首先,保留
scipy.integrate.cumtrapz
是为了向后兼容,您应该使用较新的 scipy.integrate.cumulative_trapezoid
函数。其次,如果您阅读文档,您会发现 initial
不是初始条件,而只是附加到数组上的一个值,通常比原始数据短一个元素。
初始:标量,可选
如果给定,则将此值插入到返回结果的开头。 0 或 None 是唯一接受的值。默认值为 None,这意味着 res 沿积分轴有一个比 y 少的元素。
还有一个弃用警告,从版本 1.12.0 开始,提供除 0 或
None
之外的任何内容都会导致警告
这显示了结果的大小:
from scipy.integrate import cumulative_trapezoid
t = [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7]
a = [-9.8, -9.8, -9.8, -9.8, -9.8, -9.8, -9.8, -9.8, -9.8, -9.8, -9.8, -9.8, -9.8, -9.8, -9.8]
print(len(t), len(cumulative_trapezoid(a, t)), len(cumulative_trapezoid(a, t, initial=0))) # 15, 14, 15
要强制执行初始条件,您应该设置
initial=0
,然后将初始条件添加到结果中。
v0 = 0.
z0 = 5.
v = cumulative_trapezoid(a, t, initial=0) + v0
z = cumulative_trapezoid(v, t, initial=0) + z0