PROBLEMA 1 - ESTIMACIÓN DEL VALOR DE PI

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:

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

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.

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.

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

Generación de la función:

Genero una función que me guarde las fórmulas para calcular el número de tiros adentro y el estimado del valor de Pi:

set.seed(123)

simulacionPi <- function(lanzamientos) {
  tirosdentro <- 0 #Número de tiros que caer,an dentro
  x <- runif(n = lanzamientos, min = 0, max = 1) #Genero coordenadas de X con valor mínimo 0 y máximo 1
 
   y <- runif(n = lanzamientos, min = 0, max = 1)#Genero coordenadas de X con valor mínimo 0 y máximo 1
  
  sumcuadrados <- ((x - 0.5)^2) + ((y - 0.5)^2) #Calculo el cuadrado de la distancia y lo guardo en una variable
  
  dentro <- which(sumcuadrados <= 0.25) # Identifico si el cuadrado de la distancia es menor o igual a 0.25 para determinar los que caen dentro.
  
  tirosdentro <- length(dentro) #Número de tiros que caen dentro del círculo. La función length mide la longitud de un vector.
  
  resultado <- list(pi_estimado = 4 * tirosdentro / lanzamientos, tirosdentro = tirosdentro, x=x, y=y, dentro=dentro) # Guardo en un vector los datos de estimación de Pi y del número de tiros que caen dentro de la circunferencia
  
  return(resultado) # Genero los resultados.
}

Resultados con 1.000 puntos:

resultado <- simulacionPi(1000) #Simulo 1.000 lanzamientos
cat (" Con 1.000 lanzamientos, el numero de tiros que caen dentro del circulo es de ", resultado$tirosdentro, "\n") 
##  Con 1.000 lanzamientos, el numero de tiros que caen dentro del circulo es de  800
cat (" y el valor estimado de pi es de ", resultado$pi_estimado, "\n") 
##  y el valor estimado de pi es de  3.2
cat ("El error absoluto para calcular pi con 1000 puntos es de ", resultado$pi_estimado - pi)
## El error absoluto para calcular pi con 1000 puntos es de  0.05840735

Resultados con 10.000 puntos:

resultado <- simulacionPi(10000) #Simulo 10.000 lanzamientos
cat (" Con 10.000 lanzamientos, el úumero de tiros que caen dentro del círculo es de ", resultado$tirosdentro, "\n") 
##  Con 10.000 lanzamientos, el úumero de tiros que caen dentro del círculo es de  7882
cat (" y el valor estimado de pi es de ", resultado$pi_estimado, "\n") 
##  y el valor estimado de pi es de  3.1528
cat ("El error absoluto para calcular pi con 10.000 puntos es de ", resultado$pi_estimado - pi)
## El error absoluto para calcular pi con 10.000 puntos es de  0.01120735

Resultados con 100.000 puntos:

resultado <- simulacionPi(100000) #Simulo 100.000 lanzamientos
cat (" Con 100.000 lanzamientos, el número de tiros que caen dentro del círculo es de ", resultado$tirosdentro, "\n") 
##  Con 100.000 lanzamientos, el número de tiros que caen dentro del círculo es de  78600
cat (" y el valor estimado de pi es de ", resultado$pi_estimado, "\n") 
##  y el valor estimado de pi es de  3.144
cat ("El error absoluto para calcular pi con 100.000 puntos es de ", resultado$pi_estimado - pi)
## El error absoluto para calcular pi con 100.000 puntos es de  0.002407346

Conclusión:

Podemos observar que a mayor número de lanzamientos o simulaciones, nos aproximamos mas al valor verdadero de Pi.