La siguiente figura sugiere como estimar el valor de 𝜋 con una simulación. En la figura, un círcuito con un área igual a \(\pi\)/4, está inscrito en un cuadrado cuya área es igual a 1. Se elige de forma aleatoria 𝑛 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 éste, la cual es \(\pi\)/4. Por tanto, se puede estimar el valor de \(\pi\)/4 al contar el número de puntos dentro del círculo, para obtener la estimación de \(\pi\)/4 . De este último resultado se puede encontrar una aproximación para el valor de \(\pi\).
Para resolver este problema de la estimación del valor de \(\pi\) se implementó el siguiente código en R basado en las siguientes funciones.
runif()
: se utiliza para generar números aleatorios
a partir de una distribución uniforme. Una distribución uniforme es
aquella donde todos los valores dentro de un rango específico tienen la
misma probabilidad de ocurrir.
as.numeric
: se utiliza para convertir un objeto en
un tipo numérico, es decir, para transformar los datos de otro tipo
(como factores, caracteres o lógicos) en números. En este caso
convertirá valores lógicos (F, V) a números (0, 1).
Código en R comentado con los pasos para la estimación:
n <- 1000
x <- runif(n, 0, 1)
y <- runif(n, 0, 1)
d <- (x - 0.5)^2 + (y-0.5)^2 #
val <- as.numeric(d<=0.25)#
#Revisar el número de puntos que caen dentro o fuera del círculo
count_table <- table(val)#
cat("Conteo de número de puntos dentro del círculo (1) :",count_table[2], "y fuera (0): ", count_table[1])
Conteo de número de puntos dentro del círculo (1) : 775 y fuera (0): 225
est_pi <- (sum(val)/n)*4 #
cat("El valor estimado de Pi es igual a : ", est_pi)
El valor estimado de Pi es igual a : 3.1
cat("La diferencia respeto al valor real de Pi (Error) es :", pi - est_pi)
La diferencia respeto al valor real de Pi (Error) es : 0.04159265
A continuación se crea un gráfico que muestra los resultados de la simulación de los puntos al interior del circulo (azul):
#Gráfico
plot(x, y, col = ifelse(val, "blue", "red"), pch = 10, asp = 1,
xlab = "x", ylab = "y", main = expression("Estimación de" ~ pi ~ "por Simulación"),
xlim = c(0, 1)) # Ajustar el eje X para que vaya de 0 a 1
# Dibujar el círculo
symbols(0.5, 0.5, circles = 0.5, inches = FALSE, add = TRUE, lwd = 1)
# Dibujar el cuadrado
rect(0, 0, 1, 1, border = "black", lwd = 1)
Como resultado se muestran en el gráfico todos los puntos que cayeron dentro del círculo, es decir, tuvieron una distancia (d) menor a 0.25. En rojo los puntos con d > 0.25. A partir de este valor, se calculo el valor de Pi, despejando el área del círculo, como se mostró anteriormente. Esto permite demostrar como a partir de una simulación se puede inferir el valor de una constante. Claramente, el valor se acercará más al valor real entre más grande sea el valor de la muestra. En este caso solo se muestra el resultado con un n= 1.000.