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