Vous êtes sur la page 1sur 13

Chapter 1

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

Premiers exemples de lois classiques


Loi de Bernoulli de param`
etre p: p1 + (1 p)0

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

Loi uniforme sur [a, b]: f (x) =

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,

ce qui signifie que X est une variable aleatoire de densite f (x) =


reconnat la densite de la loi uniforme sur [, + ].

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

Loi exponentielle de param`


etre : f (x) = exp(x)1R+ (x)

La fonction de repartition de la loi exponentielle est F (t) = P(X t) = 1 exp(t).


1
ln(1 u).
Cette fonction est une bijection de ]0, +[ dans ]0, 1[, dinverse G(u) =

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,

X prend ses valeurs dans N . Soit maintenant k N :






 


ln U
ln U
P(X = k) = P 1 + E
=k =P E
=k1
ln(1 p)
ln(1 p)


ln U
< k = P (k ln(1 p) < U (k 1) ln(1 p))
= P k1
ln(1 p)


= P (1 p)k < U (1 p)k1 = (1 p)k1 (1 p)k = (1 p)k1 p.


function x=geometrique2(p)
// tirage suivant la loi geometrique de parametre p
x=1+floor(log(rand())/log(1-p));

1.1.7

Loi de Poisson de param`


etre :

+
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,

suit une loi de Poisson de param`etre .


D
emonstration: Soit k N.
P(N = k)

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+

exp((x1 + + xk )1{x1 ++xk 1}

Rk+

k exp((x1 + + xk )1{x1 ++xk 1} exp() exp((x1 + + xk ))dx1 . . . dxk

= exp()

Rk+

exp(xk+1 )dxk+1

1(x1 ++xk )

1{x1 ++xk 1} dx1 . . . dxk .

Pour calculer la derni`ere integrale, on pose s1 = x1 , s2 = x1 + x2 , . . . , sk =


x1 + + xk :
Z
Z
1{s1 s2 sk 1} ds1 . . . dsk
1{x1 ++xk 1} dx1 . . . dxk =
Rk+

Rk+

dsk

sk

dsk1 . . .

ce qui termine la preuve.

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

Loi gaussienne centr


ee r
eduite: M
ethode de Box-Mueller

Rappelons la formule de changement de variable en plusieurs dimensions:


Th
eor`
eme 1.1.6 Soit G un ouvert de Rn , et g : G Rn une application de classe C 1 , injective
et dont le jacobien det(Jg (x)) ne sannule pas sur G.
Soit f une application mesurable de g(G) dans R, integrable sur g(G). Alors
Z
Z
f (g(x))| det(Jg (x))|dx.
f (y)dy =
g(G)

On en deduit la densite dun vecteur image:

Proposition 1.1.7 Soit X un vecteur aleatoire a


` valeur dans Rn de densite fX . Soit g : Rn
Rn une application de classe C 1 , injective et dont le jacobien det(Jg (x)) ne sannule pas. Alors
le vecteur aleatoire Y = g(X) a pour densite:
fY (y) = fX (g1 (y))| det(Jg1 (y))|.
D
emonstration: Soit : Rn R une application mesurable, positive, bornee.
On applique le theor`eme precedent avec g1 :
E((Y )) = E((g(X)))
Z
(g(x))fX (x)dx
=
n
R
Z
=
(y)fX (g1 (y))| det(Jg1 (y))|,
Rn

ce qui prouve le resultat.

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

X = R cos() et Y = R sin(), les variables aleatoires X et Y sont iid de loi gaussienne


centree reduite.

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

Simulation par inversion de la fonction de r


epartition

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 .

Exercice 5: En utilisant la methode de la fonction de repartition, simuler une loi de Cauchy


1
de densite f (t) = 1 1+t
2.
7

1.2.3

Simulation par rejet

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

P(V < f (Z)) = P(kU g(Z) < f (Z)) =


dzg(z)
R
Z
1
f (z)
= .
=
dzg(z)
kg(z)
k
R
Z 1
Z t
du1{kug(z)<f (z)}
dzg(z)
P({Z t} {V < f (Z)}) =
Z

Donc P(Z t|V < f (Z)) =

1
0

du1{kug(z)<f (z)}

f (z)
1
dzg(z)
=
kg(z)
k

dzf (z).

dzf (z), donc la loi conditionnelle de Z sachant

que {V < f (Z)} a bien pour densite f .


Dans Rd , on utilise la generalisation de la fonction de repartition.

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),

donc la densite de X est bien f .

Exercice 7: Simulation de la gaussienne par rejet par rapport `a la double exponentielle.


On pose
1
1
f (z) = exp(z 2 /2) et g(z) = exp(|z|).
2
2
1. Montrer que g est bien une densite sur R.
2. Determiner une constante k satisfaisant
z R, f (z) kg(z). On aura interet `a prendre
q
2e
k la plus petite possible: [k =
= 1, 3155].
3. Ecrire un algorithme de simulation dune loi gaussienne centree reduite par rejet.

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

Simulation par composition

Exercice 9: Soit F et G deux fonctions de repartition sur R. On construit une variable


aleatoire X de la facon suivante: on lance une pi`ece qui tombe sur pile avec probabilite 1/3 et
sur face avec probabilite 2/3, si pile sort, on tire un nombre au hasard suivant la loi donnee par
F , sinon, on tire un nombre au hasard suivant la loi donnee par G. Determiner la fonction de
repartition H de X.
Lexemple precedent est un exemple de melane de variables aleatoires. On suppose mainP
tenant quon veut simuler une variable aleatoire X de fonction de repartition F = ni=1 i Fi ,
P
o`
u les i sont des poids: i 0 et ni=1 i = 1 et les Fi sont des fonctions de repartition dont
les lois sont faciles `
a simuler. On suppose quon a `a notre disposition des fonctions simulFi qui
simulent des variables aleatoires de fonction de repartition Fi et une fonction simulTheta qui
simule une variable aleatoire `
a valeur dans {1, ..., n} telle que P( = i) = i .
function x = melange
// simulation par melange
i=simulTheta; x=simulFi;
Exercice 10: Simuler un melange dexponentielles F (z) = (1 exp(az)) + (1 )(1
exp(bz)).
Exercice 11: Simuler une variable aleatoire de loi 21 0 + 12 ex 1R+ (x)dx.
Cette methode se generalise immediatement `a un nombre infini denombrable de poids (i )iN ,
et meme `a un melange continu de lois: on suppose quon veut simuler une variable aleatoire
R
X de densite f (z) = g()f (z)d, o`
u g est une densite de probabilite, ainsi que tous les f .
Lalgorithme est alors simple: on tire suivant g, puis x suivant f .
1 (ax + 1) exp(ax)
Exercice 12: Soit a > 0, et f (x) =
1x>0 la densite de la variable
ax2
aleatoire X `
a simuler.
Z
1 a
1. Verifier que f (x) =
exp(x)dx.
a 0
2. En deduire un algorithme pour simuler X.

1.3
1.3.1

Simulation de vecteurs al
eatoires
Cas ind
ependant

Soit Z une vecteur aleatoire de Rd `


a simuler. Si ses composantes sont independantes, on est
ramene au cas de la simulation de variables aleatoires reelles independantes traite dans les sections precedentes (on rappelle que les sorties successives de rand donnent des variables aleatoires
independantes de loi uniforme sur [0, 1]). Le probl`eme est different quand les coordonnees ne
sont pas independantes.

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

Ld1 Ld1 = Kd1


=K
Ld1 V = C

t V V + b2 = a

Lhypoth`ese de recurrence assure lexistence et lunicite de Ld1 , triangulaire inferieure


de taille (d 1) (d 1) avec coefficients diagonaux strictement positifs, telle que
Ld1 t Ld1 = Kd1 . En particulier, Ld1 est inversible, ce qui permet de resoudre
de facon unique V = L1
a voir que a t V V > 0, et b sera alors
d1 C. Il reste donc `
la racine carree de a t V V .
On va calculer par blocs le determinant de K, qui est strictement positif. On fait
apparaitre des 0 dans les d 1 premiers coefficients de la derni`ere colonne de K en
soustrayant `
a cette colonne une combinaison lineaire adequate des d 1 premi`eres
colonnes de la matrice K:
!
!
!
Kd1
C
0
1

(Kd1
C) =
1
tC
a
a t CKd1
C
11

Cette manipulation ne change pas le determinant, et on se retrouve avec une matrice


tringulaire par blocs:
!
Kd1
0
1
det(K) = det
= det(Kd1 )(a t CKd1
C) > 0.
1
tC
a t CKd1
C
1
Comme det(Kd1 ) > 0, il vient a t CKd1
C > 0. Mais
t

1
1
t
CKd1
C =t C(Ld1 t Ld1 )1 C =t (L1
d1 C)(Ld1 C) = V V,

ce qui conclut la preuve.

En pratique: on cherche L par coefficient indetermines et identification, colonne par colonne.


Voir lexemple juste apr`es.
Remarque: Si K est seulement semi-definie positive, la decomposition de Cholesky existe
encore mais elle nest plus unique.
Lemme 1.3.2 Soit T un vecteur gaussien de dimension d centre de matrice de covariance Id
(dont les coordonnees sont des variables aleatoires iid normales centrees reduites). Soit m Rd ,
et K une matrice definie positive de taille dd. Soit L la matrice triangulaire inferieure donnee
par la factorisation de Cholesky de K.
Alors le vecteur aleatoire Z = m + LT est un vecteur gaussien de moyenne m et de matrice de
covariance K.
D
emonstration: Comme L est une application lineaire de Rd dans Rd , Z est
encore un vecteur gaussien d-dimensionnel. Pour lesperance:
E(Z) = E(m + LT ) = m + LE(T ) = m,
puisque T est centre. Pour la matrice de covariance, comme celle de T est Id ,
E((Z m)t (Z m)) = E(LT t T t L) = LE(T t T )t L = LIdt L = Lt L = K.

B Exemple: On veut simuler le vecteur gaussien Z de R3 de moyenne m et de matrice de
covariance K avec

1
1 1 0

m = 2 et K = 1
5 6 .
4
0
6 10

On commence par chercher la matrice de factorisation de Cholesky L par coefficients indetermines


et identification:

l11
0
0

L = l21 l22
0 .
l31 l32 l33

On calcule LLt et on identifie, colonne par colonne:


12

2 =k
1. l11
11 = 1 l11 = 1.

2. l11 l21 = k21 = 1 l21 = 1.


3. l11 l31 = k31 = 0 l31 = 0.
2 + l2 = k
4. l21
22 = 5 l22 = 2.
22

5. l21 l31 + l22 l32 = k32 = 6 l32 = 3.


2 + l2 + l2 = k
6. l31
33 = 1 l33 = 1.
32
33

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. Le cas dune v.a. discr`ete `


a valeurs dans Rd se traite comme celui dune variable aleatoire
reelle discr`ete.
2. La methode de rejet a ete presentee dans la cas dune variable aleatoire `a valeurs dans Rd .
3. On peut encore utiliser les lois conditionnelles. Nous allons illustrer cette methode, dite
m
ethode r
ecurrente, par un exemple:
B Exemple: On veut simuler un vecteur (X, Y ) de loi uniforme sur le triangle ABC avec
A = (0, 0), B = (1, 1) et C = (0, 1). On commence par determiner la densite de cette loi:
f (x, y) = 210x1 10y1 1xy .
On peut alors calculer la densite de X:
fX (x) = 2(1 x)10x1 ,
puis la densite de la loi conditionnelle de Y sachant X:
fY |X (y|x) =

1
1xy1 .
1x

Pour la simulation, on proc`ede maintenant de la facon suivante: on simule X suivant sa densite


(en utilisant par exemple la methode de la fonction de repartition), on obtient une valeur x,
1
1xy1 (on reconnait par exemple une loi
puis on simule Y suivant la densite fY |X (y|x) = 1x
usuelle).
Remarque: Remarquons que la seconde etape ressemble beaucoup `a la simulation par melange.
Exercice 13: Simuler un vecteur de loi f (x, y, z)dxdydz, o`
u f (x, y, z) = 61x>0,y>0,z>0 1x+y+z<1 :
a) en utilisant les lois conditionnelles.
13

b) par la methode du rejet.


c) Comparer.
Exercice 14: Simuler un vecteur de loi f (x, y)dxdy, o`
u f (x, y) = 21 (x + y)e(x+y) 1x>0 1y>0 .

14

Vous aimerez peut-être aussi