Estimación del valor de π: La siguiente figura sugiere como estimar
el valor de π con una simulación. En la figura, un circuito con un área
igual a π/4, está inscrito en un cuadrado cuya área es igual a 1. Se
elige de forma aleatoria n puntos dentro del cuadrado . La probabilidad
de que un punto esté dentro del círculo es igual a la fracción del área
del cuadrado que abarca a este, la cual es π/4. Por tanto, se puede
estimar el valor de π/4 al contar el número de puntos dentro del
círculo, para obtener la estimación de π/4 . De este último resultado se
encontrar una aproximación para el valor de π.
Paso 1: Genere n coordenadas x: X1, . . . , Xn.
Utilice la distribución uniforme con valor mínimo de 0 y valor máximo de
1. La distribución uniforme genera variables aleatorias que tienen la
misma probabilidad de venir de cualquier parte del intervalo
(0,1)(0,1).
Paso 2: Genere 1000 coordenadas y : Y1,…,Yn,
utilizando nuevamente la distribución uniforme con valor mínimo de 0 y
valor máximo de 1.
Paso 3: Cada punto (Xi,Yi) se encuentra dentro del
círculo si su distancia desde el centro (0.5,0.5)(0.5,0 es menor a 0.5.
Para cada par (Xi,Yi)determine si la distancia desde el centro es menor
a 0.5 Esto último se puede realizar al calcular el valor
(Xi−0.5)2+(Yi−0.5)2, que es el cuadrado de la distancia, y al
determinar si es menor que 0.25
Paso 4: ¿Cuántos de los puntos están dentro del
círculo? ¿Cuál es su estimación de π?
Respuesta paso 1
set.seed(1)
n1=1000
xi <- runif(n1,min = 0, max = 1)
head(xi)
## [1] 0.2655087 0.3721239 0.5728534 0.9082078 0.2016819 0.8983897
Respuesta paso 2
n2=1000
yi <- runif(n1,min = 0, max = 1)
head(yi)
## [1] 0.53080879 0.68486090 0.38328339 0.95498800 0.11835658 0.03910006
Respuesta paso 3
est_pi <-function(n1,n2){
xi <- runif(n1,min = 0, max = 1)
yi <- runif(n2,min = 0, max = 1)
distancia <- numeric()
for (i in 1:length(xi)){distancia[i]=(xi[i]-0.5)^2 + (yi[i]-0.5)^2}
puntos=ifelse(distancia < 0.25, 1, 0)
sum(puntos)
4 * sum(puntos)/length(xi)}
Respuesta paso 4
Simulacion de 1.000 datos aleatorios
puntos_1.000 <- est_pi(1000,1000)
error_abs=puntos_1.000-pi #Error absoluto
a1=cbind(puntos_1.000,error_abs)
a1
## puntos_1.000 error_abs
## [1,] 2.996 -0.1455927
Simulacion de 10.000 datos aleatorios
puntos_10.000 <- est_pi(10000,10000)
error_abs=puntos_10.000-pi #Error absoluto
a2=cbind(puntos_10.000,error_abs)
a2
## puntos_10.000 error_abs
## [1,] 3.1488 0.007207346
Simulacion de 100.000 datos aleatorios
puntos_100.000 <- est_pi(100000,100000)
error_abs=puntos_100.000-pi #Error absoluto
a3=cbind(puntos_100.000,error_abs)
a3
## puntos_100.000 error_abs
## [1,] 3.13892 -0.002672654
El resultado de las 3 simulaciones realizadas es que con solo mil
muestras tanto para xi como para yi se muestra un error bastante pequeño
y un valor cercano al número pi, mientras que cuando se aumenta la
cantidad de variables aleatorias a 10.000 es un número que cada vez se
muestra más cercano y ya con 100.000 muestras aleatorias ya que se pasa
de un error de -0.002 a -0.007, lo cual es una diferencia notoria a la
hora de querer estimas un número tan importante como es pi, pero su
valor con las 10.000 muestras es de 13.1488 ya dando indicios de que se
está acercado al valor que queremos y con las 100.000 a pesar que sea
13.138 refleja un error menor,estas simulaciones se manejaron con una
semilla para poder brindar el análisis.