Problema 1: Estimación de \(\pi\)

Genere 1000 coordenadas \(x: X1,...,Xn\). Utilice la distribución uniforme con valor mínimo de 0 y valor máximo de 1. La distribución uniforme genera variables aleatorias que tienen la misma probabilidad de venir de cualquier parte del intervalo (0,1).

n=10000 
set.seed(123)
x= runif(n)
y=runif(n)

Cada punto \((Xi,Yi)\) se encuentra dentro del círculo si su distancia desde el centro (0.5,0.5) es menor a 0.5. Para cada par \((Xi,Yi)\) determine si la distancia desde el centro es menor a 0.5. Esto último se puede realizar al calcular el valor \((Xi−0.5)^2+(Yi−0.5)^2\), que es el cuadrado de la distancia, y al determinar si es menor que 0.25.

d=function(a){(a[1]-0.5)^2 +(a[2]-0.5)^2}
xy= data.frame(x,y) #Crea un data frame con las coordenadas (x,y)
dist= apply(xy, 1, d)
cont= as.numeric(dist <= 0.25)

¿Cuántos de los puntos están dentro del círculo? ¿Cuál es su estimación de \(\pi\)?

cat("tamaño de muestra:", n,"\n")
tamaño de muestra: 10000 
cat("Número de puntos dentro del círculo:", sum(cont), "\n")
Número de puntos dentro del círculo: 7894 
cat("estimación de pi:", 4*(sum(cont)/n), "\n")
estimación de pi: 3.1576 

Grafica

plot(x, y, col = ifelse(cont == 1, "blue", "red"), pch = 20, cex = 0.5, asp = 1,
     main = "", xlab = "x", ylab = "y")
symbols(0.5, 0.5, circles = 0.5, add = TRUE, inches = FALSE)