Смоделируйте среднее время первого прохождения винеровского процесса - PullRequest
1 голос
/ 22 июня 2020

Пусть $ \ {B (t) \} $ - броуновское движение, $ \ {X (t) \} $ - броуновское движение со сносом $ X (t) = B (t ) + t $ и $ \ tau (x): = \ inf \ {t> 0: X (t) = x \} $ .

Найдите $ \ mathbb {E} [\ tau (1)] $ путем моделирования с использованием:

  1. дискретной интерполяции
  2. линейной интерполяции для достаточно мелкой сетки.

Что Я до сих пор думал о 1.

#Set b_0 = 0 and b_1 = rnorm(1)
b_t <- c()
b_t[1] <- 0
b_t[2] <- rnorm(1)
x=1
#Find the first passage time so when does X(t) hit 1 for the first time
while(b_t[x]<1){
b_t[x+2] <- rnorm(n = 1, mean = (b_t[x+1]- b_t[x] )/2, sd =  x/2)  
x <- x+1
}

Я считаю, что мой код не может правильно сгенерировать двумерное секционирование. Может кто поможет?

1 Ответ

0 голосов
/ 01 августа 2020

Вот что я придумал. Я не выполнял эту конкретную симуляцию раньше, поэтому могут быть ошибки - будьте осторожны:

# 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="")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...