Para la estimación de \(\pi\) se emplean las funciones:
runif(): genera números aleatorios con distribución
uniforme as.numeric(): genera \(1\) cuando se cumple una condición, de lo
contrario asigna \(0\)
Se generan \(n = 10000\) puntos de coordenadas \((x,y)\) utilizando una distribución uniforme en el rango de \(0\) a \(1\). Para determinar si los puntos \((x,y)\) se encuentran dentro del círculo, se calcula su distancia al centro \((0.5,0.5)\). Si la distancia es menor o igual \(0.25\), el punto se encuentra dentro del círculo. Luego, se calcula la proporción de puntos dentro del círculo diviendo el número de puntos dentro del círculo respecto del total de puntos. Finalmente la estimación de \(\pi\) se obtiene multiplicando la proporción de puntos dentro del círculo por \(4\).
set.seed(123)
n <- 10000
x <- runif(n)
y <- runif(n)
distancia <- (x-0.5)^2 + (y-0.5)^2
puntos_dentro <- as.numeric(distancia <= 0.25)
proporcion <- sum(puntos_dentro)/n
epi <- proporcion*4
error <- epi - pi
cat("Estimación de puntos dentro del círculo:\t", proporcion, "\n")
cat("Estimación de pi:\t\t\t\t", epi, "\n")
cat("Error en la estimacion:\t\t\t\t", error)
Estimación de puntos dentro del círculo : 0.7894 Estimación de π : 3.1576 Error en la estimación de π : 0.01600735
par(mar = c(0, 0, 1, 0))
plot(x, y, col = ifelse(puntos_dentro, "#66CD00", "#EE3B3B"),
pch = 20, asp = 1,
xlim = c(0, 1), ylim = c(0, 1), xlab = "", ylab = "",
axes = FALSE, frame.plot = FALSE,
main = "Gráfica de distribución de puntos dentro del círculo")
symbols(0.5, 0.5, circles = 0.5, add = TRUE, inches = FALSE, lwd = 2)
rect(0, 0, 1, 1, border = "black", lwd = 2)
text(0, 0, labels = "0", pos = 2, offset = 0.5, cex = 1.2)
text(1, 0, labels = "1", pos = 4, offset = 0.5, cex = 1.2)
text(0, 1, labels = "1", pos = 2, offset = 0.5, cex = 1.2)