# Exercice 1 # 1) # dgeom(n,p) renvoie la valeur de P(X=n) lorsque X suit une loi géométrique de paramètre p. # rgeom(n,p) renvoie un vecteur de taille n dont chaque coefficient est tiré au sort selon la loi géométrique de paramètre p. # 2) P(X=n)=p(1-p)^n (définition de R) ou P(X=n)=p(1-p)^(n-1) (définition du cours): on accepte les deux pour la correction. LoiGeom = function(n,p) { (1-p)^n*p } LoiGeom = function(n,p) { (1-p)^(n-1)*p } # ou encore si on veut faire bien LoiGeom = function(n,p) { if(floor(n)==n & n>=0) (1-p)^n*p else 0 } # 3) # Si X suit une loi géométrique de paramètre p, alors X correspond au nombre d'échecs avant le premier succès (définition de R) # ou au rang du premier succès (définition du cours). La fonction SimulGeom crée un vecteur de taille n puis pour chaque i # incrémente le coefficient i tant qu'il y a échec (runif(1)>=p). A la sortie de la boucle le coefficient X[i] contient donc # bien le nombre d'échecs avant le premier succès pour une série d'expériences. SimulGeom <- function(n,p) { X = rep(1,n); for(i in 1:n) while(runif(1)>p) X[i] = X[i] + 1; return(X); } # 4) Si on lance SimulGeom(1,0) la condition de la boucle while est toujours vérifiée (runif(1)>=0) donc la fonction boucle à l'infini. # Exercice 2 # 1) N=(S+7)/2 où S est la somme des X_i # 2) Pachinko1 = function() { S = 0; for(i in 1:5) S = S + sample(c(-1,1),1); (S+7)/2 } # 3) Pachinko2 = function() { X = sample(c(-1,1),5,rep=TRUE); (sum(X)+7)/2; } # 4) Pachinko3 = function() { S = 0; for(i in 1:5) { S = S + sample(c(-1,1),1); if(i==3 & S==-1) return(7) } (S+7)/2 } # Exercice 3 # 1) MethRejet = function() { repeat { x = runif(1); y = runif(1,0,2); if(y<6*x*(1-x)) break; } x } # 2) # Plus la borne est petite, plus la zone de rejet est réduite: à chaque tirage de y la probabilité que y>f(x) est plus faible. # Donc la boucle de l'algorithme se terminera plus tôt, et donc la simulation sera plus rapide. # La valeur optimale est max(f)=f(1/2)=3/2