ESERCIZIO 6

Algoritmo di Box-Muller.

box.muller <- function(n=10^5){
  u1 <- runif(n)
  u2 <- runif(n)
  theta <- 2*pi*u1
  R <- sqrt(-2*log(u2))
  x <- R*cos(theta)
  y <- R*sin(theta)
  risultati <- list(x=x,y=y)
  return(risultati)}
d <- box.muller()
par(mfrow=c(1,1))
plot(d$x,d$y)
abline(h=c(qnorm(0.025),qnorm(0.975)),col="red")
abline(v=c(qnorm(0.025),qnorm(0.975)),col="red")

par(mfrow=c(1,2))
hist(d$x,freq=F,nclass=100)
curve(dnorm(x),col="red",add=T)
hist(d$y,freq=F,nclass=100)
curve(dnorm(x),col="red",add=T)

L’algoritmo è efficiente.

system.time(box.muller())
##    user  system elapsed 
##    0.03    0.00    0.03