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.
knitr::include_graphics("pi.png")
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 π.
Para esta actividad se hizo uso de la libreria Gggplot2
Inicialmente se creó el vector de puntos aleatorios con los tamaños requeridos 1000, 10000 y 100000, que corresponden a los puntos que se dispondran sobre el cuadrado de forma aleatoria.
puntos_aleatorios <- c(1000, 10000, 100000)
Una vez definidos los puntos aleatorios, se procedió a crear la función valor de pi y asignar una semilla para que el resultado obtenido fuera reproducible.
Se asignaron las coordenadas a las variables X y Y y posteriormente se estableció la función para determinar cuando un punto estaba dentro, se crearon los vectores puntos_dentro y puntos_ fuera para poder identificar la catidad de puntos correspondiente a cada uno.
Para calcular los puntos dentro del circulo se uso la función sugerida (Xi−0.5)2+(Yi−0.5)2 <= 0.5 en donde los valores menores o iguales al radio del círculo (0.5) son puntos dentro, para calcular los puntos fuera se resto del total de puntos, los puntos que se encontraban dentro del circulo.
Para la estimación de π se uso el método de Monte Carlo en donde la idea se basa en la proporción de puntos que caen dentro del círculo comparado con el total de puntos generados aleatoriamente dentro del cuadrado, teniendo en cuenta que el area del circulo en este caso corresponde π/4, entonces el valor de π corresponde al número de puntos dentro del circulo sobre el total de puntos por 4.
Una vez realizado este calculo se procede a definir la grafica para mostrar los puntos dentro, fuera del circulo y el valor calculado de π.
# Definir la función valor_pi y establecer semmilla
valor_pi <- function(p, semilla = 123) {
set.seed(semilla)
x <- runif(p, min = 0, max = 1)
y <- runif(p, min = 0, max = 1)
# Determinar si los puntos están dentro del círculo
dentro <- sqrt((x-0.5)^2 + (y-0.5)^2) <= 0.5
puntos_dentro <- sum(dentro)
puntos_fuera <- p - puntos_dentro
# Calcular la estimación de π y contar puntos
estimacion_pi <- (puntos_dentro / p) * 4
print(paste("Estimación de π para", p, "puntos:", estimacion_pi))
print(paste("Puntos dentro del círculo:", puntos_dentro))
print(paste("Puntos fuera del círculo:", puntos_fuera))
# Crear un dataframe para graficar
datos <- data.frame(x, y, dentro)
# Grafica diferenciando los puntos dentro y fuera del circulo
ggplot(datos, aes(x = x, y = y, color = dentro)) +
geom_point() +
scale_color_manual(values = c("red", "green"), labels = c("Fuera del círculo", "Dentro del círculo")) +
theme_minimal() +
labs(title = paste("Estimación de π =", round(estimacion_pi, 4), "\nn =", format(p, big.mark = ",", scientific = FALSE)),
subtitle = paste("Puntos dentro del círculo:", puntos_dentro, "- Puntos fuera del círculo:", puntos_fuera),
x = "x", y = "y",
color = "Posición") +
theme(plot.title = element_text(size = 14, face = "bold"),
plot.subtitle = element_text(size = 12),
legend.title = element_text(size = 12),
legend.text = element_text(size = 10)) +
xlim(0, 1) +
ylim(0, 1) +
coord_fixed()
}
valor_pi(1000)
## [1] "Estimación de π para 1000 puntos: 3.2"
## [1] "Puntos dentro del círculo: 800"
## [1] "Puntos fuera del círculo: 200"
De la estimación de π para mil puntos se tiene un valor de 3.2, en donde 800 puntos se encuentran dentro del ciculo y 200 fuera, este valor se aproxima un poco al valor real de π.
valor_pi(10000)
## [1] "Estimación de π para 10000 puntos: 3.1576"
## [1] "Puntos dentro del círculo: 7894"
## [1] "Puntos fuera del círculo: 2106"
De la estimación de π para diez mil puntos se tiene un valor de 3.15, en donde 7984 puntos se encuentran dentro del ciculo y 2106 fuera, este valor es un poco más cercano que al valor real π que con mil puntos.
valor_pi(100000)
## [1] "Estimación de π para 1e+05 puntos: 3.14632"
## [1] "Puntos dentro del círculo: 78658"
## [1] "Puntos fuera del círculo: 21342"
De la estimación de π para diez mil puntos se tiene un valor de 3.14, en donde 78658 puntos se encuentran dentro del ciculo y 21342 fuera, este valor es mucho más cercano al valor real π que con mil puntos y diez mil puntos.
De esta actividad se pude concluir que en cuanto se incrementan el número de puntos aleatorios dispuestos dentro del cuadrado el valor calculado de π es más cercano al real, tambien evidencia la eficacia del metodo monte carlo para realizar el calculo del valor de π.