Problema 1: Estimación de valor de Pi

La siguiente figura sugiere como estimar el valor de π con una simulacion. En la figura, un circuito con un area 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 circulo es igual a la fraccion del area del cuadrado que abarca a este, la cual es π/4. Por tanto, se puede estimar el valor de π/4 al contar el numero de puntos dentro del circulo, para obtener la estimacion de π/4. De este ultimo resultado se encontrar una aproximacion para el valor de π.

  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. ¿Cuantos de los puntos estan dentro del circulo? ¿Cual es la estimacion de pi?

Respuestas

Distancias <- vector("numeric")

Dis_xy <- function(n, x, y){
  for (i in seq(1, n)) {
    Distancias[i] <- (x[i] - 0.5)^2 + (y[i] - 0.5)^2
}
    return(
      cat(paste("Número de puntos en el circulo:",sum(Distancias < 0.25)),
          paste("Probabilidad:",sum(Distancias < 0.25)/n),
          paste("Probabilidad de Pi:", (sum(Distancias < 0.25)/n)*4),
          sep = "\n")
    )
}

n <- 1000
coord_x <- runif(n, 0, 1)
coord_y <- runif(n, 0, 1)

Dis_xy(n, coord_x, coord_y) #Respuesta al punto c
## Número de puntos en el circulo: 796
## Probabilidad: 0.796
## Probabilidad de Pi: 3.184
n_2 <- 10000
coord_x <- runif(n_2, 0, 1)
coord_y <- runif(n_2, 0, 1)

Dis_xy(n_2, coord_x, coord_y) #Respuesta al punto c
## Número de puntos en el circulo: 7862
## Probabilidad: 0.7862
## Probabilidad de Pi: 3.1448
n_3 <- 100000
coord_x <- runif(n_3, 0, 1)
coord_y <- runif(n_3, 0, 1)

Dis_xy(n_3, coord_x, coord_y) #Respuesta al punto c
## Número de puntos en el circulo: 78745
## Probabilidad: 0.78745
## Probabilidad de Pi: 3.1498