在matlab

时间:2016-04-11 14:42:20

标签: matlab montecarlo

我想在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个值... 有人知道解决方案吗?

1 个答案:

答案 0 :(得分:3)

问题出在你的for循环范围内。每次您都会从1转到n,但 r每次循环只有1000个条目(a的大小和{ {1}})。从bn == 1000开始,第一次循环不会出现问题,但在numel(r) == 1000循环的连续时间内,while会增加到2000,3000等。这超过了n的大小。

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

numel(r)

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

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