#r
#r
Вопрос:
data=data.frame(matrix(rnorm(1000*300,0,1),1000,300))
weiner.matrix=data.frame(cumsum(data))
mu=0
sigma=.15
dt=1/1000
bmot=data.frame(matrix(NA,1000,300)
bmot[1,]=100
for (j in 1:ncol(data)){
for (i in 2:nrow(data)){
bmot[i,j]=bmot[i-1,j]*(1 mu*dt sigma*sqrt(dt)*(weiner.matrix[i,j]-weiner.matrix[i-1,j]))
}
}
Я пытаюсь смоделировать матрицу из 1000 строк и 300 столбцов, так что 300 переменных действительно геометрического броуновского движения. Начальное значение начинается со 100, а затем случайность начинается с периодов после t = 1 / row = 1.
Есть ли способ запустить это моделирование броуновского движения 300, не переходя по ячейкам, как у меня в цикле??
Комментарии:
1. Что такое
weiner.matrix
,mu
,dt
,sigma
…? Пожалуйста, предоставьте воспроизводимый пример.
Ответ №1:
Вы можете использовать cumsum
набор нормальных переменных для создания одной переменной броуновского движения.
random <- rnorm(1000, 0, sqrt(0.15))
x <- 100 cumsum(random)
nsim <- 300
Вы можете использовать apply, но for
цикл выполняется так же быстро:
X <- matrix(rnorm(n = nsim * 1000, sd = sqrt(0.15)), nrow = 1000, ncol = 300)
for (i in 1:nsim) X[,i] <- cumsum(X[,i])