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()
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.
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).
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.
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 π ?
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.
# 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
# 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
# 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
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.