Problema 1: Estimación del valor π

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: