Интеграция списка значений в Python - PullRequest
0 голосов
/ 28 октября 2018

У меня есть список данных, который представляет ускорение. Для простоты, скажем, этот список:

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

Я хочу дважды интегрировать каждое значение в этом списке (двойная интеграция), чтобы получить информацию о местоположении.

Быстрое напоминание: положение, скорость и ускорение связаны между собой. Вы можете найти ускорение, взяв производную дважды. Или вы можете взять интеграл дважды, если начнете с ускорения.

Я не могу реально изменить данные, с которыми я работаю. У меня есть значения с плавающей запятой, хранящиеся в списке, поступающем из моего акселерометра. Я также понимаю, что обычно для интеграции требуется определить функцию, обычно с переменной, которая может быть интегрирована в течение интервала.

Я пытался использовать библиотеку:

import scipy.integrate as integrate 

и попытался использовать метод .quad, но я получаю ошибки.

Буду рад любым советам, идеям или ссылкам на ресурсы, которые могут помочь.

Github репо

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Вам просто нужно сложить в простой цикл for.

DV = A * DT

дх = 0,5 * а * дт ^ 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)
0 голосов
/ 28 октября 2018

Использовать .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). Здесь является ссылкой для метода cumtrapz.

...