Вот что я придумал. Я не выполнял эту конкретную симуляцию раньше, поэтому могут быть ошибки - будьте осторожны:
# Total time to run simulation
TT <- 100
# Drift term
mu <- 0.01
# Variance term
sigma <- 2
# Time step
delta_t <- 0.05
# Level to be crossed
x <- 30
# Time vector
T <- seq(0, TT, delta_t)
# Unit normals
Z <- rnorm(length(T), 0, 1)
# Brownian motion variates
X <- cumsum(sigma* sqrt(T)*Z + mu*T)
# Plot and print results
plot(T, X, type="l", main="Brownian Motion")
if(x > 0 && max(X) > x) {
tau <- T[min(which(X > x))]
cat("Time at which BM crossed ", x, ": ", tau, sep="")
} else if(x <= 0 && min(X) < x) {
tau <- T[min(which(X < x))]
cat("Time at which BM crossed ", x, ": ", tau, sep="")
} else {
cat("BM didn't cross ", x, sep="")
}