我需要使用R来整合加速度曲线(即在短时间段内连续的一系列加速度,例如每0.004秒)并且正在努力弄清楚如何这样做。我知道如何使用Simpson规则计算给定两点的曲线下面积,但是我需要对大量数据执行此操作,以便我有一个与每个时间间隔对应的速度值。所以基本上我有两列(时间和加速度),需要计算出第三个“速度”列中的值。任何有关如何编码的建议都将不胜感激。
答案 0 :(得分:3)
由于您的所有时间间隔都相同,因此您可以大大简化这一过程。假设你有一个加速度向量,加速度和时间向量ta。 (选择命名以避免t
功能。)
vel <- cumsum(a)/ (ta-ta[1]) # there are no 0 vector indices in R.
如果您想使用梯形规则,可以添加cumsum(diff(a))
的1/2。
答案 1 :(得分:2)
如果你使用梯形公式,那么
v[i+1] = v[i] + (t[i+1] - t[i])*(a[i+1] + a[i])/2
假设你的data.frame是带有t,a和v列的X.我假设你的第一行有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;
}
答案 2 :(得分:1)
尝试保持累计加速时间×时间。
换句话说,每对(加速度,时间)值会告诉您该持续时间内发生的加速度,从而告诉您在此期间更改的速度。添加所有更改以达到整体速度。
所以你可以写
v[i+1] = v[i] + (a[i] * t[i])
其中:
i
=第i个间隔
a[i]
=该间隔期间的加速度
t[i]
=间隔的持续时间(可能总是0.004秒?)
v[i]
=间隔结束时的速度
答案 3 :(得分:0)
图书馆(实践);
cumtrapz(a,t)#其中a是加速度矢量,t是时间间隔或矢量