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:
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).
Genere 1000 coordenadas y : Y1,…,Yn, utilizando nuevamente la distribución uniforme con valor mínimo de 0 y valor máximo de 1.
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.
¿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)
}
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:
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:
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 %
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 %