并行化蒙特卡罗积分

时间:2016-05-02 16:26:08

标签: matlab parallel-processing montecarlo

我想从概率分布中生成10亿个随机点,并使用这些点计算函数来计算蒙特卡罗积分。问题是我使用的是MATLAB,对其他编程语言知之甚少。 MATLAB当然非常慢,我已经讨论了通过计算10个不同过程中1亿个点的值来并行化集成的可能性。这是一种可行的方法吗?如果是这样,实施它的最佳方法是什么?

目前的方法如下:

对于i:N
从分布中生成随机数
评估功能 将功能评估添加到临时变量

将临时变量除以N,因此积分已近似。

评估的功能如下:
如果生成的点小于数字B,则为0 如果生成的点大于或等于B,则点与B之间的差异。

使用@ Arpi的方法将改为使用parfor循环。

1 个答案:

答案 0 :(得分:1)

这似乎比首次建议的 much, much simpler 。通过咨询wikipedia,可以通过分析解决问题。但是 - 我强调这不是正确的方法 - 因为这是一个编程站点,这是一个程序:

b = 0.3;
N = 1e9;
batch_size = 1e8;

total = 0;
for ii=1:(N/batch_size)
    total = sum(max(0,rand(batch_size,1)-b));
end
result = total/N;

这需要大约15秒才能运行。如果更好地选择批量大小,可能会更快。

请注意,此处的“分布”在[0, 1)区间是统一的,这可能不是所需的,但该方法可以扩展为适用于任何分布类型(其中许多是在Matlab中内置的)