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;
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