Problema 1
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 π.
1 - Genere n coordenadas 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).
#x <- 1000 # Se asignan las cantidades a x
#cordenadax <- runif(x, min=0, max=1) # x cantidades de numero entre en 0 y 1
2 - 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 <- 1000 # Se asignan 1000 cantidades a y
#cordenaday <- runif(y, min=0, max=1)# y cantidades de numero entre en 0 y 1
3 - 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.
#cordenadas = data.frame(cordenadax,cordenaday) # Se crea la tabla con los datos de las cordenas de x y y
#funcion <- (cordenadas$cordenadax-0.5)^2+(cordenadas$cordenaday-0.5)^2 # se realiza el calculo del valor para todas las cordenadas
#dentro <- which(funcion<=0.25) # Se identificas que coordenas estan dentro del circulo
4 - ¿Cuántos de los puntos están dentro del círculo? ¿Cuál es su estimación de π?
Para dar respuesta a esta pregunta y relacionando con la pregunta 1 se fue necesario realizar la funcion X, la cual debe de ser un dato n y puede cambiar en cualquier momento, para el ejercicio utilizamos un n de (1000,10000,100000).
Para resumir recursos de maquina se agrupa todo el codigo en la funcion llamada X la cual se le asignan las cantidades de coordenadas en X
y <- 1000
rad <- 0.5 # Valor del radio
xcenter <- 0.5 # Coordenada en x del centro
ycenter <- 0.5 # Coordenada en y del centro
x <- function(x){
# a - Generacion de n cordenadas en x
cordenadax <- runif(x, min=0, max=1)
cordenadax
# b - Generacion de 1.000 cordenadas en y
cordenaday <- runif(y, min=0, max=1)
cordenaday
cordenadas = data.frame(cordenadax,cordenaday)
funcion <- (cordenadas$cordenadax-0.5)^2+(cordenadas$cordenaday-0.5)^2
funcion
dentro <- which(funcion<=0.25)
dentro
dentro
print(paste("Dentro del circulo se encuentran",length(funcion[funcion<0.25]),"puntos"))
print(paste("Fuera del circulo se encuentran",length(funcion[funcion>0.25]),"puntos"))
print(paste("Valor estimado de Pi/4 es :",length(funcion[funcion<0.25])/x," Valor estimado de pi:",(length(funcion[funcion<0.25])/x)*4))
for (i in 1:y){
#plot(cordenadas$cordenadax[1:i],cordenadas$cordenaday[1:i],xlim=c(0,1),ylim=c(0,1))
}
plot(cordenadas$cordenadax[1:i],cordenadas$cordenaday[1:i],xlim=c(0,1),ylim=c(0,1))
theta <- seq(0, 2 * pi, length = 200)
polygon(x=rad * cos(theta) + xcenter,
y=rad * sin(theta) + ycenter,
lwd=3, border='steelblue4')
}
# Cantidad de coordenadas en X
x(1000)
## [1] "Dentro del circulo se encuentran 761 puntos"
## [1] "Fuera del circulo se encuentran 239 puntos"
## [1] "Valor estimado de Pi/4 es : 0.761 Valor estimado de pi: 3.044"
x(10000)
## [1] "Dentro del circulo se encuentran 7829 puntos"
## [1] "Fuera del circulo se encuentran 2171 puntos"
## [1] "Valor estimado de Pi/4 es : 0.7829 Valor estimado de pi: 3.1316"
x(100000)
## [1] "Dentro del circulo se encuentran 78315 puntos"
## [1] "Fuera del circulo se encuentran 21685 puntos"
## [1] "Valor estimado de Pi/4 es : 0.78315 Valor estimado de pi: 3.1326"