Ejercicio #1

Calculando el valor de π

Con sólo 1000 puntos, es probable que la estimación presente un error de 0.05 o más. Una simulación con 10000 y 100000 puntos tiene mayores probabilidades de dar como resultado una estimación muy cercana al valor verdadero.

# Definir la función para determinar si un punto está dentro del círculo
esta_dentro_del_circulo = function(coordenada_x, coordenada_y) {
  distancia_desde_centro = (coordenada_x - 0.5)^2 + (coordenada_y - 0.5)^2
  return(distancia_desde_centro < 0.25)
}

Ejercicio para una simulación de n = 1.000

n = 1000
# Generar n coordenadas de X y Y
set.seed(2023)
coordenada_x = runif(n, min = 0, max = 1)
coordenada_y = runif(n, min = 0, max = 1)

# Determinar si los puntos están dentro del círculo
dentro_del_circulo = esta_dentro_del_circulo(coordenada_x, coordenada_y)

# Contar cuántos puntos están dentro del círculo
puntos_dentro = sum(dentro_del_circulo)

# Calcular la estimación de π
estimacion_pi = 4 * (puntos_dentro / n)

cat("Número de puntos dentro del círculo para n =", n, ":", puntos_dentro, "\n")
## Número de puntos dentro del círculo para n = 1000 : 801
cat("Estimación de π para n =", n, ":", estimacion_pi, "\n")
## Estimación de π para n = 1000 : 3.204
# Crear un gráfico n = 1000
plot(coordenada_x, coordenada_y, col = ifelse(dentro_del_circulo, "#63B8FF", "#EEE9E9"), pch = 20,
     main = "Simulación de puntos aleatorios n = 1.000",
     xlab = "Coordenada X", ylab = "Coordenada Y")

# Dibujar el círculo sin borrar los puntos existentes
theta = seq(0, 2 * pi, length.out = 100)
circ_x = 0.5 + 0.5 * cos(theta)
circ_y = 0.5 + 0.5 * sin(theta)
lines(circ_x, circ_y, col = "#0000CD", lwd = 2)

Ejercicio para una simulación de n = 10.000

n = 10000
set.seed(2030)
coordenada_x = runif(n, min = 0, max = 1)
coordenada_y = runif(n, min = 0, max = 1)

dentro_del_circulo = esta_dentro_del_circulo(coordenada_x, coordenada_y)
puntos_dentro = sum(dentro_del_circulo)
estimacion_pi = 4 * (puntos_dentro / n)

print(paste("Número de puntos dentro del círculo para n =", n, ":", puntos_dentro))
## [1] "Número de puntos dentro del círculo para n = 10000 : 7792"
print(paste("Estimación de π para n =", n, ":", estimacion_pi))
## [1] "Estimación de π para n = 10000 : 3.1168"
# Crear un gráfico n = 10.000
plot(coordenada_x, coordenada_y, col = ifelse(dentro_del_circulo, "#63B8FF", "#EEE9E9"), pch = 20,
     main = "Simulación de puntos aleatorios n = 10.000",
     xlab = "Coordenada X", ylab = "Coordenada Y")
# Dibujar el círculo
theta = seq(0, 2 * pi, length.out = 100)
circ_x = 0.5 + 0.5 * cos(theta)
circ_y = 0.5 + 0.5 * sin(theta)
lines(circ_x, circ_y, col = "#0000CD", lwd = 2)

Ejercicio para una simulación de n = 100.000

n = 100000
set.seed(2030)
coordenada_x = runif(n, min = 0, max = 1)
coordenada_y = runif(n, min = 0, max = 1)

dentro_del_circulo = esta_dentro_del_circulo(coordenada_x, coordenada_y)
puntos_dentro = sum(dentro_del_circulo)
estimacion_pi = 4 * (puntos_dentro / n)

print(paste("Número de puntos dentro del círculo para n =", n, ":", puntos_dentro))
## [1] "Número de puntos dentro del círculo para n = 1e+05 : 78624"
print(paste("Estimación de π para n =", n, ":", estimacion_pi))
## [1] "Estimación de π para n = 1e+05 : 3.14496"
# Crear un gráfico n = 100.000
plot(coordenada_x, coordenada_y, col = ifelse(dentro_del_circulo, "#63B8FF", "#EEE9E9"), pch = 20,
     main = "Simulación de puntos aleatorios n = 100.000",
     xlab = "Coordenada X", ylab = "Coordenada Y")
# Dibujar el círculo
theta = seq(0, 2 * pi, length.out = 100)
circ_x = 0.5 + 0.5 * cos(theta)
circ_y = 0.5 + 0.5 * sin(theta)
lines(circ_x, circ_y, col = "#0000CD", lwd = 2)

Conclusión Entre mas grande sea la muestra (n), mas cercana será la aproximación al valor real de π.