【问题标题】:Incrementing the values for monte carlo in matlab在matlab中增加蒙特卡罗的值
【发布时间】:2016-04-11 22:50:26
【问题描述】:

我想在 matlab 中以与我在其他任何地方看到的方式略有不同的方式实现蒙特卡罗算法。 我有一个工作示例,我生成一个包含 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 个值... 有人知道这个问题的解决方案吗?

【问题讨论】:

    标签: matlab montecarlo


    【解决方案1】:

    问题在您的 for 循环范围内。你每次从1n 但是 r 每次循环只有1000 个条目(ab 的大小)。这不会是自 n == 1000numel(r) == 1000 以来第一次通过循环的问题,但在连续几次通过 while 循环时,n 增加到 2000、3000 等,这超过了 @987654330 的大小@。

    您需要更改您的 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-20
      • 2013-01-18
      • 1970-01-01
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 2015-02-10
      相关资源
      最近更新 更多