library(dplyr)
## Warning: package 'dplyr' was built under R version 4.0.5
Se genera un conjunto de datos aleatorios con coordenadas \(x,y\) entre valores de 2 a 10 usando la función \(runif\) de r, tanto para la coordenada en el eje \(x\) como en el eje \(y\).
n = 100000 # Número de datos a simular
xi = 2
xf = 10
x = runif(n, xi, xf) # coordenada x
y = runif(n,xi, xf) # coordenada y
dt = data.frame(x, y)
plot(x, y, cex = 0.1, pch = 16)
points(mean(x), mean(y), cex = 2, col = 'red', pch = 16)
\[Ecuación~circunferencia:~(x-a)^2+(y-b)^2=r^2\] \[y=\pm\sqrt{r^2-(x-a)^2}+b\] Circunferencia con centro en \(6,6\)
\[y=\pm\sqrt{3^2-(x-6)^2}+6\]
Se debe estimar la proporción de puntos que caen dentro de la circunferencia, para estimar su área y finalmente estimar \(\pi\).
## definiendo radio y coordenadas de la circunferencia de radio 3
r = 3.01 # se pone este valor para que runif incluya el 3
x_ = runif(n, -r+6, r+6)
y_p = sqrt(r^2-(x_-6)^2)+6
y_m = -sqrt(r^2-(x_-6)^2)+6
plot(x, y, cex = 0.1, pch = 16)
points(mean(x), mean(y), cex = 1, col = 'red', pch = 16)
points(x_, y_p, cex = 0.3, col = 'red', pch = 16)
points(x_, y_m, cex = 0.3, col = 'red', pch = 16)
Filtraremos el conjunto de datos iniciales (generados aleatoriamente) para encontrar los puntos que caen en la circunferencia definida en el punto anterior.
puntos = dt %>%
filter(x>=min(x_), x<=max(x_),
y<=sqrt(r^2-(x-6)^2)+6,
y>=-sqrt(r^2-(x-6)^2)+6)
## Warning in sqrt(r^2 - (x - 6)^2): Se han producido NaNs
## Warning in sqrt(r^2 - (x - 6)^2): Se han producido NaNs
plot(x, y, cex = 0.1, pch = 16)
points(puntos$x, puntos$y, cex = 0.3, col = 'red', pch = 16)
porc = nrow(puntos)/n
El 44.63% de los puntos generados aleatoriamente caen dentro de la circunferencia propuesta.
area_simulada = (xf-xi)^2
area_circ = round(area_simulada*porc, 3)
El area del rectángulo simulado es 64 \(unidades^2\), y el área de la circunferencia encontrada es 28.561 \(unidades^2\).
\[Área~circunferencia=\pi r^2\]
\[\pi=\frac{Área~circunferencia}{r^2}\]
pi = area_circ/r^2
El valor de \(\pi\) encontrado con 10^{5} puntos simulados es: 3.1523935.