Ejercicio 1 Estimación del valor de π

La siguiente figura sugiere como estimar el valor de π con una simulación. En la figura 1, 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 debe encontrar una aproximación para el valor de π .

Figura 1
Figura 1

Pasos a seguir:

  1. Genere n coordenadas para 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).
coord = 1000
coordx=runif(coord, min=0, max=1) # coordenadas eje X
  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.
coordy=runif(coord, min=0, max=1) # coordenadas eje y
  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.
data = data.frame(CX=coordx,CY=coordy) # se genera dataframe con coordenadas xy

#se genera funcion para calcular la diferencia
Calculo_diferencia <- function(data) {
  diferencia =(data$CX-0.5)^2+(data$CY-0.5)^2
     return(diferencia) }  

ContarDentro=0
ContarFuera=0
TotalCoord=0

Resultado=Calculo_diferencia(data)

#ciclo para contar puntos dentro o fuera del círculo

for (i in 1:coord){
    if(Resultado[i]<=0.25)
   {ContarDentro=ContarDentro+1} else {ContarFuera=ContarFuera+1}
   TotalCoord=TotalCoord+1 }
  1. ¿Cuántos de los puntos están dentro del círculo?

El total de puntos dentro del círculo con 1.000 coordenadas para xy es de:

## [1] 784
  1. ¿Cuál es su estimación de π? La estimación de Pi para 1000 coordenadas es de:
#calculo del area de puntos dentro del círculo

porcentajepuntosD = (ContarDentro*100)/TotalCoord
area = (1*porcentajepuntosD)/100
Pi1= area/(0.5^2)
Pi1
## [1] 3.136

Simulación con 10.000 Puntos

A continuación se presentan resultados con simulación de 10.000 Puntos:

coord = 10000
coordx=runif(coord, min=0, max=1) # coordenadas eje X
coordy=runif(coord, min=0, max=1) # coordenadas eje y
data = data.frame(CX=coordx,CY=coordy) # se genera dataframe con coordenadas xy
Calculo_diferencia <- function(data) {
  diferencia =(data$CX-0.5)^2+(data$CY-0.5)^2
     return(diferencia) }  
ContarDentro=0
ContarFuera=0
TotalCoord=0

Resultado=Calculo_diferencia(data)

#ciclo para contar puntos dentro o fuera del círculo

for (i in 1:coord){
    if(Resultado[i]<=0.25)
   {ContarDentro=ContarDentro+1} else {ContarFuera=ContarFuera+1}
   TotalCoord=TotalCoord+1 }

El total de puntos dentro del círculo con 10.000 coordenadas para xy es de:

## [1] 7835

La estimación de Pi para 10.000 coordenadas es de:

## [1] 3.134

Simulación con 100.000 Puntos

A continuación se presentan resultados con simulación de 100.000 Puntos:

coord = 100000
coordx=runif(coord, min=0, max=1) # coordenadas eje X
coordy=runif(coord, min=0, max=1) # coordenadas eje y
data = data.frame(CX=coordx,CY=coordy) # se genera dataframe con coordenadas xy
Calculo_diferencia <- function(data) {
  diferencia =(data$CX-0.5)^2+(data$CY-0.5)^2
     return(diferencia) }  
ContarDentro=0
ContarFuera=0
TotalCoord=0

Resultado=Calculo_diferencia(data)

#ciclo para contar puntos dentro o fuera del círculo

for (i in 1:coord){
    if(Resultado[i]<=0.25)
   {ContarDentro=ContarDentro+1} else {ContarFuera=ContarFuera+1}
   TotalCoord=TotalCoord+1 }

El total de puntos dentro del círculo con 100.000 coordenadas para xy es de:

## [1] 78688

La estimación de Pi para 100.000 coordenadas es de:

## [1] 3.14752

CONCLUSION

Se evidencia que al aumentar las simulaciones se aproxima más al valor de Pi.

x <- c(1, 2, 3) 
y <- c(Pi1, Pi2, Pi3)
plot(x, y, type = "b",  main ="Variacion de Pi acorde con simulaciones", xlab = "aumento de n", xaxt = "n", ylab= "valor de Pi")
etiquetas <- c("Pi1", "Pi2", "Pi3")
text(x = x, y = y, etiquetas, col = "red")