Problema 1

La siguiente figura sugiere como estimar el valor de π con una simulación. En la figura, un círcuito 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 π.

Imagen problema 1

Pasos sugeridos:

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 π?

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

para la estimaciòn de \(\pi\) se utilizan las funciones:

  • runif(): genera números aleatorios con distribución uniforme
  • as.numeric() : genera 1 cuando se cumple una condición, de lo contrario asigna 0.

Este problema lo desarrollamos así:

  1. Generamos puntos aleatorios “n”, primero 100, luego 1000 y luego 10.000 (intentamos con 100.000 pero no fue posible) en un espacio bidimensional con cordenadas “x” y “y” uniformemente distribuidas entre cero y uno.
  2. Calculamos la distancia de cada punto desde el centro del círculo (euclidiana), que se encuentra en (0.5, 0.5). El radio de este es de 0.5, por lo que ocupa un cuarto del área del cuadrado.
  3. Creamos un vector “u” para determinar si los puntos estaban adentro del círculo: cero si estaban afuera y uno si la distancia era menor o igual a 0.25.
  4. Se definió que p1 representaría la proporción de puntos dentro del círculo. Teniendo en cuenta que el área del círculo es pir^2 y el área del cuadrado 1^2, la proporción de puntos dentro del círculo sería pi/4. Entonces, multiplicamos dicha proporción por cuatro para obtener la estimación de pi, es decir, “epi”.
  5. Para finalizar, calculamos el error entre los valores estimados de pi y el valor real de este en la variable “error”.
  6. Para visualizar los resultados, generamos los gráficos que muestran los puntos aleatorios, de color verde los que se encuentran afuera y de color azul los que se encontraban adentro y con un círculo rojo mostramos la región de estimación.



n <- 100
x <- runif(n)
y <- runif(n)
d <- (x-0.5)^2 + (y-0.5)^2
u <- as.numeric(d <= 0.25)
p1 <- sum(u)/n
epi <- (sum(u)/n) * 4
error <- pi - epi

#Imprimir resultados
cat("proporción de puntos dentro del circulo :", p1, "\n")
proporción de puntos dentro del circulo : 0.79 
cat("Estimación de pi                        :", epi, "\n")
Estimación de pi                        : 3.16 
cat("Error de estimación                     :", error)
Error de estimación                     : -0.01840735
#Graficar los resultados
plot(x, y, col = ifelse(u == 1, "blue", "green"),
     pch = 19,
     xlab = "X",
     ylab = "Y",
     main = "Simulación para estimación de pi")

#Agregar el círculo
theta <- seq(0, 2 * pi, length.out = 100)
circle_x <- 0.5 + 0.5 * cos(theta)
circle_y <- 0.5 + 0.5 * sin(theta)
lines(circle_x, circle_y, col = "red", lwd = 2)

n <- 1000
x <- runif(n)
y <- runif(n)
d <- (x-0.5)^2 + (y-0.5)^2
u <- as.numeric(d <= 0.25)
p1 <- sum(u)/n
epi <- (sum(u)/n) * 4
error <- pi - epi

#Imprimir resultados
cat("proporción de puntos dentro del circulo :", p1, "\n")
proporción de puntos dentro del circulo : 0.774 
cat("Estimación de pi                        :", epi, "\n")
Estimación de pi                        : 3.096 
cat("Error de estimación                     :", error)
Error de estimación                     : 0.04559265
#Graficar los resultados
plot(x, y, col = ifelse(u == 1, "blue", "green"),
     pch = 19,
     xlab = "X",
     ylab = "Y",
     main = "Simulación para estimación de pi")

#Agregar el círculo
theta <- seq(0, 2 * pi, length.out = 100)
circle_x <- 0.5 + 0.5 * cos(theta)
circle_y <- 0.5 + 0.5 * sin(theta)
lines(circle_x, circle_y, col = "red", lwd = 2)

n <- 10000
x <- runif(n)
y <- runif(n)
d <- (x-0.5)^2 + (y-0.5)^2
u <- as.numeric(d <= 0.25)
p1 <- sum(u)/n
epi <- (sum(u)/n) * 4
error <- pi - epi

#Imprimir resultados
cat("proporción de puntos dentro del circulo :", p1, "\n")
proporción de puntos dentro del circulo : 0.7855 
cat("Estimación de pi                        :", epi, "\n")
Estimación de pi                        : 3.142 
cat("Error de estimación                     :", error)
Error de estimación                     : -0.0004073464
#Graficar los resultados
plot(x, y, col = ifelse(u == 1, "blue", "green"),
     pch = 19,
     xlab = "X",
     ylab = "Y",
     main = "Simulación para estimación de pi")

#Agregar el círculo
theta <- seq(0, 2 * pi, length.out = 100)
circle_x <- 0.5 + 0.5 * cos(theta)
circle_y <- 0.5 + 0.5 * sin(theta)
lines(circle_x, circle_y, col = "red", lwd = 2)



CONCLUSIONES - El error de estimación disminuye cuando se incrementa el número de puntos generados. - El valor estimado de pi “epi”, obedece a la cantidad de puntos generados, con cien, la estimación tiene un determinado error pero a medida que aumenta el número de puntos “n”, la estimación se acerca más al valor real de pi.