CONSIDERACIONES INICIALES:
Existe una forma de calcular el valor de pi mediante métodos probabilísticos. Para esto se hace uso de experimentos de Monte Carlo, en donde, de forma reiterada, se proyectan N puntos en un cuadrado de tamaño x. Dentro del cuadrado se genera un círculo que limita tangencialmente con cada lado del cuadrado. Para estimar pi se debe calcular el porcentaje de puntos aleatorios que entraron dentro del círculo y multiplicarlo por 4. Cabe anotar que dicho cálculo es solo una aproximación.
Desarrollo del problema:
Para abordar el problema, primero se crean dos vectores con 1000
valores aleatorios de 0 y 1, los cuales servirán para proyectar puntos
en un cuadrado de area igual a 1 unidad. Para garantizar la
reproducibilidad de la muestra, se establece una semilla inicial.
set.seed(163)
x <- runif(n = 1000,
min = 0,
max = 1)
y <- runif(n = 1000,
min = 0,
max = 1)
A continuación, se crea una función para calcular las distancia
de las coordenadas de cada punto generado aletoriamente respecto al
centro del cuadrante.
distancia <- function(x, y) {
cuadratica <- (x - 0.5)^2 + (y - 0.5)^2
return(cuadratica)
}
Después se crea un ciclo for para aplicar la funcion a cada uno
de las coordenadas de los puntos (Xi, Yi). Si la distancia de cada punto
es menor a 0.25 unidades, entonces se marca con la denominación “Por
dentro” indicando que está dentro del circulo, de lo contrario, se
denomina “Por fuera”.
datos <- data.frame(Criterio = character(0))
for (i in 1:1000) {
criterio <- ifelse(distancia(x[i], y[i]) < 0.25, "Por dentro", "Por fuera")
datos <- rbind(datos, data.frame(Criterio = criterio))
}
Por último, se suman los puntos que entraron adentro del círculo
y se divide por el total. Esto con la finalidad de calcular el
porcentaje de puntos que ingresaron. Posteriormente, se multiplica este
porcentaje por 4, siendo esta la estimación final de π.
estimacion <- sum(datos$Criterio == "Por dentro")/nrow(datos)
estimacion * 4
## [1] 3.116
library(ggplot2)
ggplot(data = data.frame(x, y, Criterio = datos$Criterio)) +
geom_point(aes(x, y, color = Criterio)) +
geom_rect(xmin = 0, xmax = 1, ymin = 0, ymax = 1, fill = NA, color = "black") +
theme_minimal() +
labs(title = paste("Estimación de Pi:", round(estimacion * 4, 2)))
CONCLUSIÓN FINAL: