La siguiente figura sugiere como estimar el valor de π con una simulación. En la figura, un circuito con un área igual a π/4, está inscrito en un cuadrado cuya área es igual a 1. Se elige de forma aleatoria n puntos dentro del cuadrado. La probabilidad de que un punto esté dentro del círculo es igual a la fracción del área del cuadrado que abarca a este, la cual es π/4. Por tanto, se puede estimar el valor de π/4 al contar el número de puntos dentro del círculo, para obtener la estimación de π/4. De este último resultado se encontrar una aproximación para el valor de π.
Pasos sugeridos:
Genere n 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).
Genere 1000 coordenadas y: Y1,…,Yn, utilizando nuevamente la distribución uniforme con valor mínimo de 0 y valor máximo de 1.
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.
¿Cuántos de los puntos están dentro del círculo? ¿Cuál es su estimación de π?
## Numero de puntos dentro del circulo: 800
## Estimación de n: 3.2
## Numero de puntos dentro del circulo: 7882
## Estimación de n: 3.1528
## Numero de puntos dentro del circulo: 78600
## Estimación de n: 3.144
Como podemos observar en los resultados entre mas grande es la muestra, más se acerca el valor estimado de pi al valor real 3.14159265.
#Puede reemplazar 123 por cualquier número entero que desee como semilla
set.seed(123)
#introducción: función de n
estimador_pi <- function(n){
#genere n coordenadas x y y
x <- runif(n, min = 0, max = 1)
y <- runif(n, min = 0, max = 1)
#¿cada punto x y y se encuentra dentro del circulo?
puntos_dentro <- (x - 0.5)^2 + (y - 0.5)^2 < 0.25
#¿cuantos puntos estan detro del circulo? ¿cual es el estimador de pi(n)?
puntos_circulo <- sum (puntos_dentro)
estimador_pi <- 4* (puntos_circulo / n)
return(list(puntos_circulo = puntos_circulo, estimador_pi = estimador_pi))}
#generando simulación con diferentes numeros de puntos
resultado_1000 <- estimador_pi(1000)
resultado_10000 <- estimador_pi(10000)
resultado_100000 <- estimador_pi(100000)
#resultados obtenidos
cat("Numero de puntos dentro del circulo:", resultado_1000$puntos_circulo, "\n")
cat("Estimación de n:", resultado_1000$estimador_pi, "\n\n")
cat("Numero de puntos dentro del circulo:", resultado_10000$puntos_circulo, "\n")
cat("Estimación de n:", resultado_10000$estimador_pi, "\n\n")
cat("Numero de puntos dentro del circulo:", resultado_100000$puntos_circulo, "\n")
cat("Estimación de n:", resultado_100000$estimador_pi, "\n\n")