Académique Documents
Professionnel Documents
Culture Documents
Simulation de variables al
eatoires
R
ef
erences:
[F] Fishman, A first course in Monte Carlo, chap 3.
[B] Bouleau, Probabilites de lingenieur, chap 4.
[R] Rubinstein, Simulation and Monte Carlo Method, chap 3.
Cadre: Scilab poss`ede une fonction rand() dont les appels successifs fournissent une suite de
variables aleatoires independantes et identiquement distribuees, de loi uniforme sur [0, 1]. Nous
ne nous interesserons pas ici `
a la conception dune telle fonction.
Probl`eme: Comment simuler une variable aleatoire ou un vecteur aleatoire suivant une loi
donnee, differente de la loi uniforme sur [0, 1]?
1.1
1.1.1
Ecrire une fonction bernoulli1(p) qui renvoit un tirage selon la loi de Bernoulli de param`etre p.
Ecrire une fonction bernoulli2(k,p) qui renvoit un k-echantillon suivant la loi de Bernoulli
de param`etres p.
1.1.2
n
X
n k
Loi binomiale de param`
etres (n, p):
p (1 p)nk k
k
k=0
Lemme 1.1.1 Si (Xi )1in sont des variables aleatoires independantes et identiquement disPn
tribuees de loi de Bernoulli de param`etre p, alors S =
i=1 Xi suit une loi binomiale de
param`etres (n, p).
Ecrire une fonction binomiale(n,p) qui renvoit un tirage selon la loi binomiale de param`etres
(n, p).
Faire un histogramme dun echantillon de taille 100 de loi binomiale de param`etres (8, 1/3).
histplot, clf
n1
1.1.3
1X
Loi uniforme sur {0, 1, ..., n 1}:
k
n k=0
function x=uniforme1(n)
// tirage suivant la loi uniforme sur {0,...,n-1}
x=floor(n*rand());
D
emonstration: On note X la variable aleatoire rendue par cette fonction. Comme
P(0 rand() < 1) = 1, on a P(0 n*rand() < n) = 1 et
P(floor(n*rand()) [0..n 1]) = 1.
Donc X prend ses valeurs dans [0..n 1].
Maintenant, soit k [0..n 1]:
P(X = k) = P(floor(n*rand()) = k) = P(k n*rand() < k + 1)
k+1
1
k
)= .
= P( rand() <
n
n
n
1.1.4
1
1[a,b] (x)
ba
Lemme 1.1.2 Si U suit la loi uniforme sur [0, 1], alors, si > 0 et R, U + suit la loi
uniforme sur [, + ].
D
emonstration: Soit : R R une fonction continue bornee: en faisant le
changement de variable x = u + , on a
E((U + )) =
(u + )du =
0
1
(x) dx,
1
1[,+] ,
et on
function x=uniforme2(a,b)
// tirage suivant la loi uniforme sur [a,b]
x=a+(b-a)*rand();
1.1.5
Exercice 1: Montrer que si U est de loi uniforme sur [0, 1], alors G(U ) suit la loi exponentielle
de param`etre .
3
function x=exponentielle(a)
// tirage suivant la loi exponentielle de parametre a
x=-log(rand())/a;
Exercice 2: Pourquoi a-t-on remplace 1 U par U dans lalgorithme?
1.1.6
Loi g
eom
etrique de param`
etre p:
+
X
k=1
Methode 1: `
a partir du jeu de pile ou face:
(1 p)k1 pk
Lemme 1.1.3 Si (Xi )iN sont des variables aleatoires iid de Bernoulli de param`etre p, alors
N = min{i : Xi = 1} suit une loi geometrique de param`etre p.
function x=geometrique1(p)
// tirage suivant la loi geometrique de parametre p
x=1;
while rand()>p, x=x+1; end;
Methode 2: `
a partir de la loi exponentielle:
ln U
Lemme 1.1.4 Soit U suit la loi uniforme sur [0, 1], alors 1+E ln(1p)
suit la loi geometrique
de param`etre p.
ln U
D
emonstration: Notons X = 1 + E ln(1p)
. Par definition de la partie enti`ere,
function x=geometrique2(p)
// tirage suivant la loi geometrique de parametre p
x=1+floor(log(rand())/log(1-p));
1.1.7
+
X
exp()
k=0
k
k
k!
Lemme 1.1.5 Soit (Xi )iN sont des variables aleatoires iid exponentielles de param`etre . La
variable aleatoire definie par
i
X
N = 0 si X1 1 et N = max{i 1 :
j=1
Xj 1} sinon,
k
k+1
X
X
= P
Xj 1 <
Xj
j=1
+
Rk+ 1
j=1
k+1 exp((x1 + + xk+1 )1{x1 ++xk 1} 1{xk+1 >1(x1 ++xk )} dx1 . . . dxk+1
Z
Rk+
Rk+
= exp()
Rk+
exp(xk+1 )dxk+1
1(x1 ++xk )
Rk+
dsk
sk
dsk1 . . .
s2
ds1 =
1
,
k!
Soit (Ui )iN des variables aleatoires iid de loi uniforme sur [0, 1], alors si Xi = 1 ln(Ui ),
les (Xi )iN sont des variables aleatoires iid exponentielles de param`etre , et
i
i
i
X
Y
1 Y
Xj 1 ln
Uj 1
Uj exp().
j=1
j=1
j=1
function x=poisson(a)
// tirage suivant la loi de Poisson de parametre a
test=exp(-a);x=0;prod=rand();
while (prod>=test), x=x+1; prod=prod*rand(); end;
5
dx1 . . . dxk
1.1.8
En particulier, on obtient:
Lemme 1.1.8 Soit R une variable aleatoire de loi exponentielle de param`etre 1/2 et une
variable aleatoire de loi uniforme sur [0, 2], supposees de plus independantes. Alors, si on pose
function [x,y]=boxmueller
// tirage de deux N(0,1) independantes
r=sqrt(-2*log(rand())); t=2*%pi*rand();
x=r*cos(t); y=r*sin(t);
Exercice 3: Comment simuler une variable aleatoire gaussienne de moyenne m et de variance 2 ?
1.2
1.2.1
M
ethodes g
en
erales
M
ethode g
en
erale pour une variable al
eatoire discr`
ete
Soit X une variable aleatoire telle que X() = {x0 , x1 , ...} et, pour tout i N, pi = P(X = xi ).
P
On rappelle que pi 0 et iN pi = 1.
function y=simuldiscrete(x,p)
// simule une va de loi discrete,
// x=vecteur des valeurs prises, p=vecteur des probabilites
u=rand(); q=p(0); i=0;
while (u>q); i=i+1; q=q+p(i); end;
y=x(i);
D
emonstration: P(X = x0 ) = P(rand() p0 ) = p0 et pour k 1,
!
k
k1
X
X
pi = pi .
P(Y = xk ) = P
pi < rand()
i=0
i=0
Exercice 4: Ecrire une fonction en Scilab pour simuler suivant ce procede la loi geometrique
et la loi de Poisson.
Remarque: Le nombre N de tests necessaires satisfait N = 1 ssi u p0 , et pour i > 1,
N =i
i1
X
j=0
pi < u
i
X
pi .
j=0
On a donc interet `
a reordonner les (xi )i dans lordre des (pi )i decroissants.
1.2.2
La methode utilisee pour simuler une loi exponentielle est en fait generale: d`es que lon sait
inverser une fonction de repartition F , il est tr`es facile de simuler une variable aleatoire de
fonction de repartition F .
Lemme 1.2.1 Soit U suit la loi uniforme sur [0, 1], et F une fonction de repartition bijective
de ]a, b[ dans ]0, 1[ dinverse F 1 . Alors F 1 (U ) est une variable aleatoire de fonction de
repartition F .
D
emonstration: On pose X = F 1 (U ), elle prend ses valeurs dans ]a, b[. Remarquons que necessairement F est strictement croissante de ]a, b[ dans ]0, 1[. Soit
t ]a, b[:
P(X t) = P(F 1 (U ) t) = P(U F (t)) = F (t).
Donc la fonction de repartition de X est bien F .
1.2.3
B Exemple: Commencons par un exemple tr`es simple: comment simuler une loi uniforme sur
le disque unite {x2 + y 2 1}?
function [x,y]=disque
// simule un point uniformement sur le disque unite
[x,y]=2*rand(1,2)-[1,1];
while (x^2+y^2>1), [x,y]=2*rand(1,2)-[1,1]; end;
Lidee est la suivante: on tire des points uniformement dans le carre, et on les jette jusqu`a
en obtenir un qui tombe dans le disque. La loi du point obtenue est la loi dun point tire
uniformement dans le carre conditionnellement `a etre dans le disque, ce qui est encore la loi
uniforme sur le disque.
Exercice 6: Quel est la loi du nombre N de passages dans la boucle?
Lemme 1.2.2 Soit X une variable aleatoire de densite f (sur Rd ) a
` simuler. On suppose quil
d
existe k > 0 et une densite g (sur R aussi, facile a
` simuler) tels que
x
f (x) kg(x).
Soit U une variable aleatoire de loi uniforme sur [0, 1] et Z une variable aleatoire, independante
de U , de densite g. On pose V = kU g(Z). Alors, la loi de Z conditionnellement a
` levenement
{V < f (Z)} a pour densite f .
Remarque: Notons que necessairement k 1 (car f, g sont des densites).
D
emonstration: On fait la demonstration pour le cas de R. Notons que pour tout
f (z)
1. On a tout dabord
z R, kg(z)
Z
1
0
du1{kug(z)<f (z)}
f (z)
1
dzg(z)
=
kg(z)
k
dzf (z).
On obtient donc lalgorithme de simulation par rejet (on suppose quon poss`ede une fonction
simulg qui simule une variable aleatoire de densite g):
8
function z=simulf
// simule par rejet une va de densite f
u=rand(); z=simulg; v=k*u*g(z);
while (v>=f(z)); u=rand(); z=simulg; v=k*u*g(z); end;
D
emonstration: Notons N le nombre de tests fait lors de cette fonction: cest
une variable aleatoire, `
a valeurs dans N . Notons (Un )n1 la suite des appels `a la
fonction rand(), et (Zn )n1 la suite des appels `a la fonction simulg. Toutes ces
variables aleatoires sont independantes, les premi`eres de loi uniforme sur [0, 1], les
secondes de densite g. On note Vn = kUn g(Zn ), et on note X la sortie de la fonction.
Soit t R.
Z
1 t
P(X t et N = 1) = P(V1 < f (Z1 ) et Z1 t)
dzf (z)
k
par la demonstration precedente. Soit maintenant i 2. Par independance, et
comme precedemment:
P(X t et N = i) = P(V1 f (Z1 ), V2 f (Z2 ), . . . , Vi1 f (Zi1 ), Vi < f (Zi ), Zi t)
= P(V1 f (Z1 ))P(V2 f (Z2 )) . . . P(Vi1 f (Zi1 ))P(Vi < f (Zi ), Zi t)
Z
1 i1 1 t
=
1
dzf (z).
k
k
Finalement (rappelons que k 1):
P(X t) =
=
+
X
P(X t et N = i)
i=1
+
X
i=1
1
1
k
i1
1
k
dzf (z) =
dzf (z),
Exercice 8: Montrer que le nombre de passage dans la boucle suit une loi geometrique dont
le param`etre ne depend que de k. Justifier alors linteret de prendre k la plus petite possible.
9
1.2.4
1.3
1.3.1
Simulation de vecteurs al
eatoires
Cas ind
ependant
10
1.3.2
Vecteur gaussien
Un vecteur gaussien dans Rd est caracterise par un vecteur moyenne m Rd , et une matrice
de covariance K, de taille d d, symetrique et positive. On suppose pour linstant que K est
definie positive.
Th
eor`
eme 1.3.1 (D
ecomposition de Cholesky) Si K est une matrice symetrique definie
positive de taille d d, il existe au moins une matrice reelle triangulaire inferieure L telle que :
K = Lt L.
On peut egalement imposer que les elements diagonaux de la matrice L soient tous strictement
positifs, et la factorisation correspondante est alors unique.
D
emonstration: On proc`ede par recurrence sur la dimension d. Cest clair pour
d = 1. Soit K une matrice symetrique definie positive de taille d d, avec d 2.
On note (e1 , e2 , ..., ed ) la base canonique de Rd . La restriction de la forme bilineaire
symetrique definie par K au sous-espace vectoriel engendre par (e1 , . . . , ed1 ) est
encore definie positive: il existe une matrice Kd1 symetrique definie positive de
taille (d 1) (d 1), un vecteur colonne C de taille (d 1) 1 et un reel positif
a tels que
!
Kd1 C
K=
.
tC
a
Si on cherche L triangulaire inferieure de taille d d sous la forme
!
Ld1 0
L=
tV
b
alors on doit resoudre
Lt L =
Ld1
tV
tL
d1
Ltd1
Ld1 V
tV
V + b2
t V V + b2 = a
(Kd1
C) =
1
tC
a
a t CKd1
C
11
1
1
t
CKd1
C =t C(Ld1 t Ld1 )1 C =t (L1
d1 C)(Ld1 C) = V V,
1
1 1 0
m = 2 et K = 1
5 6 .
4
0
6 10
l11
0
0
L = l21 l22
0 .
l31 l32 l33
2 =k
1. l11
11 = 1 l11 = 1.
Donc
1 0 0
1
Z = 2 + 1 2 0 T,
0 3 1
4
ou T est un vecteur gaussien de R3 dont les trois composantes sont iid centrees reduites.
1.3.3
Cas g
en
eral
1
1xy1 .
1x
14