Informe de Presentación de Solución del Problema: Estimación de π

Introducción

El objetivo de este informe es presentar una solución para estimar el valor de π utilizando el método de Montecarlo. Este método se basa en la generación aleatoria de puntos dentro de un cuadrado y el cálculo de cuántos de esos puntos caen dentro de un círculo inscrito en el cuadrado. La relación entre el área del círculo y el área del cuadrado proporciona una estimación de π.

Pasos de la solución

Paso 1: Cargar el paquete ggplot2

# Cargar el paquete ggplot2
library(ggplot2)

En este paso, cargamos el paquete ggplot2, que será utilizado para crear visualizaciones de los resultados.

Paso 2: Establecer la semilla para la reproducibilidad

# Establecer la semilla para la reproducibilidad
set.seed(123)

Establecemos una semilla aleatoria con el valor 123 para garantizar que los resultados sean reproducibles en futuras ejecuciones. Esto es esencial para poder comparar y validar los resultados de las simulaciones.

Paso 3: Crear una gráfica inicial

# Generar datos aleatorios con 1000 puntos
n <- 1000
datos <- data.frame(
  x = runif(n, 0, 1),  # Coordenada x aleatoria entre 0 y 1
  y = runif(n, 0, 1)   # Coordenada y aleatoria entre 0 y 1
)

# Crear un gráfico que represente el cuadrado y el círculo
cuadrado <- ggplot() +
  geom_rect(xmin = 0, xmax = 1, ymin = 0, ymax = 1, fill = "transparent", color = "black") +
  coord_cartesian(xlim = c(0, 1), ylim = c(0, 1)) +
  theme_void() +
  labs(title = "Puntos dentro y fuera del círculo")

# Crear un gráfico de dispersión con puntos dentro y fuera del círculo
grafico_inicial <- cuadrado +
  geom_point(data = datos, aes(x, y), alpha = 0.6) +
  geom_point(data = subset(datos, (x - 0.5)^2 + (y - 0.5)^2 < 0.25), aes(x, y), color = "blue") +
  theme(legend.position = "none")

# Mostrar el gráfico inicial
print(grafico_inicial)

En este paso, generamos una gráfica inicial que representa visualmente el problema. La gráfica muestra un cuadrado unitario (área 1), un círculo inscrito en el cuadrado y puntos aleatorios generados dentro del cuadrado. La visualización es útil para comprender la distribución de puntos dentro y fuera del círculo.

Paso 4: Realizar las simulaciones y cálculos de π

# Número de simulaciones y vector de aproximaciones
n_simulaciones <- c(1000, 10000, 100000)
aproximaciones_pi <- numeric(length(n_simulaciones))

# Realizar las simulaciones y cálculos de π
for (i in seq_along(n_simulaciones)) {
  n <- n_simulaciones[i]
  
  # Generar datos aleatorios
  datos <- data.frame(
    x = runif(n, 0, 1),  # Coordenada x aleatoria entre 0 y 1
    y = runif(n, 0, 1)   # Coordenada y aleatoria entre 0 y 1
  )
  
  # Contar puntos dentro del círculo
  puntos_dentro <- sum((datos$x - 0.5)^2 + (datos$y - 0.5)^2 < 0.25)
  
  # Calcular la aproximación de π
  aproximaciones_pi[i] <- (puntos_dentro / n) * 4
  
  # Imprimir resultados de la simulación
  cat("Simulación con", n, "puntos:\n")
  cat("  Puntos dentro del círculo:", puntos_dentro, "\n")
  cat("  Estimación de π:", aproximaciones_pi[i], "\n\n")
  }
## Simulación con 1000 puntos:
##   Puntos dentro del círculo: 752 
##   Estimación de π: 3.008 
## 
## Simulación con 10000 puntos:
##   Puntos dentro del círculo: 7882 
##   Estimación de π: 3.1528 
## 
## Simulación con 1e+05 puntos:
##   Puntos dentro del círculo: 78596 
##   Estimación de π: 3.14384

En este paso, realizamos tres simulaciones diferentes con 1000, 10000 y 100000 puntos aleatorios. Para cada simulación, generamos datos aleatorios, contamos cuántos de esos puntos caen dentro del círculo inscrito y calculamos la estimación de π utilizando la fórmula (puntos dentro del círculo / n) * 4.

Resultados:

Simulación con 1000 puntos: Puntos dentro del círculo: 787 Estimación de π: 3.148

Simulación con 10000 puntos: Puntos dentro del círculo: 7837 Estimación de π: 3.1348

Simulación con 100000 puntos: Puntos dentro del círculo: 78571 Estimación de π: 3.14284

Paso 5: Crear un marco de datos con los resultados

# Crear un marco de datos con los resultados
resultados <- data.frame(
  Puntos = n_simulaciones,
  Aproximacion_de_Pi = aproximaciones_pi
)

En este paso, creamos un marco de datos que organiza los resultados de las simulaciones. Este marco de datos incluye dos columnas: “Puntos” que representa el número de puntos en la simulación y “Aproximacion_de_Pi” que almacena las estimaciones de π para cada simulación.

Paso 6: Graficar los resultados

# Graficar los resultados
grafico_simulaciones <- ggplot(resultados, aes(x = Puntos, y = Aproximacion_de_Pi)) +
  geom_line() +
  geom_point() +
  labs(
    title = "Aproximación de π mediante simulación",
    x = "Número de Puntos",
    y = "Aproximación de π"
  ) +
  theme_minimal()

# Mostrar el gráfico de las simulaciones
print(grafico_simulaciones)

Finalmente, creamos un gráfico que muestra cómo varía la estimación de π en función del número de puntos en las simulaciones. Este gráfico nos permite visualizar la tendencia de mejora en la precisión de la estimación a medida que aumenta el número de puntos.

Conclusiones

El método de Montecarlo es una poderosa técnica para estimar π y otros valores numéricos mediante la generación aleatoria de datos. Las simulaciones con un mayor número de puntos proporcionan estimaciones más precisas de π. La visualización de los resultados mediante gráficos facilita la comprensión de cómo la precisión aumenta con la cantidad de puntos generados.