Unidad 2 - Problema No. 1 Estimación del valor de π

Milena Andrea Riaño Sepulveda

2023-08-22

Estimación del valor de π

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

Ejemplo para un n= 1000

A. Genere n coordenadas x: X1, . . . , X n. 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).

n=1000
X=runif(n, min=0, max=1) 

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

Y=runif(n, min=0, max=1) 

C. 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.

Circ=((X-0.5)^2)+((Y-0.5)^2)< 0.25

D.I. ¿Cuántos de los puntos están dentro del círculo?

P_circulo=(sum(Circ))
print(paste("Puntos dentro del circulo:",P_circulo))
## [1] "Puntos dentro del circulo: 807"
  1. Cuál es su estimación de π?
pi = 4 * (P_circulo/1000)
print(paste("Estimacion de pi:",pi))
## [1] "Estimacion de pi: 3.228"

Grafica 1

r = 0.5 
x_ = runif(n, -r+0.5, r+0.5)
y_1 = sqrt(r^2-(x_-0.5)^2)+0.5
y_2 = -sqrt(r^2-(x_-0.5)^2)+0.5

plot(X, Y, cex = 0.3, pch = 10)
points(mean(X), mean(Y), cex = 1, col = 'blue',pch = 10)
points(x_, y_1, cex = 0.2, col = 'purple', pch = 10)
points(x_, y_2, cex = 0.2, col = 'purple', pch = 10)

Ejemplo para un n= 10000

A. Genere n coordenadas x: X1, . . . , X n. 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).

n1=10000
X1=runif(n1, min=0, max=1) 

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

Y1=runif(n1, min=0, max=1) 

C. 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.

Circ1=((X1-0.5)^2)+((Y1-0.5)^2)< 0.25

D.I. ¿Cuántos de los puntos están dentro del círculo?

P_circulo1=(sum(Circ1))
print( paste("Puntos dentro del circulo:",P_circulo1))
## [1] "Puntos dentro del circulo: 7919"
  1. Cuál es su estimación de π?
pi1= 4 * (P_circulo1/10000)
print(paste("Estimacion pi1 :",pi1))
## [1] "Estimacion pi1 : 3.1676"

Grafica 2

r1 = 0.5 
x_1 = runif(n1, -r1+0.5, r+0.5)
y_1_1 = sqrt(r1^2-(x_1-0.5)^2)+0.5
y_2_1 = -sqrt(r1^2-(x_1-0.5)^2)+0.5

plot(X1, Y1, cex = 0.3, pch = 10)
points(mean(X1), mean(Y1), cex = 1, col = 'blue',pch = 10)
points(x_1, y_1_1, cex = 0.2, col = 'green', pch = 10)
points(x_1, y_2_1, cex = 0.2, col = 'green', pch = 10)

Ejemplo para un n= 100000

A. Genere n coordenadas x: X1, . . . , X n. 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).

n2=100000
X2=runif(n2, min=0, max=1) 

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

Y2=runif(n2, min=0, max=1) 

C. 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.

Circ2=((X2-0.5)^2)+((Y2-0.5)^2)< 0.25

D.I. ¿Cuántos de los puntos están dentro del círculo?

P_circulo2=(sum(Circ2))
print(paste("Puntos dentro del circulo:" ,P_circulo2))
## [1] "Puntos dentro del circulo: 78639"
  1. Cuál es su estimación de π?
pi2= 4 * (P_circulo2/100000)
print(paste("estimacion de pi:",pi2))
## [1] "estimacion de pi: 3.14556"

Grafica 3

r2 = 0.5 
x_2 = runif(n2, -r+0.5, r+0.5)
y_1_2 = sqrt(r2^2-(x_2-0.5)^2)+0.5
y_2_2 = -sqrt(r2^2-(x_2-0.5)^2)+0.5

plot(X2, Y2, cex = 0.3, pch = 10)
points(mean(X2), mean(Y2), cex = 1, col = 'blue',pch = 10)
points(x_2, y_1_2, cex = 0.2, col = 'brown', pch = 10)
points(x_2, y_2_2, cex = 0.2, col = 'brown', pch = 10)

Conclusión

Cuando se tiene un n mas grande se tiene mayor probabilidad de dar como resultado una estimación muy cercana al valor verdadero de π.