我正在try 一个项目,以整合加速度数据,以便有一个近似值的位置.我首先使用了一组非常简单的数据,并保持恒定的加速度.

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)

The result is quite satisfying, apart from the fact that the initial condition for the position is only respected for the first value, and I don't understand how I can change this ? enter image description here

推荐答案

首先,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

Python相关问答推荐

将两只Pandas rame乘以指数

按顺序合并2个词典列表

PMMLPipeline._ fit()需要2到3个位置参数,但给出了4个位置参数

Python逻辑操作作为Pandas中的条件

UNIQUE约束失败:customuser. username

为什么\b在这个正则表达式中不解释为反斜杠

在pandas数据框中计算相对体积比指标,并添加指标值作为新列

在单次扫描中创建列表

剪切间隔以添加特定日期

将一个双框爆炸到另一个双框的范围内

用两个字符串构建回文

如何过滤组s最大和最小行使用`transform`'

查看pandas字符列是否在字符串列中

Django Table—如果项目是唯一的,则单行

如何在Python中将超链接添加到PDF中每个页面的顶部?

查找数据帧的给定列中是否存在特定值

是否需要依赖反转来确保呼叫方和被呼叫方之间的分离?

VSCode Pylance假阳性(?)对ImportError的react

某些值的数值幂和**之间的差异

关于数字S种子序列内部工作原理的困惑