【问题标题】:Integrating a list of values in Python在 Python 中集成值列表
【发布时间】:2019-04-01 06:57:58
【问题描述】:

我有一个代表加速度的数据列表。为简单起见,假设这个列表是:

X = [1, 2, 3, 4, 5]

我想将此列表中的每个值集成两次(双重集成),以便检索有关位置的信息。

快速提醒:位置、速度和加速度是相关的。您可以通过两次求导来找到加速度。或者,如果你从加速度开始,你可以取两次积分。

我无法真正更改我正在使用的数据。我将浮点值存储在来自我的加速度计的列表中。我也明白,通常,积分需要定义一个函数,通常带有一个可以在一个区间内积分的变量。

我尝试过使用该库:

import scipy.integrate as integrate 

并尝试使用.quad 方法,但出现错误。

我会喜欢任何可以提供帮助的提示、想法或资源链接。

Github repo

【问题讨论】:

    标签: python list scipy integration integral


    【解决方案1】:

    使用.cumtrapz 方法。 cumtrapz(X)通过单位间距梯形法计算X的近似累积积分。

    import scipy.integrate as it
    X = [1, 2, 3, 4, 5]
    velocity = it.cumtrapz(X,initial=0)
    location = it.cumtrapz(velocity,initial=0)
    print 'velocity: ', velocity
    print 'location: ', location
    

    输出:

    velocity:  [  0.    1.5   4.    7.5  12. ]
    location:  [  0.     0.75   3.5    9.25  19.  ]
    

    注意如果你有时间向量t对应加速度向量,你需要使用cumtrapz(X,t)Here 是方法cumtrapz 的引用。

    【讨论】:

    • 我已确认此方法有效,我能够积分并返回速度值。但是,当我计算位置时,是否需要使用时间向量t 进行第二次积分?我试图这样做,但它会产生关于“x”和“y”大小的错误。我可以将第二个集成执行为:cumtrapz(X_Velocity, initial = 0) 吗?它返回值,但我想找出答案的唯一方法是绘制并查看我是否正在重现正确的轨迹。
    • @Dr.Dre 如果你没有使用时间向量t,它将默认使用t=[1,2,3,4,5]。如果您需要指定t,请确保它与X 的大小相同。
    • 如果我绘制值:如何让 x 轴乘以 0.01?
    • 值中有负值怎么办?例如 X = [1, -2, 3, -2, 4, -3]
    【解决方案2】:

    您只需要在一个简单的 for 循环中求和。

    dv = a*dt

    dx = 0.5*a*dt^2

    注意 - 我写了这段代码没有检查它,所以可能有一些语法错误

    v = [0]  # or whatever you initial velocity is
    x = [0]  # or whatever you initial location is
    dt = 1.0 # or your time interval
    
    for a in [1, 2, 3, 4, 5]:
        v.append(v[-1] + a*dt)
        x.append(x[-1] + 0.5*a*dt**2)
    print(v)
    print(x)
    

    【讨论】:

      猜你喜欢
      • 2021-01-05
      • 2019-04-22
      • 1970-01-01
      • 2014-12-18
      • 2017-04-01
      • 2016-06-30
      • 2012-07-12
      • 2018-07-14
      • 2012-08-27
      相关资源
      最近更新 更多