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).
## [1] 0.1250339 0.7472528 0.2637373 0.5134308 0.6597293 0.5475768
Genere 1000 coordenadas y: Y1,…,Yn, utilizando nuevamente la distribución uniforme con valor mínimo de 0 y valor máximo de 1.
## [1] 0.827579401 0.859766356 0.002189903 0.118105086 0.658325599 0.300624992
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.
valor_x_y <- numeric() # Variable para almacenar la distancia
posicion_x_y <- numeric() # Variable de posición: 1 = adentro, 0 = afuera
for(i in 1:length(x)){ # Recorre los datos de x
valor <- (x[i]-0.5)^2 + (y[i]-0.5)^2 # Calcula la distancia
valor_x_y[i] <- valor # Asigna el valor de la distancia
if(valor < 0.25){ # Si la distancia es menor que 0.25, el punto está adentro
posicion_x_y[i] <- 1 #adentro
} else {
posicion_x_y[i] <- 0 #afuera
}
}
head(valor_x_y)## [1] 0.24790786 0.19056579 0.30363496 0.14602411 0.05058043 0.04201395
## [1] 1 1 0 1 1 1
¿Cuántos de los puntos están dentro del círculo? ¿Cuál es su estimación de π?
Se inicia graficando los puntos, en la grafica.
# Definir el radio del círculo
radio <- 0.5
# Crear datos para dibujar el círculo
theta <- seq(0, 2*pi, length.out = 100)
x_circle <- 0.5 + radio * cos(theta)
y_circle <- 0.5 + radio * sin(theta)
# Graficar los puntos y el círculo
plot(0, 0, asp = 1, type = "n",
xlim = c(0, 1), ylim = c(0, 1),
xlab = "", ylab = "", main = "Puntos junto al círculo inscrito")
lines(x_circle, y_circle, col = "black")
points(x,y,pch = 20, col="red")Se continua contabilizando el total de puntos que estan dentro del círculo
## [1] 786
Estimación de π con 1000
## [1] 3.144
Estimación de π para n puntos
calcular_pi <- function(num_puntos) {
# Generar puntos aleatorios dentro del cuadrado
x <- runif(num_puntos, 0, 1)
y <- runif(num_puntos, 0, 1)
# Variable para almacenar la distancia
valor_x_y <- numeric(num_puntos)
# Variable de posición: 1 = adentro, 0 = afuera
posicion_x_y <- numeric(num_puntos)
for(i in 1:num_puntos) { # Recorre los datos de x
# Calcula la distancia
valor <- (x[i]-0.5)^2 + (y[i]-0.5)^2
# Asigna el valor de la distancia
valor_x_y[i] <- valor
# Si la distancia es menor que 0.25, el punto está adentro
if(valor < 0.25) {
posicion_x_y[i] <- 1 #adentro
} else {
posicion_x_y[i] <- 0 #afuera
}
}
# Contar cuántos puntos están dentro del círculo
dentro <- sum(posicion_x_y)
# Calcular pi
pi_estimado <- 4 * dentro / num_puntos
cat("VALOR DE π PARA", num_puntos, "PUNTOS:", pi_estimado, "\n")
return(pi_estimado)
}
valor_pi <- calcular_pi(100)## VALOR DE π PARA 100 PUNTOS: 3.36
## VALOR DE π PARA 1000 PUNTOS: 3.172
## VALOR DE π PARA 10000 PUNTOS: 3.1168
## VALOR DE π PARA 1e+05 PUNTOS: 3.14948
## VALOR DE π PARA 1e+06 PUNTOS: 3.140788
La simulación propuesta demuestra cómo el valor de π puede ser estimado mediante el uso de puntos aleatorios generados dentro de un cuadrado y determinando cuántos de estos puntos caen dentro de un círculo inscrito. Esta metodología proporciona una forma práctica y eficiente de calcular una aproximación de π, mostrando cómo el número de puntos utilizados en la simulación afecta la precisión de la estimación. Cuantos más puntos se utilicen, mayor será la precisión de la estimación, lo que ilustra la versatilidad y la escalabilidad de este método computacional para obtener valores cercanos a π.