R中布朗运动的有效模拟

时间:2014-06-26 05:43:00

标签: 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 个答案:

答案 0 :(得分:3)

您可以在一组常规变量上使用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])