Se procede a la contrucción de una función que me permita estimar el valor de \(\pi\) para distintos tamaños de muestra:
library(ggplot2)
set.seed(66) #Semilla
estPi <- function(n){
x <- runif(n, min = 0, max = 1)
y <- runif(n, min = 0, max = 1)
distancia <- (x - 0.5)^2 + (y - 0.5)^2
dentroCirculo <- distancia < 0.25
sumaDentroCirculo <- sum(dentroCirculo)
piEst <- 4 * sumaDentroCirculo / n
#Grafico
puntos <- data.frame(
x = x,
y = y,
c = ifelse(dentroCirculo, "Dentro", "Fuera")
)
p <- ggplot() + xlim(0, 1) + ylim(0, 1)
p <- p + annotate("rect", xmin = 0, xmax = 1, ymin = 0, ymax = 1, fill = NA, color = "black")
circulo <- data.frame(
x = 0.5 + 0.5 * cos(seq(0, 2*pi, length.out = 100)),
y = 0.5 + 0.5 * sin(seq(0, 2*pi, length.out = 100))
)
p <- p + geom_path(data = circulo, aes(x, y))
p <- p + coord_fixed()
p <- p + geom_point(data = puntos, aes(x, y, color = c))
p <- p + theme_minimal()
p
lista <- list(NumeroPuntos = n, x = x, y = y, DentroCirculo = dentroCirculo, PuntosDentroCirculo = sumaDentroCirculo, EstimacionPi = piEst, grafico=p)
return(lista)
}
resultados <- estPi(1000)
cat("Con", resultados$NumeroPuntos, "coordenadas, el número de puntos que caen dentro del circulo es de", resultados$PuntosDentroCirculo, "\n")
## Con 1000 coordenadas, el número de puntos que caen dentro del circulo es de 810
cat("Y la estimación del valor de Pi es:", resultados$EstimacionPi, "\n")
## Y la estimación del valor de Pi es: 3.24
cat("Con un error absoluto de:", abs(pi-resultados$EstimacionPi))
## Con un error absoluto de: 0.09840735
resultados$grafico
resultados <- estPi(10000)
cat("Con", resultados$NumeroPuntos, "coordenadas, el número de puntos que caen dentro del circulo es de", resultados$PuntosDentroCirculo, "\n")
## Con 10000 coordenadas, el número de puntos que caen dentro del circulo es de 7891
cat("Y la estimación del valor de Pi es:", resultados$EstimacionPi, "\n")
## Y la estimación del valor de Pi es: 3.1564
cat("Con un error absoluto de:", abs(pi-resultados$EstimacionPi))
## Con un error absoluto de: 0.01480735
resultados$grafico
resultados <- estPi(100000)
cat("Con", resultados$NumeroPuntos, "coordenadas, el número de puntos que caen dentro del circulo es de", resultados$PuntosDentroCirculo, "\n")
## Con 1e+05 coordenadas, el número de puntos que caen dentro del circulo es de 78163
cat("Y la estimación del valor de Pi es:", resultados$EstimacionPi, "\n")
## Y la estimación del valor de Pi es: 3.12652
cat("Con un error absoluto de:", abs(pi-resultados$EstimacionPi))
## Con un error absoluto de: 0.01507265
resultados$grafico
Se logra observar a partir de los resultados obtenidos, que a mayor cantidad de muestras tomadas, se logra aproximar mas al valor real de \(\pi\).