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.
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ú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 <- sum(cont)
print(puntos_dentro)
## [1] 752
pi_estimate <- 4 * (sum(cont) / n)
print(pi_estimate)
## [1] 3.008
# 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 <- sum(cont)
print(puntos_dentro)
## [1] 7882
pi_estimate <- 4 * (sum(cont) / n)
print(pi_estimate)
## [1] 3.1528
# 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 <- sum(cont)
print(puntos_dentro)
## [1] 78596
pi_estimate <- 4 * (sum(cont) / n)
print(pi_estimate)
## [1] 3.14384