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