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 π .
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)
Genere 1000 coordenadas y : Y1,…,Yn, utilizando nuevamente la distribución uniforme con valor mínimo de 0 y valor máximo de 1
Cada punto (Xi,Yi) se encuentra dentro del círculo si su distancia desde el centro (0.5,0.5) 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
¿Cuántos de los puntos están dentro del círculo? ¿Cuál es su estimación de π?
n = 1000
x_coord = runif(n, min = 0, max = 1) #Crear coordenadas para x
y_coord = runif(n, min = 0, max = 1) #Crear coordenadas para y
dist_al_centro = (x_coord - 0.5)^2 + (y_coord - 0.5)^2 #Calcular distancia al centro
coordenada_valida = dist_al_centro < 0.25 #Definir coordenadas validas (dentro del circulo)
puntos_validos = sum(coordenada_valida)
puntos_validos
## [1] 785
estimacion_pi_4 = puntos_validos/n
cat("La estimacion de π es: ", estimacion_pi_4*4,"\n")
## La estimacion de π es: 3.14
estimador_pi = function(f_n){
f_x_coord = runif(f_n, min = 0, max = 1)
f_y_coord = runif(f_n, min = 0, max = 1)
f_dist_al_centro = (f_x_coord - 0.5)^2 + (f_y_coord - 0.5)^2
f_coordenada_valida = f_dist_al_centro < 0.25
f_puntos_validos = sum(f_coordenada_valida)
f_estimacion_pi_4 = f_puntos_validos/f_n
return(f_estimacion_pi_4)
}
n1 = 10000
n10000 = estimador_pi(n1)
cat("La estimacion de π para n ", n1, " es: ", n10000*4,"\n")
## La estimacion de π para n 10000 es: 3.1324
n2 = 100000
n100000 = estimador_pi(n2)
cat("La estimacion de π para n ", n2, " es: ", n100000*4,"\n")
## La estimacion de π para n 1e+05 es: 3.13912