在 matlab 中增加 monte carlo 的值

Incrementing the values for monte carlo in matlab

我想在 matlab 中以与我在其他地方看到的略有不同的方式实现 monte carlo 算法。 我有一个工作示例,我生成一个 1000 点的向量并从中计算 pi。 现在我想要一个模型,我可以在其中为同一个示例添加额外的点。

到目前为止,这是我的代码:

a=rand(1000,1); %initial random vectors
b=rand(1000,1);
n=1000;
m=0;   %Number of points inside circle

while true
  x1=a-0.5;
  y1=b-0.5; %cirle has centre at (0.5,0.5)
  r=x1.^2+y1.^2;

  for i=1:n
    if r(i)<=0.25
       m=m+1;
   end
 end
pi=m/(0.25*n);
a=rand(1000,1);
b=rand(1000,1);
n=n+1000;
pause(1);
end

但这行不通,因为有 for 循环,您可以在其中检查变量... r(i) 值应该转移到我在 while 循环底部创建的下一个 1000 个值... 有人知道解决方案吗?

问题出在你的for循环范围内。你每次都从 1n 但是 r 每次通过循环只有 1000 个条目([=15= 的大小] 和 b)。自 n == 1000numel(r) == 1000 以来第一次通过循环时这将不是问题,但在通过 while 循环的连续时间中,n 增加到 2000、3000 等。这超过了 r 的大小。

您需要更改您的 for 循环,以便您只从 1 转到 numel(r)

for k = 1:numel(r)
    if r(k) <= 0.25;
        m = m + 1;
    end
end

或者您可以完全删除 for 循环。

m = m + sum(r <= 0.25);