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 π .
#seteamos la cantidad de coordenadas
coordenadas = 100000
#primero creamos las coordenadas en X
CoordenadasX= runif(coordenadas,min=0,max=1) # generamos coordenadas X entre 0 y 1
CoordenadasY= runif(coordenadas,min=0,max=1) # generamos coordenadas y entre 0 y 1
#creamos un dataframe con las dos coodenadas
dataframe = data.frame(corX=CoordenadasX,corY=CoordenadasY)
Muestra = dataframe[1:10, 1:2]
Muestra
## corX corY
## 1 0.3183808650 0.91007051
## 2 0.0792412108 0.63595131
## 3 0.4714398207 0.04364484
## 4 0.5837078900 0.15341921
## 5 0.3118840619 0.00465588
## 6 0.6839641216 0.59576309
## 7 0.2976962207 0.19481904
## 8 0.0006773365 0.68614743
## 9 0.5625010270 0.99693421
## 10 0.7892843394 0.97692760
#graficamos los puntos de dispercion
plot(dataframe, pch = 19, col = "black")
points(mean(dataframe$corX), mean(dataframe$corY), cex = 2, col = 'red', pch = 16)
#procederemos a carlucalr la distancia del centro con una funcion
Calculo_diferencia <- function(dataframe){
diferencia =(dataframe$corX-0.5)^2+(dataframe$corY-0.5)^2
#devolvemos la variable
return(diferencia)
}
ConteoDentro=0
ConteoFuera=0
TotalCoordenadas=0
#llamamos a la funcion y le pasamos las coordenadas
Resultado=Calculo_diferencia(dataframe)
for (i in 1:coordenadas){
#realizamos conteo de cuantos estan dentro del circulo
if(Resultado[i]<=0.25)
{
ConteoDentro=ConteoDentro+1
}else{
ConteoFuera=ConteoFuera+1
}
TotalCoordenadas=TotalCoordenadas+1
}
## [1] "Los registros dentro de la circunferencia son 78348"
## [1] "Los registros fuera de la circunferencia son 21652"
#buscamos el porcentraje de adentro
porcentajeD = (ConteoDentro*100)/TotalCoordenadas
paste("porcentaje dentro de la circunferencia son",porcentajeD)
## [1] "porcentaje dentro de la circunferencia son 78.348"
#calcular el area del cirulo
area = (1*porcentajeD)/100
area
## [1] 0.78348
# realizamos estimacion del PI
PI= area/(0.5^2)
paste("la estimacion de PI para un caso de ",TotalCoordenadas,"es de: ",PI)
## [1] "la estimacion de PI para un caso de 1e+05 es de: 3.13392"
Como resultados finales del proceso se obtuvieron los siguientes puntos:
## [1] "Los registros dentro de la circunferencia son 78348"
## [1] "Los registros fuera de la circunferencia son 21652"
## [1] "la estimacion de PI para un caso de 1e+05 es de: 3.13392"
Teniendo en cuenta todo el proceso llevado a cabo en la solución del
problema podemos llegar a las siguientes conclusiones:
•
Para el caso de la simulación del valor PI, se evidencia que entre mayor
sea la cantidad de coordenadas creadas será mas cercano el valor de PI
• La simulación permite llegar aun valor cercano mas no
exacto de PI y este puede varias de iteración a iteración debido a que
las coordenadas se crean aleatoriamente
• Se considera que
la simulación fue un éxito y se llegó a un valor muy cercano de PI