2016-04-11 17 views
0

私は他のどこかで見たのとは少し違った方法でモンテカルロのアルゴリズムを実装したいと思います。 私は、1000点のベクトルを生成し、そこからpiを計算する実例を持っています。 今、同じサンプルに余分なポイントを追加できるモデルが必要です。これは、これまでの私のコードですmatlabのモンテカルロの値を増やす

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)の値がにシフトshoud次の1000の値私はwhileループの最下部に作成します... 誰かがこれについての解決策を知っていますか?

答えて

3

問題はあなたのforループの範囲にあります。 の場合は1からnになりますが、rの場合は、ループごとに1000エントリしかありません(サイズはabです)。これは、n == 1000numel(r) == 1000のループ以降では初めてではありませんが、whileループまでの連続した時間では、nは2000,3000などに増加し、これはrのサイズを超えています。

1からnumel(r)になるようにforループを変更したいと思うでしょう。

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

また、forループを完全に削除することもできます。

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

ありがとうございます! – wietjes

関連する問題