从一组加速度数据到位置的积分

问题描述 投票:0回答:1

我正在尝试一个项目来整合加速度数据以获得位置的近似值。我从一组真正简单的数据开始,并以恒定的加速度。

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)

结果非常令人满意,除了仅尊重第一个值的位置的初始条件之外,我不明白如何改变这一点?

python scipy physics numerical-integration
1个回答
0
投票

首先,保留

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

© www.soinside.com 2019 - 2024. All rights reserved.