Problema 1: Estimación del valor de \(\pi\)

La siguiente figura sugiere como estimar el valor de \(\pi\) con una simulación. En la figura, un círcuito con un área igual a \(\pi / 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 éste, la cual es \(\pi / 4\). Por tanto, se puede estimar el valor de \(\pi / 4\) al contar el número de puntos dentro del círculo, para obtener la estimación de \(\pi / 4\). De este último resultado se encontrar una aproximación para el valor de \(\pi\).

Pasos sugeridos:

a. Genere \(n\) coordenadas \(x: X_1, X_2, \dots, X_n\). 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: Y_1, Y_2, \dots, Y_n\), utilizando nuevamente la distribución uniforme con valor mínimo de 0 y valor máximo de 1.

c. Cada punto \((X_i, Y_i)\) se encuentra dentro del círculo si su distancia desde el centro \((0.5, 0.5)\) es menor a \((0.5)\) Para cada par \((X_i, Y_i)\), determine si la distancia desde el centro es menor a \((0.5)\). Esto último se puede realizar al calcular el valor \((X_i - 0.5)^2 + (Y_i - 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 \(\pi\)?


Al final de la sección se encuentran las conclusiones según los resultados obtenidos en cada ítem.

Simulación con n = 1000:

set.seed(123)
n1 <- 1000

# Generar coordenadas x, y aleatorias entre 0 y 1:
x1 <- runif(n1, min = 0, max = 1)
y1 <- runif(n1, min = 0, max = 1)

# Distancias:
distancia1 <- (x1 - 0.5)^2 + (y1 - 0.5)^2

# Puntos válidos:
puntos_circulo1 <- sum(distancia1 <= 0.25)

# Estimar el valor de pi para n1:
pi_uno <- (puntos_circulo1 / n1) * 4

# Error absoluto:
error_uno <- round(abs((3.1416 - pi_uno) / 3.1416) * 100, 3)

Resultados:

## [1] "El número de puntos dentro del círculo para una simulación del valor de π con n = 1000 es: 800"
## [1] "El valor de π para una simulación con n = 1000 es: 3.2"
## [1] "El error absoluto del valor de π para una simulación con n = 1000 es: 1.859 %"

Simulación con n = 100000:

set.seed(123)
n2 <- 100000

# Generar coordenadas x, y aleatorias entre 0 y 1:
x2 <- runif(n2, min = 0, max = 1)
y2 <- runif(n2, min = 0, max = 1)

# Distancias:
distancia2 <- (x2 - 0.5)^2 + (y2 - 0.5)^2

# Puntos válidos:
puntos_circulo2 <- sum(distancia2 <= 0.25)

# Estimar el valor de pi para n2:
pi_dos <- (puntos_circulo2 / n2) * 4

# Error absoluto:
error_dos <- round(abs((3.1416 - pi_dos) / 3.1416) * 100, 3)

Resultados:

## [1] "El número de puntos dentro del círculo para una simulación del valor de π con n = 100000 es: 78658"
## [1] "El valor de π para una simulación con n = 100000 es: 3.14632"
## [1] "El error absoluto del valor de π para una simulación con n = 100000 es: 0.15 %"

Conclusiones:

• Número de puntos dentro del círculo vs. el valor de \(\pi\):

A medida que aumenta el número de puntos (n), la estimación del valor de \(\pi\) se vuelve más precisa. Esto se debe a que con un mayor número de puntos, la proporción de puntos que caen dentro del círculo se aproxima más a la proporción teórica que define \(\pi\).

• Número de puntos dentro del círculo vs. error absoluto:

El error absoluto es la diferencia relativa expresada en porcentaje entre el valor estimado de \(\pi\) y el valor real (3.1416). Conforme aumenta el número de puntos (n), el error absoluto tiende a disminuir. Esto significa que las simulaciones con un mayor número de puntos son más precisas y están más cerca del valor real de \(\pi\).