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

Se sugiere como estimar el valor de π con una simulación. En un circulo 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 éste, 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).

 # Generación de puntos aleatorios
 n=1000
 x <- runif(n)
 y <- runif(n)

Genere 1000 coordenadas y : Y1,…,Yn, utilizando nuevamente la distribución uniforme con valor mínimo de 0 y valor máximo de 1.

Se utilizarán n=1.000, n=10.000, n=100.000

 n1 = 1000
 n2 = 10000
 n3 = 100000

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 .

# Función para calcular la distancia desde el centro (0.5, 0.5)
 d = function(a){
     (a[1]-0.5)^2 + (a[2]-0.5)^2
 }

n=1000

# Número de puntos
 n = 1000
 # Generación de puntos aleatorios
 x <- runif(n)
 y <- runif(n)
 
 # Función para calcular la distancia desde el centro (0.5, 0.5)
 d = function(a){
     (a[1]-0.5)^2 + (a[2]-0.5)^2
 }
 # Crear un dataframe con las coordenadas
 xy = data.frame(x, y)

 # Calcular distancias
 dist <- apply(xy, 1, d)
 # Identificar puntos dentro del círculo
 cont <- as.numeric(dist <= 0.25)   

Puntos dentro

 puntos_dentro <- sum(cont)
 print(puntos_dentro)
## [1] 752

Estimación de pi

 pi_estimate <- 4 * (sum(cont) / n)
 print(pi_estimate)
## [1] 3.008

n=10000

# Número de puntos
 n = 10000
 # Generación de puntos aleatorios
 x <- runif(n)
 y <- runif(n)
 
 # Función para calcular la distancia desde el centro (0.5, 0.5)
 d = function(a){
     (a[1]-0.5)^2 + (a[2]-0.5)^2
 }
 # Crear un dataframe con las coordenadas
 xy = data.frame(x, y)

 # Calcular distancias
 dist <- apply(xy, 1, d)
 # Identificar puntos dentro del círculo
 cont <- as.numeric(dist <= 0.25)   

Puntos dentro

 puntos_dentro <- sum(cont)
 print(puntos_dentro)
## [1] 7882

Estimación de pi

 pi_estimate <- 4 * (sum(cont) / n)
 print(pi_estimate)
## [1] 3.1528

n=100000

# Número de puntos
 n = 100000
 # Generación de puntos aleatorios
 x <- runif(n)
 y <- runif(n)
 
 # Función para calcular la distancia desde el centro (0.5, 0.5)
 d = function(a){
     (a[1]-0.5)^2 + (a[2]-0.5)^2
 }
 # Crear un dataframe con las coordenadas
 xy = data.frame(x, y)

 # Calcular distancias
 dist <- apply(xy, 1, d)
 # Identificar puntos dentro del círculo
 cont <- as.numeric(dist <= 0.25)   

Puntos dentro

 puntos_dentro <- sum(cont)
 print(puntos_dentro)
## [1] 78596

Estimación de pi

 pi_estimate <- 4 * (sum(cont) / n)
 print(pi_estimate)
## [1] 3.14384