Poly MC Simu Va
Poly MC Simu Va
Madalina Deaconu
1 Introduction 2
2 Introduction 3
1
Chapitre 1
Introduction
L’objectif de ce cours est d’introduire les outils théoriques et d’illustrer, à travers des
problèmes réels, comment la modélisation stochastique et les méthodes de Monte Carlo per-
mettent d’apporter des réponses pour des questions issues de nombreux domaines applicatifs.
La modélisation probabiliste est fondamentale dans tous les domaines d’application.
Les outils probabilistes que nous développons, comme les méthodes de Monte Carlo et le
mouvement brownien, sont des outils généraux utilisés dans de nombreux domaines comme en
physique (écoulement d’un fluide, trajectoire d’un avion), en biologie (mutation du genôme),
en chimie (coagulation des polymères), en climatologie (modélisation du vent, de la pluie
etc), en informatique, en médicine, en finance (évaluation des produits dérivés), en science
du vivant, en assurance, en linguistique, en sociologie... Les modèles que nous étudions sont
inspirées du monde de la finance, des files d’attente, etc.
Nous débuterons ce cours par des rappels sur les méthodes numériques permettant de
simuler des variables aléatoires.
Ensuite nous étudions des méthodes numériques basées sur les tirages successifs de nombres
aléatoires, méthodes appelées généralement méthodes de Monte Carlo.
En outre, nous aborderons l’étude de certains processus stochastiques essentiels dans la
modélisation, tels que le mouvement brownien. Ce processus est fondamental en finance.
2
Chapitre 2
Introduction
L’objectif de ce cours est d’introduire les outils théoriques et d’illustrer, à travers des
problèmes réels, comment la modélisation stochastique et les méthodes de Monte Carlo per-
mettent d’apporter des réponses pour des questions issues de nombreux domaines applicatifs.
La modélisation probabiliste est fondamentale dans tous les domaines d’application.
Les outils probabilistes que nous développons, comme les méthodes de Monte Carlo et le
mouvement brownien, sont des outils généraux utilisés dans de nombreux domaines comme en
physique (écoulement d’un fluide, trajectoire d’un avion), en biologie (mutation du genôme),
en chimie (coagulation des polymères), en climatologie (modélisation du vent, de la pluie
etc), en informatique, en médicine, en finance (évaluation des produits dérivés), en science
du vivant, en assurance, en linguistique, en sociologie... Les modèles que nous étudions sont
inspirées du monde de la finance, des files d’attente, etc.
Nous débuterons ce cours par des rappels sur les méthodes numériques permettant de
simuler des variables aléatoires.
Ensuite nous étudions des méthodes numériques basées sur les tirages successifs de nombres
aléatoires, méthodes appelées généralement méthodes de Monte Carlo.
En outre, nous aborderons l’étude de certains processus stochastiques essentiels dans la
modélisation, tels que le mouvement brownien. Ce processus est fondamental en finance.
3
Chapitre 3
Nous allons voir dans ce qui suit que, à la base de toute méthode de simulation d’une
variable aléatoire, se trouve la loi uniforme. En outre, nous montrerons comment on peut
construire des générateurs de nombres aléatoires.
avec a, b, m des entiers positifs, qu’il faudra choisir soigneusement, si l’on veut que les
caractéristiques de la suite soient performantes.
Sedgewick préconise le choix suivant :
a = 31415821
b=1
m = 108 .
4
On dit que de tels nombres sont (pseudo-)aléatoires pusiqu’ils sont obtenus par une règle
arithmétique. Mais la grande périodicité de m et un choix judicieux de a et b permettent
d’affirmer (cf. Knuth) que leur loi de distribution est ”indistinguable presque sûrement” de
vrais nombres aléatoires.
Le générateur précédent fournit des résultats acceptables dans les cas courants. Cepen-
dant, sa période (ici m = 108 ) peut se réveler parfois insuffisante.
On peut alors, obtenir des générateurs de nombres aléatoires de période arbitrairement
longue en augmentant m.
5
Chapitre 4
4.1 Introduction
On présentera dans cette partie un panel de méthodes pour la simulation de variables
aléatoires. Nous commençons par rappeler les principes de simulation pour les lois classiques.
Ensuite nous introduisons les méthodes générales de simulation pour les variables aléatoires
à valeurs discrètes et continues.
Soit (Ω, F, P) un espace de probabilité et X une variable aléatoire réelle sur cet espace.
On notera F sa fonction de répartition et f sa densité. Plus précisément, pour tout x ∈ R :
F (x) = P(X ≤ x)
et
d
F (x).
f (x) =
dx
Principe Pour simuler des variables aléatoires de loi quelconque, l’idée est de se ramener
à la loi uniforme sur [0, 1]. La loi uniforme sur [0, 1] est donc à la base de toute simulation
de variable aléatoire. Rappelons ses propriétés.
Soit U une variable aléatoire de loi uniforme sur [0, 1], U ∼ U[0, 1]. Dans ce cas :
0 si x < 0
FU (x) = x si 0 ≤ x ≤ 1
1 si x > 1
et
1 si x ∈ [0, 1]
fU (x) = 1{x∈[0,1]} =
0 si x ∈
/ [0, 1].
Cadre général : On suppose qu’on dispose d’un générateur de variables aléatoires de loi
uniforme sur [0, 1] indépendantes.
L’hypothèse d’indépendance des valeurs est une des conditions essentielles pour la validité
de la plupart des algorithmes présentés dans la suite.
Exemple 1. Matlab possède une fonction rand() dont les appels successifs fournissent une
suite de variables aléatoires “indépendantes” et identiquement distribuées, de loi uniforme
sur [0, 1]. Nous ne nous intéresserons pas ici à la conception d’une telle fonction.
6
Les générateurs sont souvent construits à partir d’une relation de congruence sur de
nombres de grande dimension et initialisés par exemple à partir de l’horloge de la machine. Il
s’agit des générateurs de nombres pseudo-aléatoires, notamment les valeurs obtenues ne sont
qu’apparemment indépendantes.
Remarque 1. Une variable aléatoire U de loi uniforme sur [0, 1] est différente de 0 et 1
presque surement. En particulier, si Λ(dx) note la mesure de Lebesgue, on a
Z
P(U ∈ {0, 1}) = 1[0,1] dΛ = Λ({0, 1}) = 0.
{0,1}
Algorithmes Matlab
function x=bernoulli1(p)
% tirage suivant la loi de Bernoulli de parametre p
x=0;
if rand()<p
x=1;
end
function x=bernoulli2(k,p)
% tirage d’un k-echantillon suivant la loi de Bernoulli de parametre p
y=rand(1,k),
x=(y<p);
end
7
Exemple 2. Pile ou face
On veut simuler une variable aléatoire de loi “Pile ou face” i.e. X ∼ B( 12 ). On tire U une
uniforme sur [0, 1] et on définit
( 1
“Pile” si U ≤
X= 2
“Face” sinon,
Donc X est une variable aléatoire à valeurs dans {0, . . . , n} de loi donnée par les probabilités
pk = P(X = k) = nk pk (1 − p)n−k ,pour tout k ∈ {0, . . . , n}.
On sait qu’une variable aléatoire binomiale peut être représentée comme la somme de n
variables aléatoires indépendantes de Bernoulli de paramètre p. Plus précisément on a le
résultat suivant :
Algorithme
Il suffit donc de simuler n variables aléatoires indépendantes de loi B(p) et d’en faire la
somme. On simule (Ui )1≤i≤n , n v.a.i.i.d. de loi uniforme sur [0, 1] et on définit
n
1{Ui ≤p} .
X
X=
i=1
Algorithme Matlab
Nous utilisons ici la fonction Matlab définie précédemment qui simule un n échantillon de
loi de Bernoulli de paramètre p.
function x=binomiale(n,p)
% tirage suivant la loi binomiale de parametres (n,p)
x=sum(bernoulli2(n,p));
8
Lemme 2. Si U est une variable aléatoire de loi uniforme sur [0, 1] alors la partie entière
X = [nU ] suit la loi uniforme sur {0, 1, ..., n − 1}.
Remarque 3. En admettant ce résultat, l’algorithme s’écrit :
Algorithme Matlab
function x=uniforme1(n)
% tirage suivant la loi uniforme sur {0,...,n-1}
x=floor(n*rand());
end
Démonstration : On note X la variable aléatoire rendue par cette fonction.
Comme P(0 ≤ rand() < 1) = 1, on a P(0 ≤ n*rand() < n) = 1 et
P(floor(n*rand()) ∈ {0, 1, ..., n − 1}) = 1.
Donc X prend ses valeurs dans {0, 1, ..., n − 1}.
Maintenant, soit k ∈ {0, 1, ..., n − 1} :
P(X = k) = P(floor(n*rand()) = k) = P(k ≤ n*rand() < k + 1)
k k+1 1
= P ≤ rand() < = .
n n n
Ce qui prouve le résultat souhaité.
Algorithme Matlab :
function x=uniforme2(a,b)
% tirage suivant la loi uniforme sur [a,b]
x=a+(b-a)*rand();
end
9
4.2.5 Loi exponentielle de paramètre λ
Soit λ > 0. On souhaite simuler une variable aléatoire X de loi exponentielle de paramètre
λ, avec
λ exp(−λx) si x ≥ 0
f (x) = λ exp(−λx)1R+ (x) = (4.5)
0 si x < 0.
Sa fonction de répartition est F (x) = P(X ≤ x) = 1 − exp(−λx). Cette fonction est une
bijection de ]0, +∞[ dans ]0, 1[, d’inverse
1
G(u) = − ln(1 − u). (4.6)
λ
Lemme 4. Si U est de loi uniforme sur [0, 1], alors G(U ) suit la loi exponentielle de paramètre
λ.
Algorithme Matlab :
function x=exponentielle(a)
% tirage suivant la loi exponentielle de parametre a
x=- log(rand())/a;
end
On a donc dans ce cas les probabilités pk = P(X = k) = (1−p)k−1 p pour tout k ≥ 1 Plusieurs
méthodes sont possibles.
10
valeurs dans N∗ . Soit maintenant k ∈ N∗ . Calculons :
ln U
P(X = k) = P 1 + =k
ln(1 − p)
ln U
= P =k−1
ln(1 − p)
ln U
= P k−1≤ <k
ln(1 − p)
= P (k ln(1 − p) < ln U ≤ (k − 1) ln(1 − p))
= P (1 − p)k < U ≤ (1 − p)k−1
= (1 − p)k−1 − (1 − p)k
= (1 − p)k−1 p.
L’algorithme correspondant s’écrit :
Algorithme Matlab :
function x=geometrique2(p)
% tirage suivant la loi geometrique de parametre p
x=1+floor(log(rand())/log(1-p));
Méthode 2 : En utilisant la loi de Bernoulli :
Lemme 6. Si (Xi )i∈N∗ sont des variables aléatoires i.i.d. de loi de Bernoulli de paramètre
p, alors N = min{i : Xi = 1} est une variable aléatoire qui suit une loi géométrique de
paramètre p.
L’algorithme correspondant s’écrit.
function x=geometrique1(p)
% tirage suivant la loi geometrique de parametre p
x=1;
while rand()>p, x=x+1;
end
11
paragraphe 4.3.1. La méthode proposée ici annonce la méthode de la fonction inverse.
Lemme 7. Soient (Xi )i∈N∗ des variables aléatoires i.i.d. exponentielles de paramètre λ. La
variable aléatoire définie par
0 si X1 ≥ 1
N= Pi
max{i ≥ 1 : j=1 Xj ≤ 1} sinon,
12
Remarque 6. Soient (Ui )i∈N∗ des variables aléatoires i.i.d. de loi uniforme sur [0, 1], alors
si Xi = − λ1 ln(Ui ), les (Xi )i∈N∗ sont des variables aléatoires i.i.d. exponentielles de paramètre
λ, et !
i i i
X 1 Y Y
Xj ≤ 1 ⇔ − ln Uj ≤ 1 ⇔ Uj ≥ exp(−λ).
j=1
λ j=1 j=1
L’algorithme s’écrit :
Algorithme Matlab :
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;
Méthode 2 : En utilisant la méthode générale pour les variables aléatoires discrètes, voir le
paragraphe 4.3.1.
On sait que
λk −λ
X ∼ P(λ) ⇔ pk = P{X = k} = e (pour k ∈ N)
k!
ce qui implique que
λ
pk+1 = pk ,
k+1
Pk
et en notant qk la somme des pj pour 0 ≤ j ≤ k, (qk = j=0 pj ), on a
λ
qk+1 = qk + pk .
k+1
On simule donc une variable de Poisson de paramètre λ en prenant
Ceci conduit à une méthode de simulation simple pour une loi gaussienne, basée sur la
simulation de deux variables aléatoires uniformes sur [0, 1]. C’est la méthode de Box-Muller.
13
Algorithme Matlab :
function [x,y]=boxmuller
% tirage de deux N(0,1) independantes
r=sqrt(-2*log(rand())); t=2*pi*rand();
x=r*cos(t); y=r*sin(t);
end
où n
X
pi = P(X = xi ) = µ(xi ), ∀i ∈ I et pi = 1. (4.9)
i=0
On a alors q0 = p0 et qn = 1.
Nous souhaitons simuler une variable aléatoire de même loi que X. Pour ce faire on va
construire une variable aléatoire Y telle que
P(X = xi ) = P(Y = xi ) = pi , ∀i ∈ I,
i=1
Remarque 7. Cette méthode générale peut s’appliquer pour tous les variables aléatoires
discrètes particulières que nous avons étudiées.
14
L’algorithme suivant simule une variable représentative pour cette loi :
Algorithme Matlab :
function y=simuldiscrete(x,p)
% simulation d’une v.a. de loi discrete
% x=vecteur des valeurs prises, p=vecteur des probabilites
u=rand(); q=p(1); i=0;
while (u>q); i=i+1; q=q+p(i); end;
y=x(i);
end
Démonstration : En effet, on a : P(X = x0 ) = P(rand() ≤ p0 ) = p0 et pour k ≥ 1,
k−1 k
!
X X
P(X = xk ) = P pi < rand() ≤ pi = pk .
i=0 i=0
Remarque 8. Le nombre N de tests nécessaires satisfait N = 1 ssi u ≤ p0 , et pour i > 1,
N = i ⇔ qi−1 < u ≤ qi .
On a donc intérêt à réordonner les (xi )i≥0 dans l’ordre des (pi )i≥0 décroissants.
15
4.3.3 Algorithme par rejet
On veut simuler une variable aléatoire X de densité f et de fonction de répartition F .
Exemple 3. Commençons par un exemple très simple : comment simuler une loi uniforme
sur le disque unité {x2 + y 2 ≤ 1} ?
function X=disque
% simule un point uniformement sur le disque unite
X=2*rand(1,2)-[1,1];
while (norm(X)>1),
X=2*rand(1,2)-[1,1];
end
L’idée est la suivante : on tire des points uniformément dans le carré [0, 1] × [0, 1], et on
les jette jusqu’à en obtenir un qui tombe dans le disque. La loi du point obtenue est la loi
d’un point tiré uniformément dans le carré conditionnellement à être dans le disque, ce qui
est encore la loi uniforme sur le disque.
Remarque 10. Quelle est la loi du nombre N de passages dans la boucle ?
Lemme 10. Soit X une variable aléatoire de densité f (sur R) à simuler. On suppose qu’il
existe une constante k > 0 et une densité g (sur R aussi, facile à simuler) tels que
∀x, f (x) ≤ kg(x).
Soit U une variable aléatoire de loi uniforme sur [0, 1] et Z une variable aléatoire, indépendante
de U , de densité g. On pose V = kU g(Z). Alors, la loi de Z conditionnellement à l’événement
{V < f (Z)} a pour densité f .
Remarque 11. Notons que nécessairement k ≥ 1 (car f, g sont des densités).
Remarque 12. Il est très important de noter qu’on doit choisir la constante k la plus petite
possible pour minimiser le nombre de rejets : plus la majoration est grossière, plus il faut des
tirages pour obtenir une valeur acceptable.
f (z)
Démonstration : Notons que pour tout z ∈ R, kg(z)
≤ 1. On a tout d’abord
16
Z t
Ce qui montre que P(Z ≤ t|V < f (Z)) = f (z)dz, donc la loi conditionnelle de Z sachant
−∞
que {V < f (Z)} a bien pour densité f .
Ce résutltat se généralise à Rd .
On obtient donc l’algorithme de simulation par rejet (on suppose qu’on possède une fonc-
tion simulg qui simule une variable aléatoire de densité g) :
Algorithme :
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émonstration : Notons N le nombre de tests fait lors de cette fonction. N est une va-
riable aléatoire, à valeurs dans N∗ . Notons (Un )n≥1 la suite des appels à la fonction rand(),
et (Zn )n≥1 la suite des appels à la fonction simulg. Toutes ces variables aléatoires sont
indépendantes, les premières de loi uniforme sur [0, 1], les secondes de densité g. On note
Vn = kUn g(Zn ), et on note X la sortie de la fonction.
Soit t ∈ R. Evaluons
1 t
Z
P(X ≤ t et N = 1) = P(V1 < f (Z1 ) et Z1 ≤ t) = f (z)dz
k −∞
par la démonstration précédente. Soit maintenant i ≥ 2. Par indépendance, et comme
précédemment :
P(X ≤ t et N = i)
17
4.3.4 Simulation par composition
Exemple 4. Soit F et G deux fonctions de répartition sur R. On construit une variable
aléatoire X de la façon suivante : on lance une pièce qui tombe sur pile avec probabilité
1/3 et sur face avec probabilité 2/3, si pile sort, on tire un nombre au hasard suivant la loi
donnée par F , sinon, on tire un nombre au hasard suivant la loi donnée par G. Déterminer
la fonction de répartition H de X.
function x = melange
% simulation par melange
i=simulTheta;
x=simulFi;
end
K = Lt L.
On peut également imposer que les éléments diagonaux de la matrice L soient tous strictement
positifs, et la factorisation correspondante est alors unique.
18
En pratique on cherche L par coefficients indéterminés et identification, colonne par colonne.
Voir l’exemple juste après.
19
4.4.3 Cas général
1. Le cas d’une v.a. discrète à valeurs dans Rd se traite comme celui d’une variable aléatoire
réelle discrète.
2. La méthode de rejet a été présentée dans la cas d’une variable aléatoire à valeurs dans Rd .
3. On peut encore utiliser les lois conditionnelles. Nous allons illustrer cette méthode, dite
méthode récurrente, par un exemple :
Exemple 6. 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).
Remarque 14. Remarquons que la seconde étape ressemble beaucoup à la simulation par
mélange.
20
4.5 Exercices
Exercice 1. Soit X une variable aléatoire de loi de Bernoulli de paramètre p.
1. Proposer une fonction qui construit une réalisation de X.
2. Proposer une fonction qui renvoie un k-échantillon de cette variable aléatoire.
3. Tester ces résultats en Matlab pour différentes valeurs de p et k.
Exercice 2. Simuler une variable aléatoire X de loi binomiale de paramètres (n, p) pour
différentes valeurs de n et p.
Exercice 3. Soit X une variable aléatoire de loi uniforme sur {1, . . . n}. Proposer un algo-
rithme en Matlab pour la simulation de cette loi :
1. En utilisant la simulation d’une loi de probabilité discrète sur un ensemble fini.
2. En utilisant le résultat suivant : Si U est une variable aléatoire de loi uniforme sur [0, 1]
alors [nU ] + 1 est une variable aléatoire de loi uniforme sur {1, . . . , n}.
Simuler les résultats pour différentes valeurs de n. Comparer les deux approches.
Exercice 4. Soit X une variable aléatoire de loi uniforme sur [a, b] avec a, b ∈ R, a < b.
Proposer un algorithme pour la simulation de cette loi et tester le pour différentes valeurs de
a et b.
Exercice 5. Soit X une variable aléatoire de loi exponentielle de paramètre λ. Proposer un
algorithme pour la simulation de cette loi en utilisant la méthode de la fonction inverse.
Exercice 6. Soit X une variable aléatoire géométrique de paramètre p. Proposer un algo-
rithme pour la simulation de cette loi :
1. En utilisant le résultat : Si (Yi )i∈N∗ sont des variables aléatoires i.i.d. de loi de Bernoulli
de paramètre p, alors N = min{i; Yi = 1} suit une loi géométrique de paramètre p.
ln U
2. En utilisant le résultat : Si U suit une loi uniforme sur [0, 1] alors G = 1 +
ln(1 − p)
suit la loi géométrique de paramètre p.
3. Comparer les résultats en insistant sur le temps de calcul.
Exercice 7. Soit Y une variable aléatoire de loi exponentielle de paramètre λ, avec λ > 0.
Sa densité est donnée par
f (x) = λe−λx 1{x>0} .
On définit une variable aléatoire Z = 1 + [Y ], où, pour tout x ∈ R, [x] note la partie entière
de x.
1. Quelle est la loi de Z ? Justifier votre réponse.
2. Soient p ∈]0, 1[ et U une variable aléatoire de loi uniforme sur [0, 1]. Trouver la constante
λ telle que
ln U
1+ − ∼ G(p).
λ
3. Utiliser ce résultat pour écrire un algorithme pour la simulation d’une variable aléatoire
X de loi géométrique de paramètre p.
4. Donner des résultats numériques de votre algorithme pour p = 0.1, p = 0.5 et p = 0.9
(4 valeurs pour chaque choix de p).
21
Exercice 8. Soit X une variable aléatoire de loi de Poisson de paramètre λ. Simuler cette
variable aléatoire en utilisant le résultat suivant :
Soit (Xi )i∈N∗ une suite de variables aléatoires i.i.d. de loi exponentielle de paramètre λ. Alors
la variable aléatoire :
0, si X1 ≥ 1
N= Pi
max{i ≥ 1; j=1 Xj ≤ 1}, sinon
suit une loi de Poisson de paramètre λ.
Exercice 9. Soit X une variable aléatoire de loi normale de moyenne m et variance σ 2 .
Simuler cette variable aléatoire en utilisant la méthode de Box-Muller.
Exercice 10. En utilisant la méthode de la fonction de répartition, simuler une loi de Cauchy.
Soit X une variable aléatoire de loi de Cauchy de paramètre a > 0. Sa densité est donée par :
a
f (x) = , x ∈ R.
π(x + a2 )
2
22
Exercice 13. Simuler un mélange d’exponentielles F (x) = α(1 − exp(−ax)) + (1 − α)(1 −
exp(−bx)), avec α ∈ [0, 1].
Exercice 14. Simuler une variable aléatoire de loi 21 δ0 (x) + 12 e−x 1R+ (x)dx.
Exercice 16. Simuler un vecteur (X, Y ) de loi uniforme sur le triangle ABC avec A = (0, 0),
B = (1, 1) et C = (0, 1).
3. Comparer.
23
Simulation de variables aléatoires
Dans tout ce qui suit U note une v.a. de loi uniforme sur [0, 1] et (Un )n≥1 une suite de
v.a. i.i.d., avec U1 de loi uniforme sur [0, 1].
n
1{Ui ≤p}
X
Binomiale B(n, p), n ∈ N∗ , p ∈ [0, 1]
i=1
ln(U )
Exponentielle E(λ) −
λ
ln(U )
Géométrique G(p) 1+
ln(1 − p)
( n
)
Y
Poisson P(λ) min n ∈ N : Ui ≤ e−λ
i=1
p
Gaussienne N (m, σ 2 ) m+σ −2 ln(U1 ) sin(2πU2 )
24