# simulation d'une v.a. normale a l'aide de la methode de rejet: rejnorm <- function(N){ # on va commencer par simuler les 3 vecteurs: # X pour la valeur absolu et S pour la signe, # donc X*S suive la loi de densite 1/2*exp(-|x|) # U des v.a. uniformes X <- rexp(N) S <- sign(runif(N,-1,1)) U <- runif(N) # la condition d'acceptation ne depends pas de signe: cond <- (U < exp(-X*X/2+X-1/2)) # apres on va appliquer la signe et garder uniquement # des valeurs de X pour lesquelles la condition # d'acceptation est verifiee Z <- (X*S)[cond] return(Z) } # une petite demonstration --- cette fonction trace une histogramme # des v.a.'s simulees, superposee avec une graphe de la densite gaussienne demo.rejnorm <- function(N=5000){ x <- rejnorm(N) hist(x, br=50, freq=FALSE) curve(dnorm, -4, 4, col='red', add=TRUE) } # une variation de 'rejnorm': rejnorm2 <- function(N) { x <- rejnorm(N) # on va estimer la probabilite d'acceptation: p <- length(x)/N # et rajouter encore quelques valeurs N1 <- as.integer(N*(1-p)/p) x<-c(x, rejnorm(N1)) return(x) }