【发布时间】:2018-09-04 10:56:58
【问题描述】:
我正在使用 R 模拟亚洲期权(金融衍生品)。对于这个问题,必须模拟随机数和某种随机游走。结果必须非常精确。
因此必须考虑 n=2*10^8 路径和 360 个中间点。这总共需要生成 2*10^8*360 个随机数。这显然超过了the maximum size of a matrix in R。
到目前为止,我使用了以下代码。将 ST 声明为全局变量,我能够多次运行该函数并完成任务。
library(fOptions)
set.seed(123)
MC.C = function(n=2*10^8,
d = 360,
Time = 1,
r = 0.05,
sigma = 0.25,
S0 = 100
){
delta.t = Time/d
Payoff = 0
St = 0
log.St = log(S0)
Z = 0
ST <<- 0
Z = matrix(rnorm.pseudo(n=n, dimension = d), byrow = TRUE, ncol = d)
for(i in 1:d){
log.St = log.St+(r-0.5*sigma^2)*delta.t + sigma*sqrt(delta.t)*Z[,i]
St = St + exp(log.St)
}
ST <<- append(0, St/d)
}
但是,这非常耗时。
我的目标是尽快找到解决方案。我的两个问题是:
- 如何处理超出 R 中矩阵内存的模拟?
- 如何进一步加速代码?
我会非常感谢任何答案或指出我所犯的错误。
【问题讨论】:
-
您是否使用了其他软件包?请将
library(...)-calls 放入您的代码中。 -
该死的。再次感谢。我已经更新了代码。
-
矩阵 Z 的一列占用 1.5 GB。最终,您可以重组计算以逐列进行。
-
全局分配很危险:
library("fortunes"); fortune(174)or burns-stat.com/pages/Tutor/R_inferno.pdf Circle 6 ... or stackoverflow.com/questions/9851655/…
标签: r matrix memory size simulation