Problema 1
Se generan 1000 coordenadas en el eje X haciendo uso de la distribución uniforme dentro del intervalo [0,1]
x = runif(1000,0,1)
De igual manera se generan las coordenadas en el eje Y.
y = runif(1000,0,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.
# creamos un vector para almacenar las distancias
distancias <- numeric()
# Ciclo for para determinar las distancias
for (i in 1: length(x)) {
distancias[i] = (x[i]-0.5)^2 + (y[i]-0.5)^2
}
# Se guardan los puntos
puntos = ifelse(distancias<0.25, 1,0)
#graficamos los puntos
secuencia <- seq(0, 2*pi, length.out = 100)
plot(0, 0, asp = 1, type = "n",
xlim = c(0, 1), ylim = c(0, 1),
ann = F)
abline(v = seq(0, 1, 0.1), lty = 2, col = "gray50")
abline(h = seq(0, 1, 0.1), lty = 2, col = "gray50")
radio <- 1/2
a <- 0.5 ## origen en x
b <- 0.5 ## origen en y
xx <- a + cos(secuencia)*radio
yy <- b + sin(secuencia)*radio
points(xx, yy, type = "l", col = "blue")
points(x,y,pch = 20)
Ahora procedemos a determinar la cantidad de puntos que se encuentran dentro de la circunferencia.
dentro <- sum(puntos)
para estimar pi se calcula la proporción de puntos dentro del circulo entre el total de puntos para posyteriormente multiplicar por 4
dentro/length(x)*4
## [1] 3.076
Podemos observar que con las 1000 coordenadas el valor de pi es muy lejano, por lo que repetiremos el proceso con 10000 coordenadas.
x1 = runif(10000,0,1)
y1 = runif(10000,0,1)
# creamos un vector para almacenar las distancias
distancias1 <- numeric()
# Ciclo for para determinar las distancias
for (i in 1: length(x1)) {
distancias1[i] = (x1[i]-0.5)^2 + (y1[i]-0.5)^2
}
# Se guardan los puntos
puntos1 = ifelse(distancias1<0.25, 1,0)
#graficamos los puntos
secuencia1 <- seq(0, 2*pi, length.out = 100)
plot(0, 0, asp = 1, type = "n",
xlim = c(0, 1), ylim = c(0, 1),
ann = F)
abline(v = seq(0, 1, 0.1), lty = 2, col = "gray50")
abline(h = seq(0, 1, 0.1), lty = 2, col = "gray50")
radio1 <- 1/2
a1 <- 0.5 ## origen en x
b1 <- 0.5 ## origen en y
xx1 <- a1 + cos(secuencia1)*radio1
yy1 <- b1 + sin(secuencia1)*radio1
points(xx1, yy1, type = "l", col = "blue")
points(x1,y1,pch = 20)
dentro1 <- sum(puntos1)
dentro1
## [1] 7816
dentro1/length(x1)*4
## [1] 3.1264
AquĆ observamos un valor mucho mas cercano al valor real de pi