Почему моя переменная не увеличивается в цикле? - PullRequest
0 голосов
/ 19 октября 2018

Я пишу код для оценки Пи Монте-Карло.Я хочу посчитать количество точек внутри четверти круга и снаружи.Тем не менее, мой totalPointsInside не увеличивается в моем цикле.Если я вызываю totalPointsInside после цикла, я получаю, что он равен 0. Как это исправить?

isInsideCircle := (x_2, y_2) ->evalb(distanceFromOrigin(x_2, y_2) < 1);

totalPointsInside := 0;

i:=1;

n:=5;

for i to n do

x_2 := Gen();

y_2 := Gen();

distanceFromOrigin(x_2, y_2);

isInsideCircle(x_2, y_2); #this was added to test my code

if isInsideCircle(x_2, y_2)=true then

totalPointsInside := totalPointsInside +1;

i = i+1;

end if;

end do;

1 Ответ

0 голосов
/ 19 октября 2018

Вам не хватает определений distanceFromOrigin и Gen.

restart;
randomize():

distanceFromOrigin := (a,b) -> sqrt(a^2+b^2):
isInsideCircle := (a,b) -> evalb(distanceFromOrigin(a,b) < 1):

Gen := rand(0.0 .. 1.0):

f :=proc(n)
  local totalPointsInside,i,x_2,y_2;
  totalPointsInside := 0;
  for i from 1 to n do
    x_2 := Gen();
    y_2 := Gen();
    if isInsideCircle(x_2, y_2)=true then
      totalPointsInside := totalPointsInside +1;
    end if;
  end do:
  return evalf(4*totalPointsInside/n);
end proc:

f(5000);
                      3.155200000
...