Search code examples
loopsincrementmontecarlopimaple

Why is my variable not incrementing in my loop?


I am writing a code for Monte Carlo's estimation of pi. I want to calculate the number of points inside a quarter circle vs. outside. However, my totalPointsInside are not incrementing in my loop. If I call totalPointsInside after my loop, i still get it is equal to 0. How do I fix this?

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;

Solution

  • You are missing definitions of distanceFromOrigin and 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