Definición del problema

La siguiente figura sugiere como estimar el valor de π con una simulación. En la figura, un círculo 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

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

Se utiliza la funcion “runif”: random unifomr/uniforme aleatorio para generar 1000 coordenadas con valores entre 0 y 1

coor_x <- runif(1000, min = 0, max = 1)
head(coor_x)
## [1] 0.11833757 0.42215978 0.57724797 0.28717895 0.02704342 0.41565604

Después de ejecutar este código, la variable “coor_x” contendrá 1,000 coordenadas x aleatorias, que representan los valores X1, X2, …, Xn en la simulación. Para poder verificar que la distribución sí es uniforme, graficamos un histograma

hist(coor_x)

Como se puede evidenciar en la gráfica, la distribución es uniforme, pues los datos están alrededor de un valor muy similar, es decir, todos los valores tienen la misma probabilidad de ocurrir.

2. Generar 1000 coordenadas y: Y1, . . . , Yn, utilizando nuevamente la distribución uniforme con valor mínimo de 0 y valor máximo de 1

Para este paso replicamos lo que se hizo en el paso 1, esta vez para la coordenada vertical (y)

coor_y <- runif(1000, min = 0, max = 1)
head(coor_y)
## [1] 0.1278293 0.1476526 0.8399605 0.6385272 0.7057044 0.7767945
hist(coor_y)

En el histograma de las coordenadas de Yn también podemos verificar la uniformidad de la distribución.

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

Empezamos definiendo el radio del círculo, que sale de la fórmula del área del círculo: \[A_c = π/4 = π*r^2 -> r= 1/2 = 0.5\]

radio <- 0.5

Luego, calculamos el cuadrado de la distancia desde el centro del círculo (0.5, 0.5) para cada punto \(X_i, Y_i\)

cuad_dist <- (coor_x - 0.5)^2 + (coor_y - 0.5)^2

Verificamos si la distancia al cuadrado es menor que 0.25 (radio al cuadrado, \(r^2\)). Es un vector lógico que indica si cada punto está dentro del círculo.

puntos_circulo <- cuad_dist < radio^2

Imprimimos los primeros valores TRUE y los FALSE de los puntos dentro del círculo

head(puntos_circulo)
## [1] FALSE  TRUE  TRUE  TRUE FALSE  TRUE

4. Determinar cuántos de los puntos están dentro del círculo y cuál es la estimación de π?

Contamos cuántos puntos están dentro del círculo sumando los valores TRUE dentro del vector “puntos_circulo” e imprimimos la cantidad.

puntos_dentro <- sum(puntos_circulo)

Tenemos que el número de puntos dentro del círciulo es igual a

print(paste("El número de puntos dentro del círculo es de ",puntos_dentro))
## [1] "El número de puntos dentro del círculo es de  781"

Finalmente, estimamos el valor de π utilizando la fracción de puntos dentro del círculo, multiplicando por 4 para ajustar la estimación. Esto se basa en el hecho de que el área del círculo es π/4 en relación con el área del cuadrado de lado 1. Y finalmente imprimimos los resultados.

estimacion_pi <- (puntos_dentro/1000) * 4

Y terminamos con el resultado de la estimación de π

print(paste("La estimación de π es:", estimacion_pi))
## [1] "La estimación de π es: 3.124"