INTRODUCCION

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

Pasos sugeridos:

  1. 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).

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

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

Nota

  • 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(){}

  • Problema tomado de Navidi(2006)

DESARROLLO

Funcion para generar una muestra de puntos con n coordenadas x-y y distribución uniforme entre 0-1

fmuestra <- function(n){
  coordenadasx<-runif(n, min=0, max=1)
  coordenadasy<- runif(n, min=0, max=1)
  muestra <- data.frame(x=coordenadasx, y=coordenadasy)
  return(muestra)
}

Funcion para determine si cada punto se encuentra dentro del círculo de radio 0.5 y centro en (0.5, 0.5)

fpuntoscirculo <- function(dataframe){
  distanciacuadrado <- (dataframe$x - 0.5)^2 + (dataframe$y - 0.5)^2
  verificardistancia <- distanciacuadrado < 0.25
  dataframe$dentrocirculo <- verificardistancia
  return(dataframe)
}

Funcion para contar los puntos dentro del circulo

fcontarpuntos <- function(dentrocirculo) {
  conteo<-sum(puntoscirculo$dentrocirculo)
  return(conteo)
}

Realizamos las simulaciones para 1000, 10000 y 100000 puntos.

set.seed(418)
simulacion <- c(10, 100, 1000, 10000, 100000)
resultados <- numeric(length(simulacion))
piestimado <- numeric(length(simulacion))
error<-numeric(length(simulacion))     
par(pty = "s")  

for (i in 1:length(simulacion)){
  n<-simulacion[i]
  muestra <- fmuestra(n)
  puntoscirculo <- fpuntoscirculo(muestra)
  resultados [i] <-fcontarpuntos(puntoscirculo)
  piestimado[i]=4*resultados[i]/simulacion[i]
  error[i]<-abs(piestimado[i]-pi)*100
  colores <- ifelse(puntoscirculo$dentrocirculo, "blue", "red")
   plot(x = muestra$x, y = muestra$y, col = colores, pch = 19, main = paste("Simulacion con n =", n), xlim = c(0, 1), ylim = c(0, 1))
   symbols(0.5, 0.5, 0.5, add = TRUE, lwd = 2, inches = FALSE)
  cat ("El valor estimado de pi:", piestimado[i], "\n")
  cat ("Error estimado:", error[i],"%","\n" )
}

## El valor estimado de pi: 2.8 
## Error estimado: 34.15927 %

## El valor estimado de pi: 3.24 
## Error estimado: 9.840735 %

## El valor estimado de pi: 3.116 
## Error estimado: 2.559265 %

## El valor estimado de pi: 3.146 
## Error estimado: 0.4407346 %

## El valor estimado de pi: 3.14604 
## Error estimado: 0.4447346 %
par(pty = "m")  

ANALISIS DE RESULTADOS

analisis <- data.frame("Numero puntos"=simulacion,"Pi estimado"=piestimado,"Error"=error)
analisis
##   Numero.puntos Pi.estimado      Error
## 1         1e+01     2.80000 34.1592654
## 2         1e+02     3.24000  9.8407346
## 3         1e+03     3.11600  2.5592654
## 4         1e+04     3.14600  0.4407346
## 5         1e+05     3.14604  0.4447346

En el análisis anterior, llevamos a cabo una simulación de Monte Carlo para estimar el valor de pi (π) utilizando puntos generados aleatoriamente dentro de un cuadrado unitario y contando cuántos de esos puntos caen dentro de un círculo inscrito en el cuadrado. A partir de esta simulación, hemos obtenido estimaciones de pi para diferentes tamaños de muestra (n) y hemos calculado el error en cada estimación. Observamos que:

  • A medida que aumenta el tamaño de la muestra (n), la precisión de la estimación de pi mejora significativamente. Esto se debe a que, con un mayor número de puntos generados aleatoriamente, la simulación se acerca más al comportamiento real de los eventos y se reduce el error en la estimación.

  • Con un tamaño de muestra lo suficientemente grande, la estimación de pi se acerca considerablemente al valor real de pi. Esto demuestra que la simulación de Monte Carlo converge al valor real a medida que aumenta el tamaño de la muestra.

  • A medida que aumenta el tamaño de la muestra, el error de estimación disminuye significativamente. Esto indica que, con una muestra lo suficientemente grande, la estimación de pi es altamente precisa y se acerca mucho al valor real.

CONCLUSION

Podemos concluir que a medida que aumenta el número de puntos generados en la simulación (n), el valor estimado de pi (π) se acerca más al valor real de pi (π ≈ 3.14159265359), por ende, el error tiende a disminuir drásticamente a medida que aumenta el número de puntos en la simulación. Esto demuestra la robustez y la capacidad de convergencia de las simulaciones para estimar valores con alta precisión.