【发布时间】:2019-11-26 22:07:12
【问题描述】:
很难解释,但我会一步一步来的
假设我有 2 辆汽车,一辆接一辆,我有前车的速度,我想计算其中两辆汽车之间的距离,我们可以使用多个方程式计算距离,我也是知道后车的初速和两车之间的距离。
Following_Car_Speed = 13.68490 m/s
Distance = 17.024 m
Lead_Car_Speed = c(13.784896, 13.745834, 13.880556, 13.893577, 13.893577, 13.923959,
13.945661, 13.919619, 13.897917, 14.002257, 14.002257, 13.980556,
13.980556, 14.067536, 14.063195, 14.080556, 14.123959, 14.163021,
14.236806, 14.167188)
Delta_Speed = Lead_Car_Speed[1]-Following_Car_Speed = 13.784896-13.68490 = 0.1
Gap <- 1.554 + Following_Car_Speed*0.878- (Following_Car_Speed*Delta_Speed)/(2*sqrt(0.8418*0.8150))=
1.554+ 13.68490*0.878- (13.68490*0.1)/(2*sqrt(0.8418*0.8150) = 12.74325
Acceleration <- 0.8418*(1-(Following_Car_Speed/29.2)^3.52-(Gap/Distance)^2)=0.3116923
现在我已经计算了加速度,所以我要计算下车的新速度。
Following_Car_Speed <- Following_Car_Speed + Acceleration*0.1
所以现在我要计算前车和后车之间的新速度增量
Delta_Speed <- Lead_Car_Speed[2]-Following_Car_Speed
Distance<- Distance+(Delta_Speed[2]+Delta_Speed[1])/2*0.1
然后继续使用相同的方程式,直到我们结束以下汽车的所有值。
使用 For 循环很容易做到这一点,但我想获得更有效的方法,我尝试使用 dplyr,但这很难,我没有得到答案。
所以请帮帮我。
myfun <- function(list, lcs,lcs2){
ds <- lcs - list[[1]]
Distance <- list[[1]]*D_Time - (list[[1]] * ds) / (2*sqrt(M_Acc*Com_Acc))
if (Distance < 0|is.na(Distance)) {Distance <- 0}
gap <- Gap_J + Distance
acc <- M_Acc * (1 - (list[[1]] / D_Speed)^Beta - (gap / list[[2]])^2)
fcs_new <- list[[1]] + acc * 0.1
ds_new <- lcs2- fcs_new
di_new <- list[[2]]+(ds_new+ds)/2*0.1
return(list(Speed = fcs_new,Distance = di_new))
}
Generated_Data <- data %>%group_by(Driver,FileName)%>%
mutate(Speed_Distance_Calibrated = accumulate2( .init = list(Filling_Speed[1],
Filling_Range[1]),.x = Lead_Veh_Speed_F,.y = Lead_Veh_Speed_F2, myfun)[-1])%>%ungroup()
我已经添加了lead_car_speed的领先,我也想使用新的距离和新的速度,所以我把它做成了一个列表并放入.initla
【问题讨论】:
-
您好,
Distance在第一次迭代后如何更新? -
对不起是我的错,我忘记写了,它必须更新,它是旧距离加上新旧增量之间的平均速度乘以 0.1
标签: r loops dplyr tidyverse zoo