Интегрирование профиля ускорения в R - PullRequest
1 голос
/ 20 июля 2011

Мне нужно интегрировать профиль ускорения (то есть последовательную серию ускорений за короткие промежутки времени, например, каждые 0,004 секунды), используя R, и я изо всех сил пытаюсь выяснить, как это сделать.Я знаю, как рассчитать площадь под кривой для заданных двух точек, используя правило Симпсона, но мне нужно сделать это для большой серии данных, чтобы у меня было значение скорости, соответствующее каждому временному интервалу.Так что в основном у меня есть два столбца (время и ускорение), и мне нужно выяснить, какие значения будут в третьем столбце «скорость».Любой совет о том, как закодировать это будет оценено.

Ответы [ 4 ]

3 голосов
/ 20 июля 2011

Поскольку все ваши временные интервалы одинаковы, вы можете значительно упростить это. Предположим, у вас есть вектор ускорения, ускорение и вектор времени, т.е. (Названия выбраны, чтобы избежать функции t.)

vel <- cumsum(a)/ (ta-ta[1])  # there are no 0 vector indices in R.

Если вы хотите использовать правило трапеции, вы можете добавить 1/2 от cumsum(diff(a)).

2 голосов
/ 20 июля 2011

Если вы используете трапециевидную формулу, то

v[i+1] = v[i] + (t[i+1] - t[i])*(a[i+1] + a[i])/2

Предположим, ваш data.frame - это X со столбцами t, a и v. Я предполагаю, что ваша первая строка имеет t = 0 и a = 0. Один из способов сделать это -

lena <- dim(X)[1] -1;
X$v[1] <- 0;   # I assume that initial velocity is zero.
for (i in 1:lena) {
   X$v[i+1] <- X$v[i] + (X$t[i+1] - X$t[i])*(X$a[i+1] + X$a[i])/2;
}
1 голос
/ 20 июля 2011

Попробуйте сохранить промежуточную сумму ускорения × время.

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

Таким образом, вы можете написать

 v[i+1] = v[i] + (a[i] * t[i])

где:

i = i-й интервал
a[i] = ускорение в течение этого интервала
t[i] = продолжительность интервала (возможно, всегда 0,004 сек?)
v[i] = скорость в конце интервала

Хорошоудачи!

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

библиотека (pracma);

cumtrapz (a, t) #, где a - вектор ускорения, а t - интервал времени или вектор

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...