Redacción del problema

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 . 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 pide encontrar una aproximación para el valor de π.

Pasos sugeridos:

  • Paso a

Genere n coordenadas x : X1 , . . . , Xn. Utilice la distribución uniforme con valor mínimo de 0 y valor máximo de 1 . La distribución uniforme genera variables aleatorias que tienen la misma probabilidad de venir de cualquier parte del intervalo (0,1).

  • Paso b

Genere 1000 coordenadas y : Y1,…,Yn, utilizando nuevamente la distribución uniforme con valor mínimo de 0 y valor máximo de 1.

  • Paso c

Cada punto (Xi,Yi) se encuentra dentro del círculo si su distancia desde el centro (0.5,0.5) es menor a 0.5 . Para cada par (Xi,Yi) determine si la distancia desde el centro es menor a 0.5 . Esto último se puede realizar al calcular el valor (Xi−0.5)^2 +(Yi−0.5)^2 , que es el cuadrado de la distancia, y al determinar si es menor que 0.25.

  • Paso d

¿Cuántos de los puntos están dentro del círculo? ¿Cuál es su estimación de π?

A continuación, se presenta el código donde se relaciona el uso de las funciones recomendadas, runif() y function(), para la solución del requerimiento redactado:

# Primer paso - Definir función para estimar π
funcion_estimacion_pi <- function(n) {
  
  # Paso a) Generar n coordenadas x utilizando distribución uniforme en el intervalo (0,1)
  x <- runif(n, min = 0, max = 1)
  
  # Paso b) Generar n coordenadas y utilizando distribución uniforme en el intervalo (0,1)
  y <- runif(n, min = 0, max = 1)
  
  # Paso c) y d)
  
  #Paso 1. Calcular el cuadrado de la distancia desde el centro (0.5, 0.5) para cada punto (x, y)
  distancia_cuadrado <- (x - 0.5)^2 + (y - 0.5)^2
  
  # Paso2. Verificar si cada punto está dentro del círculo comparando la distancia con el radio al cuadrado (0.25)
  puntos_dentro_circulo <- distancia_cuadrado < 0.25
  
  # Paso 3. Contar cuántos puntos están dentro del círculo
  puntos_dentro <- sum(puntos_dentro_circulo)
  cat("Cantidad de puntos dentro del círculo:", puntos_dentro, "\n")
  
  # Paso 4. Calcular la estimación de π multiplicando la proporción de puntos dentro del círculo por 4
  estimacion_pi <- (puntos_dentro / n) * 4
  
  return(estimacion_pi)
}
  • Resultados

A continuación, se presenta el resultado de la cantidad de puntos dentro del círculo y la estimación de pi, con un uso de 1.000 puntos:

  • 1.000 puntos
valor_pi<- 3.141592653589793238462
# Llamar a la función para estimar π con n = 1000
n <- 1000
resultado_estimacion <- funcion_estimacion_pi(n)
## Cantidad de puntos dentro del círculo: 794
# Imprimir resultado
cat("Estimación de π con", n, "puntos:", resultado_estimacion, "\n")
## Estimación de π con 1000 puntos: 3.176
#Margen de error
margen_error_porcentaje <- abs((resultado_estimacion - valor_pi) / valor_pi) * 100
cat("Margen de error:", margen_error_porcentaje, "%\n") # La función cat() en R se utiliza para imprimir (mostrar) texto o valores en la consola
## Margen de error: 1.09522 %

Adicionalmente, se presenta la cantidad de puntos dentro del círculo y el resultado de la estimación de pi, con un uso de 10.000 y 100.000 puntos, donde se observa que a medida que se aumenta el valor de n (cantidad de puntos), se presenta disminución en el margen de error:

  • 10.000 puntos
valor_pi<- 3.141592653589793238462
# Llamar a la función para estimar π con n = 1000
n <- 10000
resultado_estimacion <- funcion_estimacion_pi(n)
## Cantidad de puntos dentro del círculo: 7904
# Imprimir resultado
cat("Estimación de π con", n, "puntos:", resultado_estimacion, "\n")
## Estimación de π con 10000 puntos: 3.1616
#Margen de error
margen_error_porcentaje <- abs((resultado_estimacion - valor_pi) / valor_pi) * 100
cat("Margen de error:", margen_error_porcentaje, "%\n") # La función cat() en R se utiliza para imprimir (mostrar) texto o valores en la consola
## Margen de error: 0.6368536 %
  • 100.000 puntos
valor_pi<- 3.141592653589793238462
# Llamar a la función para estimar π con n = 1000
n <- 100000
resultado_estimacion <- funcion_estimacion_pi(n)
## Cantidad de puntos dentro del círculo: 78576
# Imprimir resultado
cat("Estimación de π con", n, "puntos:", resultado_estimacion, "\n")
## Estimación de π con 1e+05 puntos: 3.14304
#Margen de error
margen_error_porcentaje <- abs((resultado_estimacion - valor_pi) / valor_pi) * 100
cat("Margen de error:", margen_error_porcentaje, "%\n") # La función cat() en R se utiliza para imprimir (mostrar) texto o valores en la consola
## Margen de error: 0.04607047 %