Simulación con 1.000 puntos

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 π

Paso 1: Generación de coordenadas con la distribución uniforme con valores de entre 0 y 1

x_1<-  runif(1000,0,1)
y_1<- runif(1000,0,1)

Paso 2: Determinación de los puntos en el plano y la determinación de Pi

funt_distan<-function(x,y){
  
  distance <- numeric()
  
  for( i in 1:length(x)){
    distance[i]<-(x[i]-0.5)^2+(y[i]-0.5)^2
    }
    
  puntos<-ifelse(distance<0.25,1,0)  
  
  return(puntos)
  }

validacion=funt_distan(x_1,y_1)


t <- seq(0, 2*pi, length.out = 100)

Paso 3: La visualización de los puntos es:

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 circunferencia eje x
b <- 0.5 ## origen circunferencia eje y

xx <- a + cos(t)*radio
yy <- b + sin(t)*radio

points(xx, yy, type = "l", col = "blue")
points(x_1,y_1,pch = 20)

Paso 4: El resultado.

sum(validacion)
## [1] 809
## estimación de PI
# se haya el valor del area del circulo para reemplazar por pi
#pi=area/r2
#area = numero de puntos dentro del circulo/ total circulos
area<-sum(validacion)/length(x_1)
#Valor de Pi
pi1<-area*4
pi
## [1] 3.141593
#Estimación del error
ea1<-pi-pi1
ea1
## [1] -0.09440735

Simulación con 10.000 puntos

Procedimiento

x_2<-  runif(10000,0,1)
y_2<- runif(10000,0,1)

validacion2=funt_distan(x_2,y_2)

Visualización

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 circunferencia eje x
b <- 0.5 ## origen circunferencia eje y

xx <- a + cos(t)*radio
yy <- b + sin(t)*radio

points(xx, yy, type = "l", col = "blue")
points(x_2,y_2,pch = 20)

Resultado

sum(validacion2)
## [1] 7890
## estimación de PI
# se haya el valor del area del circulo para reemplazar por pi
#pi=area/r2
#area = numero de puntos dentro del circulo/ total circulos
area<-sum(validacion2)/length(x_2)
#Valor de Pi
pi1<-area*4
pi
## [1] 3.141593
#Estimación del error
ea2<-pi-pi1
ea2
## [1] -0.01440735

Simulación con 100.000 puntos

Procedimiento

x_3<-  runif(100000,0,1)
y_3<- runif(100000,0,1)

validacion3=funt_distan(x_3,y_3)

Visualización

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 circunferencia eje x
b <- 0.5 ## origen circunferencia eje y

xx <- a + cos(t)*radio
yy <- b + sin(t)*radio

points(xx, yy, type = "l", col = "blue")
points(x_3,y_3,pch = 20)

Resultado

sum(validacion3)
## [1] 78553
## estimación de PI
# se haya el valor del area del circulo para reemplazar por pi
#pi=area/r2
#area = numero de puntos dentro del circulo/ total circulos
area<-sum(validacion3)/length(x_3)
#Valor de Pi
pi1<-area*4
pi
## [1] 3.141593
#Estimación del error
ea3<-pi-pi1
ea3
## [1] -0.0005273464

Conclusiones

De acuerdo a la simulación de puntos para tamaños de 1.000, 10.000 y 100.000 puntos se puede evidenciar que el valor simulado de Pi se acerca mas al valor real de Pi. a medidida que se aumentan los puntos el error disminuye lo que explica en la practica, la teoria de los grandes números. A medida que la simulación aumente de puntos el valor cada vez mas se acercará a PI