library(dplyr)
## Warning: package 'dplyr' was built under R version 4.0.5

Simulación: estimar el valor de \(\pi\) y área de una circunferencia

Generando conjunto de puntos aleatorios

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)

Generando conjunto de puntos para la circunferencia de referencia

\[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)

Determinando puntos que caen dentro de la circunferencia

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)

Porcentaje de puntos que caen en la circunferencia

porc = nrow(puntos)/n

El 44.63% de los puntos generados aleatoriamente caen dentro de la circunferencia propuesta.

Estimación del área

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\).

Estimación del valor de \(\pi\)

\[Á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.