Planteamiento:

Estimar el valor de π con una simulación. En la figura, un círcuito 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 éste, 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 encontrar una aproximación para el valor de π.

# Cargar la imagen desde una URL
 img(src = "https://centromagis.github.io/actividad2MET/img/pi.png", height = "300px", width = "300px")  # Reemplaza con la URL de tu imagen

Notas: Con sólo 1000 puntos, es probable que la estimación presente un error de 0.05 o más. Una simulación con 10000 y 100000 puntos tiene mayores probabilidades de dar como resultado una estimación muy cercana al valor verdadero.

funciones recomendadas : runif(), funtion()

Metodologia:

El método Montecarlo se aplica creando un modelo matemático del problema, identificando las variables inciertas, generando números aleatorios, ejecutando múltiples simulaciones y analizando los resultados para tomar decisiones lo más informadas posibles.

  1. Primero Generar n coordenadas x: X1, . . . , Xn. Utilizando 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).

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

  3. 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.

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

Solución:

Estimación del valor de π

Para la estimación de Pi se emplean las funciones:

runif() : Esta función genera numeros aleatorios con distribución uniforme.

as.numeric : Esta funcion genera 1 cuando se cumple una condicion , de lo contrario asigna 0.

Para realizar las simulaciones se hará uso de las anteriores funciones de R que permiten generar números bajo diferentes distribuciones de probabilidad.

Para ilustrar la simulación usaremos un rango de generación de numero de tamaño 1 (números entre 0 y 1) y un n = 1.000 para iniciar Crearemos dos grupos de datos x, y.

Se creara una funcion (estimacion_pi) que permita realizar la estimacion de pi con n parametros aleatorios, con la estructura fuction(n)

n=1000
estimacion_pi <- function(n) {
  # n: número de puntos a generar
  # Generar puntos aleatorios
  x <- runif(n, 0, 1)
  y <- runif(n, 0, 1)
  datos = data.frame(x = x, y = y)
  print(head(datos,10))
}

Para determiner si la distancia desde el centro es menor a 0.5, se utiliza la siguiente formula.

((Xi−0.5)^2 + (Yi−0.5) ^2) <=0.5 ^2

Lo que indica la distancia al centro sea menor O igual al radio. El radio es de 0.5 unidades, y el centro está ubicado en las coordenadas (0.5, 0.5).

Para ello se define una funcion completa para calcular n valores aleatorios

# Función para estimar el valor de pi usando el método de Monte Carlo
estimacion_pi <- function(n) {
  # Generar puntos aleatorios 
  x <- runif(n, min = 0, max = 1)
  y <- runif(n, min = 0, max = 1)
  datos = data.frame(x = x, y = y)
 
  d<- (x-0.5)^2 + (y-0.5)^2
  v<- as.numeric (d<=0.25)
  datos$distancia <- d
  dentro_circulo = d < 0.25
  datos$validacion <- dentro_circulo
  tp <- sum(dentro_circulo)
  epi <- (sum(v)/n) * 4
  
  
  graf<-ggplot(datos, aes(x = x, y = y, color = dentro_circulo)) +
  geom_point(size = 1) +
  coord_fixed(ratio = 1) +
  labs(title = paste("Estimación de π:", round(epi, 4)),
       x = "X",
       y = "Y",
       color = "Estado") +
   scale_color_manual(values = c("#FFF68F", "#1CC8EE"), labels = c("Fuera del círculo", "Dentro del círculo")) +
   theme_minimal()
 
  
  # Estimar pi usando la proporción de puntos dentro del círculo
 
  
  return(list(epi = epi, graf = graf, tp = tp, datos = datos))
}

Con la función ya creada,con un valor n de valores, se obtiene el gráfico que muestra la distribución de los puntos azul dentro del círculo, amarillo - fuera del círculo, así como la estimación del valor de π y y el numero de punto que se encuentran dentro del circulo.

Para n=1000

# Numero de la muestra
n = 1000

# Estimar pi(π)  y obtener gráfico de puntos dentro del círculo
resultado <- estimacion_pi(n)
print(head(resultado$datos,10))
##            x          y  distancia validacion
## 1  0.7362617 0.81560037 0.15542319       TRUE
## 2  0.3337741 0.70179810 0.06835353       TRUE
## 3  0.3640928 0.40694839 0.02712938       TRUE
## 4  0.1072412 0.59385045 0.16306740       TRUE
## 5  0.9717260 0.72785151 0.27444173      FALSE
## 6  0.8220512 0.64441001 0.12457123       TRUE
## 7  0.3037345 0.01089524 0.27774360      FALSE
## 8  0.7578912 0.08794864 0.23629421       TRUE
## 9  0.7090876 0.15263337 0.16438122       TRUE
## 10 0.3714192 0.03633290 0.23152021       TRUE
pi_estimado <- resultado$epi
tp <- resultado$tp
plot <- resultado$graf
# Mostrar gráfico,n usado,estimación de pi y número de puntos dentro del círculo

print(plot)

cat("Para un valor de:",n," puntos aleatorios, El valor estimado de π es:",pi_estimado," y el numero de puntos que se encuentran dentro del circulo es de:",tp,"puntos")
## Para un valor de: 1000  puntos aleatorios, El valor estimado de π es: 3.2  y el numero de puntos que se encuentran dentro del circulo es de: 800 puntos

Para n=10000

# Numero de la muestra
n = 10000

# Estimar pi(π)  y obtener gráfico de puntos dentro del círculo
resultado <- estimacion_pi(n)
print(head(resultado$datos,10))
##             x         y  distancia validacion
## 1  0.54951712 0.8253767 0.10832194       TRUE
## 2  0.45029242 0.2242161 0.07852758       TRUE
## 3  0.77260519 0.3825635 0.08810493       TRUE
## 4  0.90446415 0.8890769 0.31497212      FALSE
## 5  0.70074646 0.2006873 0.12988726       TRUE
## 6  0.56156327 0.7076865 0.04692371       TRUE
## 7  0.01136162 0.7222960 0.28818297      FALSE
## 8  0.05048508 0.7716371 0.27585037      FALSE
## 9  0.61057865 0.7042761 0.05395635       TRUE
## 10 0.15476912 0.3037807 0.15768636       TRUE
pi_estimado <- resultado$epi
tp <- resultado$tp
plot <- resultado$graf
# Mostrar gráfico,n usado,estimación de pi y número de puntos dentro del círculo

print(plot)

cat("Para un valor de:",n," puntos aleatorios, El valor estimado de π es:",pi_estimado," y el numero de puntos que se encuentran dentro del circulo es de:",tp,"puntos")
## Para un valor de: 10000  puntos aleatorios, El valor estimado de π es: 3.1468  y el numero de puntos que se encuentran dentro del circulo es de: 7867 puntos

Para n=100000

# Numero de la muestra
n = 100000
options(scipen = 999)  # Aumentar el valor para desactivar notación científica
# Estimar pi(π)  y obtener gráfico de puntos dentro del círculo
resultado <- estimacion_pi(n)
print(head(resultado$datos,10))
##             x          y  distancia validacion
## 1  0.02135152 0.44828932 0.23177836       TRUE
## 2  0.12829792 0.97153785 0.36051038      FALSE
## 3  0.45687338 0.84824859 0.12313699       TRUE
## 4  0.72248494 0.19752648 0.14098978       TRUE
## 5  0.93979894 0.09857791 0.35456280      FALSE
## 6  0.32551885 0.32192113 0.06215576       TRUE
## 7  0.26779875 0.28808262 0.09882640       TRUE
## 8  0.46947203 0.84484675 0.11985124       TRUE
## 9  0.52945543 0.99071817 0.24167195       TRUE
## 10 0.70155218 0.01044298 0.28028936      FALSE
pi_estimado <- resultado$epi
tp <- resultado$tp
plot <- resultado$graf
# Mostrar gráfico,n usado,estimación de pi y número de puntos dentro del círculo

print(plot)

cat("Para un valor de:",n," puntos aleatorios, El valor estimado de π es:",pi_estimado," y el numero de puntos que se encuentran dentro del circulo es de:",tp,"puntos")
## Para un valor de: 100000  puntos aleatorios, El valor estimado de π es: 3.14576  y el numero de puntos que se encuentran dentro del circulo es de: 78644 puntos

Conclusiones

Realizar el proceso de simulación nos indica que es posible aproximar el valor de π usando un sistema de puntos en un plano que obedezcan a una geometría especifica.

Con un numero menor de puntos como 1000, se observa mayor error en la estimación, aumentar a 10000, 1000000 la estimación de π tiende a acercarse más al valor real, reduciendo así el error de la estimación, esto significa que La precisión de la estimación mejora a medida que se aumentan el número de puntos utilizados.

Este metodo de simulación es una demostración práctica para resolver problemas matemáticos complejos. La simplicidad del proceso que consiste en generar puntos aleatorios y evaluar en una condición simple hace que sea una herramienta accesible para estimaciones rápidas y educativas.