2016-04-11 18 views
0

Matlabdaki monte edilmiş karlo algoritmasını başka bir yerde göründüğümden biraz farklı bir şekilde uygulamak istiyorum. 1000 noktadan oluşan bir vektör oluşturduğum ve bunu hesaplayabileceğim bir çalışma örneğim var. Şimdi aynı örneğe ekstra puan ekleyebileceğim bir model istiyorum. Bu benim defa kodudurMatlabdaki monte edilmiş karlo için değerleri artırma

:

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 

Ama bu çünkü değişkenlerini kontrol için-döngünün çalışmıyor ... r (i) değeri geçiş shoud while-loop'un altında oluşturduğum 1000 değer ... Birisi bunun için çözümü biliyor mu?

cevap

3

Sorun, for döngüsünüzün aralığında. Her zaman için 1, ancakr'a giderseniz, döngü boyunca her seferinde 1000 girdisi vardır (a ve b boyutlarında). Bu, döngüden ilk kez n == 1000 ve numel(r) == 1000'dan itibaren bir sorun olmayacaktır, ancak while ilmek aracılığıyla birbirini izleyen zamanlarda, n, 2000, 3000, vs'ye yükselir ve bu, r'un boyutunu aşar.

For döngüsünüzü değiştirmek isterseniz, yalnızca 1'dan numel(r)'a gidin. Veya tüm döngüyü tamamen kaldırabilirsiniz.

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

çalışıyor, teşekkürler! – wietjes