2016-04-11 2 views
0

Я хочу реализовать алгоритм monte carlo в Matlab несколько иначе, чем я видел где-нибудь еще. У меня есть рабочий пример, где я генерирую вектор 1000 точек и вычисляю pi из этого. Теперь я хочу модель, где я могу добавить дополнительные точки к тому же примеру.Увеличение значений для monte carlo в 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 

Но это не работает из-за для петли, где проверить переменные ... значение г (я) Шоуда сдвигаться следующие 1000 значений, которые я создаю в нижней части цикла while ... Кто-нибудь знает решение для этого?

ответ

3

Вопрос находится в диапазоне вашего цикла for. Вы перейдете от 1 в n каждый раз, когда , ноr имеет только 1000 записей каждый раз через петлю (размер a и b). Это не будет проблемой в первый раз через цикл с n == 1000 и numel(r) == 1000, но в последующие периоды через цикл whilen увеличивается до 2000, 3000 и т. Д., И это превышает размер r.

Вы должны изменить свою форму цикла так, чтобы вы переходили только от 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); 
+0

это работает, спасибо! – wietjes

Смежные вопросы