Simulation Agreg 1718
Simulation Agreg 1718
Simulation Agreg 1718
https://www.math.univ-paris13.fr/~rousselin/
N’hésitez pas à me faire part de vos commentaires et à me signaler les coquilles, erreurs et
imprécisions à l’adresse indiquée sur ce site.
1 Introduction
Bien que le sujet soit intéressant, nous ne nous attarderons pas trop sur les les questions
que posent la simulation du hasard par un ordinateur. Pour en savoir plus sur ce sujet, voir par
exemple le début du chapitre 1 de [BC07].
On suppose donc disposer d’un « bon » programme renvoyant lors de ses appels successifs des
nombres réels aléatoires indépendants suivant la loi uniforme sur [0 ; 1]. Les problèmes surgissent
dès la définition : d’une part les nombres réels ne sont pas représentables en machine. On travaille
le plus souvent avec des nombres à virgule flottante en double précision qui sont en nombre fini,
bien qu’important. D’autre part, l’ordinateur est une machine déterministe.
On dispose donc d’algorithmes permettant de générer des suites de nombres, de façon déter-
ministe, qui « ressemblent » aux premières décimales d’une suite de réalisations indépendantes
de la loi uniforme sur [0 ; 1]. Le choix de tel ou tel algorithme dépend de l’utilisation que l’on en
fait.
Pour la simulation, l’algorithme le plus utilisé aujourd’hui est sans doute « Mersenne Twister
19937 », mais son utilisation est fortement déconseillée lorsqu’on souhaite, par exemple, fabriquer
une clé privée aléatoirement car il est jugé trop « prévisible ». En revanche, il passe un grand
nombre de tests statistiques et est assez performant.
Le logiciel Scilab est assez généreux en ce qui concerne la simulation. Les deux principales
fonctions que nous utiliserons seront rand, le générateur basique de Scilab, qui utilise un gé-
nérateur congruentiel simple et permet de simuler la loi normale centrée réduite et grand une
gigantesque fonction permettant de choisir son générateur parmi une liste assez longue (avec
Mersenne Twister 19937 comme choix par défaut) et de simuler un nombre important de lois de
probabilités.
Pour la suite de ce chapitre, nous utiliserons uniquement la fonction prédéfinie rand et nous
travaillerons sous l’hypothèse que ses appels successifs fournissent des réalisations indépendantes
de variables uniformes sur [0 ; 1]. En général, on peut imposer un état initial au générateur de
nombres aléatoires en choisissant une graine (en anglais, seed). Voyons le comportement par
défaut de Scilab.
2 Lois uniformes
Nous commençons par simuler la loi uniforme sur un intervalle réel ou entier, en donnant
une définition qui englobe ces deux cas et bien d’autres encore. Nous en profitons au passage
pour donner quelques rappels sur le calcul des moments de ces lois.
Définition 1. Soit (E, E, µ) un espace mesuré, et A ∈ E tel que 0 < µ(A) < ∞ . La loi uniforme
sur A (relativement à la mesure µ) est la loi de probabilité νA définie par :
µ (A ∩ B)
∀B ∈ E, νA (B) = .
µ (A)
Exercice 2.1.
Soient a et b deux réels avec a < b. Soit U une variable aléatoire de loi uniforme sur [a ; b].
a+b (b−a)2
Montrer que l’espérance de U vaut 2 et que sa variance vaut 12 .
Exercice 2.2.
En utilisant la fonction rand, écrire une fonction runif(m,n,a,b) qui renvoie une matrice de
taille m × n dont les coefficients sont des réalisations de la loi uniforme sur [a ; b].
Exercice 2.3.
Soient a et b deux entiers, avec a < b. Notons Ja ; bK l’ensemble {a, a + 1, . . . , b} et n = b − a + 1.
Soit X une variable aléatoire de loi uniforme sur Ja ; bK.
1. Montrer que la fonction génératrice des moments (aussi appelée transformée de Laplace) de
X est égale à
sinh n2 t
1 a+b
h i
tX
MX (t) := E e = exp t .
n 2 sinh 1 t 2
3. En déduire une formule permettant de calculer la somme des carrés des n premiers entiers,
pour n ≥ 1. Donner une méthode pour calculer la somme des n premiers cubes.
Remarque 3. On pouvait aussi utiliser la fonction génératrice pour résoudre l’exercice 2.1. En
utilisant la fonction sinus cardinal hyperbolique, définie par
sinh (x) ex − e−x
sinch (x) = = ,
x 2x
on trouve, pour U uniforme sur [a ; b],
a+b b−a
MU (t) = exp t sinch t .
2 2
Exercice 2.4.
On considère deux entiers a et b avec a < b. En utilisant la fonction rand, écrire une fonction
runif_int(m, n, a, b) qui renvoie une matrice de taille m × n dont les coefficients sont des
réalisations indépendantes de la loi uniforme sur {a, a + 1, . . . , b}.
3 Lois discrètes
Pour continuer, nous allons simuler les principales lois de référence sur N et en rappeler les
définitions et les principales propriétés.
Définition 4 (Bernoulli, binomiale, géométrique). Soit p ∈ [0 ; 1], n ∈ {1, 2, . . . } et X une
variable aléatoire. On dit que X suit :
1. la loi de Bernoulli de paramètre p (notation : X ∼ B (1, p) ) si
P (X = 1) = 1 − P (X = 0) = p ;
Remarque 5. La réciproque de la première formule de la question 1 est, sauf cas très particulier
(voir les vecteurs gaussiens) complètement fausse. Pour un contre-exemple, considérer le cas
où ε est une variable uniforme sur {−1; 1} et X suit la loi normale centrée réduite. Alors, si
Y = ε × X, on peut montrer (exercice) que Y suit également la loi normale centrée réduite et
que Var [X + Y ] = Var [X] + Var [Y ] alors que X et Y ne sont pas indépendantes.
1. Calculer GX (1) et G0X (1). Pour le calcul de G0X (1), on pourra, pour intervertir les limites
utiliser le théorème de convergence monotone avec la mesure de comptage.
2. Soit n un entier supérieur ou égal à 1. On suppose que E [X n ] < ∞. Montrer que
(n)
E [X (X − 1) (X − 2) · · · (X − n + 1)] = GX (1) ,
(n)
où GX désigne la dérivée nème de GX .
3. Montrer que, si X est de carré intégrable, on a
2
Var [X] = G00X (1) + G0X (1) − G0X (1) .
P (T = k) = q k−1 p, k = 1, 2, . . . . (4)
P (Xk+1 = 1 | Xk = 0) = p
P (Xk+1 = 0 | Xk = 0) = 1 − p
P (Xk+1 = 1 | Xk = 1) = 1
FX (x) = P (X ≤ x) .
En Scilab, la plupart des fonctions de répartitions des lois de références sont déjà programmées.
Elles sont en général préfixées par cdf, par exemple, cdfnor, cdfpoi, ... Voir l’exemple ci-dessous
(en particulier la bizarrerie consistant à entrer une chaîne de caractère « PQ » pour dire que l’on
veut la fonction de répartition).
u ≤ F (x) ⇐⇒ F −1 (u) ≤ x.
E = {x1 , x2 , . . . } .
Soit, pour tout k ≥ 1, pk = P (X = xk ). Soit la suite (sk )k≥0 définie par s0 = 0 et, pour tout
k ≥ 0,
sk+1 = sk + pk . 1
Alors, si U suit la loi uniforme sur [0 ; 1], la variable aléatoire Z définie par
Z = xk ⇐⇒ sk < U ≤ sk+1 ,
a la même loi que X. On remarquera que cette méthode fait intervenir un nombre aléatoire de
comparaisons. On a parfois intérêt à indexer les valeurs xk par ordre décroissant de probabilités
pour diminuer le nombre de tests.
En Scilab, on pensera dans ce genre de situation à utiliser les fonctions cumsum (pour la
somme cumulative) et dsearch (qui localise la classe d’une valeur, les classes étant données par
un vecteur trié).
Exercice 4.3. 1. En utilisant la méthode ci-dessus, proposer une nouvelle fonction pour la
simulation de la loi de Poisson.
2. Soit X une variable aléatoire à valeurs dans {0, 1, 2, . . . , N − 1}. Écrire une fonction en Scilab
rfinite(m,n,P) qui renvoie un échantillon de taille m × n suivant la loi de X, où la matrice
P contient les valeurs pk = P (X = k), pour k = 0, 1, . . . , N − 1.
1. Bref, les sk sont les sommes cumulatives des pk .
5 Méthode du rejet
Ce chapitre s’inspire, plus encore que les autres, du livre [BC07] (partie 1.10).
P (T = n, XT ∈ C) = P (X1 ∈
/ C, . . . , Xn−1 ∈
/ C, Xn ∈ C)
= P (X1 ∈/ C) · · · P (Xn−1 ∈/ C) P (Xn ∈ C)
µ (C) µ (C) µ (B)
= (1 − p)n−1 = (1 − p)n−1
µ (A) µ (B) µ (A)
µ (C)
= (1 − p)n−1 p = P (T = n) P (Z ∈ C) ,
µ (B)
où Z suit la loi uniforme sur B.
L’exercice suivant, très connu (bien que peu efficace), permet de calculer π en utilisant la
méthode de Monte-Carlo.
Exercice 5.1. Calcul de π par la méthode de Monte-Carlo
1. En utilisant la loi uniforme sur le carré C = [0 ; 1]2 , simuler la loi uniforme sur le quart de
disque n o
Q = (x, y) ∈ C x2 + y 2 ≤ 1 .
Combien faut-il, en moyenne, simuler de variables uniformes C pour obtenir une uniforme
sur Q ?
L’exercice suivant montre une application (un peu trop facile et maladroite) de cette méthode.
1. Justifier que f est une fonction de densité de probabilité, calculer sa fonction de répartition
et l’inverse de sa fonction de répartition. En déduire un programme inv_rep permettant de
simuler la loi de densité f .
2. Expliquer comment, en utilisant la méthode du rejet comparatif, on peut simuler la loi de
densité f puis mettre en œuvre cette méthode dans une fonction rejet.
3. Pour un grand nombre de valeurs simulées, combien d’appels à la fonction rand votre pro-
gramme rejet fait-il en moyenne ?
Définition 11. La loi normale centrée réduite, notée N (0, 1) sur R est la loi de densité f .
Si µ ∈ R et σ ≥ 0, on définit la loi normale N µ, σ 2 comme la loi de la variable aléatoire
X = µ + σN , où N suit la loi N (0, 1). Lorsqu’une variable aléatoire X suit une loi normale, on
dit que cette variable aléatoire est gaussienne.
1 (x−m)2
x 7−→ √ e− 2σ2 .
2πσ
5. Les fonctions génératrices des moments de N et de X sont finies sur R et valent respective-
ment
t2
h i
MN (t) := E etN = e 2 (11)
σ 2 t2
MX (t) = etm e 2 . (12)
6. La loi normale centrée réduite admet des moments de tous ordre. Ses moments d’ordre impair
sont tous nuls, tandis que ses moments d’ordre pair sont donnés par
h i (2n)!
E N 2n = .
2n n!
Exercice 6.2. Démonstration des résultats.
On indique pour chacun des points une stratégie de démonstration.
1. Pour l’espérance, utiliser un argument de symétrie. Pour la variance, faire une intégration
par parties.
2. Surtout, ne pas refaire le même calcul, utiliser la définition.
3. Considérer une fonction f mesurable positive, écrire
E [f (X)] = E [f (m + σN )] ,
Dériver sous le signe intégrale puis intégrer par parties pour montrer que ϕN vérifie l’équation
différentielle y 0 = −ty puis conclure.
5. Faire un calcul direct (avec un changement de variables sous la forme d’une translation).
6. Utiliser, par exemple, un développement limité de la fonction caractéristique au voisinage de
0.
Corollaire 13. Toute combinaison linéaire de variables gaussiennes indépendantes est encore
gaussienne.
Le rôle central de la loi normale, tant en probabilités qu’en statistiques, vient de son ca-
ractère universel donné par le théorème central limite. La démonstration utilise les fonctions
caractéristiques. Elle n’est pas très difficile et est bien détaillée dans [Tou99].
Théorème 14 (théorème central limite). Soit µ une mesure de probabilité sur R, de variance
finie σ 2 et de moyenne m. Soient X1 , X2 , . . . des variables aléatoires i.i.d. de loi µ et pour tout
n ∈ N∗ Sn = X1 + · · · + Xn . Alors on a la convergence en loi
√ Sn
(d)
n − m −−−→ N 0, σ 2 .
n n→∞
Alors, les variables aléatoires X et Y sont indépendantes, de même loi N (0, 1).
Exercice 6.4.
1. Démontrer la proposition précédente. On pourra considérer une fonction f mesurable positive,
et calculer h √ √ i
E f Y cos θ, Y sin θ
Remarque 16. La méthode de Box-Muller est assez classique et utilisée en pratique, mais on
lui préfère souvent la méthode de la ziggurat, inventée par Marsaglia (un grand nom de la
simulation) et ses collaborateurs. Elle est basée sur une méthode de rejet très astucieuse. Voir
l’article original [MT+ 00].
Bien sûr, Cov (Xi , Xi ) = Var [Xi ]. Noter que la covariance est, comme la variance, invariante
par translation.
Voyons maintenant l’effet du produit par une matrice A.
2. Hermann Schwarz (1843 - 1921), mathématicien allemand, auteur également du théorème de Schwarz sur
les dérivées partielles, à ne pas confondre avec Laurent Schwartz (1915 - 2002), mathématicien français célèbre
pour ses travaux sur la théorie des distribution.
Démonstration. La première égalité est très facile en utilisant la linéarité de l’espérance. Pour
la seconde, on peut, quitte à lui soustraire son espérance, supposer que E [X] est le vecteur nul,
sans changer ni Cov (X), ni Cov (AX) (par invariance par translation). Notons
A Cov (X) AT .
Proposition 18. Une matrice de covariance est toujours symétrique et (semi-définie) positive.
Comme dans le cas des variables aléatoires (réelles), les vecteurs aléatoires (de Rn ) ont une
loi caractérisée par leurs fonctions caractéristiques (leurs transformées de Fourier), définies pour
tout t = (t1 , t2 , . . . , tn ) ∈ Rn par h i
ϕX (t) = E eiht,Xi ,
où h·, ·i désigne le produit scalaire canonique sur Rn .
Avec les mêmes notations que précédemment, on obtient immédiatement,
ϕAX (t) = ϕX AT t . (13)
Proposition 20. Soit n un entier naturel non nul et X un vecteur aléatoire de Rn . Les propo-
sitions suivantes sont équivalentes.
1. Le vecteur X est un vecteur gaussien.
2. Pour tout vecteur (déterministe) u de Rn , le produit scalaire hu, Xi est une variable gaus-
sienne.
3. Pour tout entier naturel non nul m, toute matrice réelle A de taille m × n et tout vecteur
déterministe b de Rm , le vecteur aléatoire de Rm AX + b est un vecteur gaussien.
Nous allons voir qu’en fait, tous les vecteurs gaussiens peuvent s’écrire de cette façon.
Remarque 22. Si X est un vecteur gaussien, alors ses composantes sont des variables gaussiennes.
La réciproque est fausse ! La remarque 5 fournit un contre-exemple.
Le calcul de la fonction caractéristique d’un vecteur gaussien est immédiat, mais d’une im-
portance cruciale.
Proposition 23 (fonction caractéristique d’un vecteur gaussien). Soit X un vecteur aléatoire
de Rn . Alors, X est un vecteur gaussien si et seulement si, il existe un vecteur déterministe µ
de Rn et une matrice carrée de taille n, C symétrique et positive tels que que pour tout vecteur
v de Rn ,
1
h i
ϕX (v) := E eihv,Xi = eihv,µi e− 2 hv,Cvi .
Dans ce cas, µ est l’espérance de X et C est sa matrice de covariance.
Démonstration. Pour l’implication directe, on pose µ = E [X] et C = Cov (X). La variable
aléatoire hv, Xi est gaussienne, d’espérance hv, µi et de variance hv, Cvi, d’après la proposition 17
(le réel hv, Cvi est bien positif car C est symétrique positive). D’après la formule 10, sa fonction
caractéristique est
1 2
ϕhv,Xi (t) = eithv,Xi e− 2 t hv,Cvi .
On remarque pour conclure que
ϕX (v) = ϕhv,Xi (1) .
Pour l’implication réciproque, on commence par considérer un vecteur v de Rn . Comme
1 2
ϕhv,Xi (t) = ϕX (tv) = eithv,µi e− 2 t hv,Cvi
,
la variable hv, Xi est gaussienne. Ceci étant valable pour tout vecteur v, X est bien un vecteur
gaussien.
Pour calculer son espérance, il suffit d’appliquer la formule précédents aux éléments e1 , . . . , en
de la base canonique de Rn . Enfin pour trouver sa matrice de covariance, on peut considérer les
vecteurs ei + ej et utiliser la symétrie de la matrice C.
Corollaire 24. 1. La loi d’un vecteur gaussien est entièrement caractérisée par son espérance
et sa matrice de covariance.
2. Si X = (X1 , . . . , Xn ) est un vecteur gaussien, alors les variables gaussiennes X1 , . . . , Xn sont
indépendantes si et seulement si la matrice de covariance de X est diagonale, c’est-à-dire si
et seulement si les variables (X1 , . . . , Xn ) sont deux-à-deux non corellées.
Proposition 25. Soit C une matrice symétrique positive de taille n et µ un vecteur déterministe
de Rn . Soit N un vecteur gaussien de Rn dont toutes les composantes sont indépendantes de loi
normale centrée réduite.
Alors il existe des matrices A telles que AAT = C et pour toute telle matrice, le vecteur
aléatoire AN + µ est un vecteur gaussien de matrice de covariance C et d’espérance µ.
Remarque 26. En vertu des deux résultats précédent, on peut parler, pour tout vecteur µ et toute
matrice symétrique positive C de « la loi normale de matrice de covariance C et d’espérance
µ ». On notera cette dernière N (µ, C).
Démonstration. La seule chose à montrer est l’existence de telles matrices A. Une première
possibilité est d’utiliser le fait que C, symétrique, est diagonalisable par le groupe orthogonale,
donc il existe Q orthogonale et ∆ diagonale telles que
C = Q−1 ∆Q = QT ∆Q.
Comme C est positive par hypothèse, tous √ les éléments de ∆ sont positifs, de sorte que la matrice
formée par leurs racines carrées, notée ici ∆ est bien définie. On peut alors poser
√
A = QT ∆.
Remarque 27. Nous verrons plus loin avec la décomposition de Cholesky qu’il n’est nullement
besoin de diagonaliser C pour trouver une telle matrice A.
Nous justifions ensuite la remarque qui suit l’exemple 21.
X = A(N1 , N2 , . . . , Nr )T + µ.
Démonstration. Quitte à raisonner sur X − µ, on peut supposer que µ est le vecteur nul. Soient
λ1 ≥ λ2 ≥ · · · ≥ λr > 0 = λr+1 = · · · = λn
N := DQX
Par conséquent ses r premières composantes N1 , . . . , Nr sont bien gaussiennes centrées réduites
et indépendantes, d’après le corollaire 24, tandis que ses n−r dernières composantes sont presque
sûrement égales à 0.
Pour finir, on note que
√
λ1
..
.
N1
√
−1 −1
−1 λr
..
X=Q D N =Q . .
0
N
..
r
.
0
Remarque 29. En Scilab, la fonction spec permet de diagonaliser une matrice. Ce n’est pas
totalement explicite dans la documentation, mais dans le cas d’une matrice symétrique, la base
de vecteurs propres renvoyée est bien orthogonale 3 .
3. La sous-routine fortran utilisée dans ce cas est DSYEV, dont la documentation est claire.
√ c1j
On calcule donc d’abord le terme r11 = c11 , puis ceux de la première colonne rj1 = r11 . Puis,
si les i − 1 premières colonnes ont été calculées, on calcule la colonne d’indice i par :
v
u
u i−1
X
rii = tcii − 2
rik
k=1
P
i−1
cij − k=1 rik rjk
rji = .
rii
Exercice 6.6.
1. Vérifier que C = RRT dans la démonstration précédente.
2. Mettre en œuvre la décomposition de Cholesky dans une fonction Scilab.
3. Tester votre fonction.
4. Ne plus jamais utiliser votre fonction, utiliser la fonction prédéfinie chol, bien plus rapide
(mais lire la documentation de cette fonction).
P : E × E −→ [0 ; 1]
telle que X
∀x ∈ E, P (x, y) = 1.
y∈E
On dit que P est la matrice de transitions de la chaîne de Markov. Soit µ une mesure de
probabilité sur E appelée loi initiale de la chaîne.
On définit une variable aléatoire X à valeurs dans l’ensemble des suites E N muni de sa tribu
produit 4 par :
1. la loi de X0 est µ ;
2. pour tout n ≥ 0 et tous x, y ∈ E,
P (Xn+1 = y | Xn = x) = P (x, y) .
La mesure de probabilité ainsi définie sur l’espace des suites E N est notée Pµ .
En conditionnant par rapport aux différentes valeurs de X0 , on voit que la loi de X1 sous Pµ
est donnée par le produit µP :
X
∀y ∈ E, Pµ (X1 = y) = µP (y) = µ (x) P (x, y) .
x∈E
Le même raisonnement que ci-dessus montre alors que la loi de Xn sous Pµ est donnée par le
produit µP n .
Supposons maintenant que l’espace d’états E est fini. À l’aide des techniques vues précé-
demment, on voit qu’à n fixé, il n’est pas difficile de simuler une trajectoire X0 , X1 , . . . , Xn de
la chaîne de Markov. On peut par exemple :
1. utiliser la méthode de l’inverse de la fonction de répartition pour simuler la loi µ pour obtenir
ainsi un certain x0 dans E ;
2. puis simuler de la même manière la loi de probabilité y 7→ P (x0 , y) pour obtenir un certain
x1 ;
3. et recommencer l’étape précédente, en remplaçant x0 par x1 , etc.
On peut bien sûr trouver de nombreuses améliorations à l’algorithme précédent (calculer toutes
les sommes cumulatives des lignes de P dès le départ, etc). Tout ceci est déjà programmé dans
Scilab, on utilise grand(n,"markov",P,x0) où X0 est presque sûrement constante
pour le cas
égale à x0 . Si l’on donne un vecteur X0 = x0 , . . . x0 comme dernier argument, alors grand←-
1 N
(n, "markov", P, X_0) renvoie N trajectoires simulées, d’états initiaux respectifs x10 , x20 , etc.
Signalons aussi la fonction genmarkov qui permet d’obtenir des matrices de transitions ayant
certaines propriétés.
Exercice 7.1. Le chat bagarreur
Pito le chat n’a que trois activités : dormir, manger et se battre avec les autres chats. À chaque
heure, il peut décider, ou non de changer d’activité. On note Xn l’activité du chat après n heures.
1. Après avoir dormi une heure, il continue à dormir avec probabilité 0, 7 ou bien va manger
avec probabilité 0, 2 et se bat avec probabilité 0, 1.
2. Après avoir mangé, il va se battre avec probabilité 0, 3 ou bien dort avec probabilité 0, 7.
3. Après s’être battu, il va manger avec probabilité 0, 5 ou dormir avec probabilité 0, 5.
On suppose qu’au début de l’observation, Pito dort.
1. Tracer le graphe, puis écrire la matrice de transition de cette chaîne de Markov.
2. Calculer numériquement avec Scilab la loi de l’activité de Pito après 5 heures.
3. Simuler avec Scilab 1000 observations d’une durée de 15 heures chacune. Donner les fréquences
empiriques associées à X15 .
4. Justifier que la chaîne de Markov a une unique probabilité invariante, la calculer et justifier
que la loi de Xn converge vers cette probabilité invariante.
4. c’est-à-dire la plus petite tribu qui rend les applications coordonnées ϕk : (xn )n≥0 7→ xk mesurables
où σ est l’écart-type de la loi η. Tracer une trajectoire de Ytn , pour n = 1000 et t ∈ [0 ; 1].
4. À t fixé, est-ce que Ytn converge en loi lorsque n tend vers l’infini ? Si oui, vers quelle loi ?
Pour x ∈ Z, on note
Tx = inf {k ≥ 0 | Xk = x} ,
avec inf ∅ = +∞. Soient a et b dans {1, 2, . . . } et
not.
τ = min {T−a , Tb } = T−a ∧ Tb .
On s’intéresse à la probabilité que le joueur s’arrête en ayant gagné b euros par rapport à sa
mise de départ :
α = P (τ = Tb ) .
On note pour tout n ≥ 0, Fn = σ (X0 , X1 , X2 , . . . , Xn ) la tribu engendrée par les variables
aléatoires X0 , X1 , . . . , Xn .
Exercice 7.4. Cas où p = q = 21 .
1. Faire en Scilab un nombre important de simulation dans le cas où a = b = 10 pour donner
une estimation de α.
2. Montrer que pour tout x ∈ Z, Tx est un temps d’arrêt par rapport à la filtration (Fn )n≥0 En
déduire que τ est également un temps d’arrêt.
3. Montrer que τ est presque sûrement fini (on pourra par exemple considérer la chaîne de
Markov a espace d’états {−a, −a + 1, . . . , b − 1, b} ayant les mêmes probabilités de transition
que la chaîne de départ sauf en b et en −a où elle est réfléchie, c’est-à-dire va respectivement
en b − 1 et en −a + 1 avec probabilité 1).
4. Montrer que (Xn )n≥0 est une martingale par rapport à la filtration Fn .
5. En déduire que (Xτ ∧n ) est une martingale. Montrer que cette dernière est uniformément
intégrable.
6. En déduire la valeur de α en fonction de a et b.
Exercice 7.5. Cas où p 6= q
On reprend les notations de l’exercice précédent.
1. Faire d’autres simulations, par exemple pour p = 0, 4 et a = b = 10.
2. Montrer que le processus, défini pour n ≥ 0 par
Xn
q
Mn =
p
est une martingale.
3. En déduire la valeur de α dans ce cas.
Définition 32. Le processus (Zn )n≥0 ainsi défini est appelé processus de Galton-Watson de loi
de reproduction η.
Dégageons tout de même quelques résultats plus théoriques sur ce modèle. On garde les
mêmes notations que précédemment. Nous nous intéressons tout d’abord à la probabilité que le
processus s’éteigne, c’est-à-dire qu’il existe un entier n pour lequel Zn = 0.
Le personnage principal de cette histoire est la fonction génératrice des probabilités de la loi
η, que nous noterons f . Celle-ci est définie au moins sur l’intervalle [0 ; 1] par :
∞
X
f (s) = ηk sk .
k=0
Ses principales propriétés ont déjà été étudiées lors de l’exercice 3.3.
fn := f ◦ f ◦ · · · ◦ f
| {z }
n fois
Démonstration. Le résultat est vrai au rang n = 1, car la loi de Z1 est η. On raisonne ensuite
par récurrence. Soit n un entier naturel. Par définition, la fonction génératrice gn+1 de Zn+1
vaut h i
gn+1 (s) = E sZn+1 .
On utilise ensuite le fait que
Zn
X ∞
X k
X
Zn+1 = ξn,i = 1{Zn =k} ξn,i ,
i=1 k=1 i=1
pour obtenir en conditionnant par rapport aux valeurs possibles de Zn et en utilisant que les
variables aléatoires ξn,i , pour i entier naturel non nul, sont indépendantes et indépendantes de
Zn :
h i ∞ P
k
ξ
X
E sZn+1 = P (Zn = k) E s i=1 n,i Zn = k
k=0
X∞ k
Y h i
= P (Zn = k) E sξn,i
k=0 i=1
∞
P (Zn = k) (f (s))s
X
=
k=0
= fn (f (s)) ,
Corrigé de l’exercice 2.1 Il y a plusieurs façons de procéder. La plus simple est bien sûr
un calcul direct.
" #b
x2
Z b
1[a;b] (x) dx 1 a+b
Z
E [U ] = x dx = x = = .
R b−a a b−a b−a 2 a
2
Corrigé de l’exercice 2.2 On utilise simplement que si V suit la loi uniforme sur [0 ; 1],
alors U := a + (b − a) V suit la loi uniforme sur [a ; b].
function U = runif (m , n , a , b )
y = a + ( b - a ) * rand (m , n ) ;
endfunction
Corrigé de l’exercice 2.3 Comme X est bornée, sa fonction génératrice des moments est dé-
finie sur R. Le calcul suivant est classique, il utilise la somme des termes d’une suite géométrique
et une méthode de symétrisation des quotients bien connue.
b a+b+1
h
tX
i 1X 1 eat − et(b+1) 1e 2 t sinh nt
E e = etk = = 2
.
n k=a n 1−e t n e 2t sinh 2t
Comme la transformée de Laplace est finie sur R, elle est analytique (et même entière) sur R et
admet pour développement en série entière
h i ∞
X h i tk
E etX = 1 + E Xk .
k=1
k!
h i
Ainsi, pour connaître les moments (c’est-à-dire les valeurs E X k ) de X, il suffit de faire un
développement limité de MX (t) au voisinage de 0.
On pose α = a+b
2 . Les formules classiques sur les développements limités donnent :
! ! −1
1 α2 2 n n3 3 1 1 3
MX (t) = 1 + αt + t + o t2 t+ t + o t3 t+ t + o t3
n 2 2 8×6 2 8×6
! !
α2 2 n2 1
= 1 + αt + t + o t2 1 + t2 + o t2 1 − t2 + o t2
2 24 24
(a + b)2 n2 − 1
!
t2
= 1 + αt + + + o t2 .
2 2 12
En identifiant les coefficients, on trouve bien
2
a+b a+b n2 − 1
h i
2
E [X] = et E X = + .
2 2 12
Donc la variance est bien celle donnée dans l’exercice.
On peut retrouver la formule donnant la somme des carrés des n premiers entiers, en prenant
a = 1, b = n et en remarquant que dans ce cas,
n 2 !
n2 − 1 n 2n2 + 3n + 1
n+1 n (n + 1) (2n + 1)
X h i
2 2
k =n×E X =n + = = .
k=1
2 12 6 6
On pourrait, bien sûr procéder de la même manière pour calculer la somme des cubes, il
faudrait alors faire un développement limité à l’ordre 3 de MX (t) (ce qui n’est pas beaucoup
plus long car il suffit de rajouter le terme d’ordre 3 dans l’exponentielle).
Remarque 34. Il y a bien sûr d’autres façons de faire. Rien qu’en restant avec ce point de vue
probabiliste, on aurait ici pu calculer la fonction génératrice des probabilités (car X est à valeurs
entières) et trouver son moment d’ordre 2 en utilisant sa dérivée seconde en 1.
Sans utiliser de probabilité, il existe beaucoup de méthodes élémentaires. Mais en général le
problème de la somme des puissances des entiers consécutifs est un problème qui n’est pas si
simple. Vous pouvez, par exemple, consulter la page Wikipedia sur les nombres de Bernoulli si
cela vous intéresse.
Corrigé de l’exercice 2.4 Il suffit de remarquer que, si U a la loi uniforme sur [0 ; 1], alors
V := a + b(b − a + 1) U c a la loi uniforme sur Ja ; bK. Une possibilité de mise en œuvre en Scilab
est la suivante.
function U = runif_int (m ,n ,a , b )
U = a + floor (( b - a +1) * rand (m , n ) ) ;
endfunction
Chacun des événements de l’union disjointe a pour probabilité pk (1 − p)n−k . Il ne reste qu’à
compter le nombre de parties à k éléments de l’ensemble à n éléments J1 ; nK, ce qui, par
n
définition est k . Pour l’espérance de X, il suffit d’utiliser la linéarité :
n
X
E [X] = E [Yk ] = np.
k=1
Pour la variance, par indépendance,
n
X
Var [X] = Var [Yk ] = np (1 − p) .
k=1
function Y = rbernoulli (m ,n , p )
Y = double ( rand (m , n ) < p ) ;
endfunction
Ici, on a utilisé la fonction double pour convertir les booléens en flottants à double précision.
Ce n’est pas obligatoire et même superflu dans la plupart des cas.
2. On utilise la définition. Si l’on ne cherche pas à vectoriser, voici une première solution avec
boucles, qui n’est pas très efficace en Scilab mais a le mérite d’être assez simple.
function Y = r b i n o m i a l e _ a v e c _ b o u c l e s (m ,n ,r , p )
Y = zeros (m , n ) ; // pr é allocation
// parcours de Y
for j = [1: n ]
for i = [1: m ]
Y (i , j ) = sum ( rand (1 , r ) < p ) ;
end
end
endfunction
Si l’on cherche à vectoriser, il faut en fait créer un tableau de variables de Bernoulli en 3 di-
mensions, sommer suivant la première dimension, et effacer la dimension inutile (la première)
en utilisant la fonction matrix qui sert à redimensionner une matrice.
function Y = rbinomiale (m ,n ,r , p )
bern = ( rand (r ,m , n ) < p ) ;
Y = matrix ( sum ( bern , " r " ) , m , n ) ;
endfunction
U ≤ F (k) .
function P = binomiale_probas (p , r )
// Calculer la loi B (r , p ) sous la forme d ' un
// tableau à r +1 é l é ments
P = zeros (1 , r +1) ;
P (1) = (1 - p ) ^ r ;
for i = [1: r ]
P ( i +1) = P ( i ) * (r - i +1) / i * p /(1 - p ) ;
end
endfunction
function Y = rbinomiale2 (m ,n ,r , p )
// simulation de la loi binomiale par l ' inverse
// de la fonction de r é partition
P = cumsum ( binomiale_probas (p , r ) ) ;
// /!\ Des valeurs trop elevees de r
// entrainent des valeurs " egales " dans P
// et donc une erreur dans dsearch
Y = dsearch ( rand (m , n ) , P ) ;
endfunction
Comme la fonction
s 7→ 1 + s + · · · + sk−1
est croissante (pour s > 0), on peut utiliser le théorème de convergence monotone avec la
mesure de comptage :
∞
GX (s) − 1 X
lim = lim pk 1 + s + · · · + sk−1
s↑1 s−1 s↑1
k=1
∞
X
= lim pk 1 + s + · · · + sk−1
s↑1
k=1
X∞
= kpk .
k=1
et par hypothèse de récurrence, cette formule est encore vraie en s = 1. On raisonne ensuite
comme ci-dessus, par convergence monotone :
(n) (n) ∞
GX (s) − GX (1) X sk−n+1 − 1
lim = lim pk (k(k − 1) · · · (k − n + 1))
s↑1 s−1 s↑1
k=n+1
s−1
∞
X
= lim pk (k(k − 1) · · · (k − n + 1)) 1 + s + · · · + sk−n
s↑1
k=n+1
∞
X
= lim pk (k(k − 1) · · · (k − n + 1)) 1 + s + · · · + sk−n
s↑1
k=1
X∞
= pk (k(k − 1) · · · (k − n + 1)(k − n)) .
k=1
ceci est encore valable si tous les moments E [X] , E X 2 , . . . , E [X n ] sont finis
Au passage,
n+1
mais E X = +∞.
3. Le calcul de la variance se fait très simplement.
h i
Var [X] = E X 2 − (E [X])2 = E [X (X − 1)] + E [X] − E [X]2 .
Puis il suffit de remplacer E [X] par G0X (1) et E [X (X − 1)] par G00X (1).
T = inf {k ≥ 1 | Yk = 1} .
{T = k} = {Y1 = 0, Y2 = 0, . . . , Yk−1 = 0, Yk = 1} ,
d’où le résultat, par indépendance. Au passage, il serait en théorie possible que T soit égale à
+∞, si toutes les variables de Bernoulli étaient nulles. Comme ∞ k−1 = 1, ceci n’arrive
P
k=1 pq
presque sûrement jamais.
2. On calcule la fonction génératrice avec la série géométrique. Pour tout s ∈ [0 ; 1],
∞
X ps
GT (s) = pq k−1 sk = .
k=1
1 − qs
2pq
G00T (s) = ,
(1 − qs)3 )
donc
2q
E [T (T − 1)] = ,
p2
puis
2q 1 1 q
Var [T ] = 2
+ − 2 = 2.
p p p p
Corrigé de l’exercice 3.5
1. Soit k ≥ 1. En conditionnant successivement et en utilisant la propriété de Markov, on trouve :
function Y = rgeom (m ,n , p )
// Pre - allocation de Y
Y = zeros (m , n ) ;
// Parcours de Y
for j = [1: n ]
for i = [1: m ]
// simulation avec boucle tant que
k = 0; // nombre d ' essais
succes = %f ; // false
while (~ succes ) // ~ pour n é gation
k = k + 1;
if ( rand () < p ) // succes
Y (i , j ) = k ;
succes = %t ; // true
end
end
end
end
endfunction
ln (U ) ln (U )
n o
b c+1=k = k−1≤ < k = q k−1 ≥ U > q k
ln (q) ln (q)
Ainsi,
ln (U )
P b c + 1 = k = q k−1 − q k = q k−1 p,
ln (q)
donc b ln(U )
ln(q) c + 1 suit bien la loi géométrique de paramètre p.
3.
function Y = rgeom2 (m ,n , p )
Y = floor ( log ( rand (m , n ) ) / log (1 - p ) ) + 1;
endfunction
k=0
k!
Finalement,
λk
P [Xn = k] −−−→ e−λ = P [N = k] .
n→∞ k!
Corrigé de l’exercice 3.8
1. Soit f une fonction mesurable positive. Par définition,
n n n
" !# Z Z !
Pn
xi λn e−λ xi
X X Y
E f Xi = ··· f i=1 1{xi ≥0} dxi .
i=1 i=1 i=1
x0n n−1
Z Z
0 0 0
··· 1{0≤x0 ≤···≤x0 0
} dx1 dx2 · · · dxn−1 = ,
1 n−1 ≤xn (n − 1)!
En posant Xi = − log(U i)
λ , on obtient des variables indépendantes de loi exponentielle de
paramètre λ. Finalement, P (N ≥ n) = P (Z ≤ 1), où Z suit la loi Γ (n, λ).
3. Si n ≥ 2, on obtient en intégrant par parties,
xn−1 n −λx
Z 1
P (N ≥ n) = λ e dx
0 (n − 1)!
λn−1 −λ xn−2 n−1 −λx
Z 1
=− e + λ e dx.
(n − 1)! 0 (n − 2)!
On en déduit que
λn−1 −λ
P (N ≥ n) − P (N ≥ n − 1) = − e ,
(n − 1)!
puis que
λn−1 −λ
P (N = n − 1) = e ,
(n − 1)!
donc N suit la loi de Poisson de paramètre λ.
4. Une mise en œuvre possible de cet algorithme est la suivante :
break ;
end
nb_unifs = nb_unifs + 1;
end
// nb_unifs suit la loi poisson ( lambda )
// fin de la simulation
Y (i , j ) = nb_unifs ;
end
end
endfunction
Continuité à droite Comme F est croissante, il suffit de montrer que pour tout réel x,
1
F x+ −−−→ F (x) ,
n n→∞
Le fait que F admette des limites à gauche en tout point est une conséquence de sa
monotonie.
4. Soit U un ouvert. On écrit G
U= Ui ,
i∈I
où les Ui sont ses composantes connexes (donc disjointes). Étant ouvertes (et fermées) dans
l’ouvert U , elles sont ouvertes dans R et comme ce sont des connexes de R, ce sont des
intervalles ouverts. Chacune d’entre elles possède un rationnel. Comme elles sont disjointes
deux à deux, on peut injecter l’ensemble d’indices I dans l’ensemble dénombrable Q.
6. La fonction F caractérise la loi de X sur les intervalles ouverts d’après le point précédent,
donc sur les unions dénombrables disjointes de tels intervalles, c’est-à-dire tous les ouverts.
Comme l’ensemble des ouverts est une famille de parties stable par intersections finies qui
engendre la tribu borélienne, par le lemme de classe monotone, F caractérise la loi de X sur
la tribu borélienne.
donc
inf x ∈ R F (x) ≥ u0 ≥ inf {x ∈ R | F (x) ≥ u} ,
2. En utilisant les fonctions cumsum et dsearch, on peut vectoriser le code et obtenir un pro-
gramme très efficace.
function Y = rfinite (m , n , P )
C = cumsum ( P ) ;
U = rand (m , n ) ;
Y = dsearch (U , C ) ;
endfunction
p = %pi / 4;
q = 1 - p;
eps = 0.01;
alpha = 0.05;
Fn_m1 = cdfnor ( " X " , 0 , 1 , 1 - alpha , alpha ) ;
n_min = p * q * Fn_m1 ^2 / eps ^2;
disp ( n_min ) ;
function Y = inv_rep (m , n )
Y = rand (m , n ) .^ (1. / 3.) ;
endfunction
2. On doit trouver une fonction de densité g d’une loi connue et facilement simulable, et une
constante c la moins grande possible telle que pour tout x ∈ [0 ; 1], f (x) ≤ cg(x). On va
utiliser ici la loi uniforme sur [0 ; 1] (donc ici g est constante et égale à 1) et c = 3.
Pour simuler X, on commence par tirer V suivant la loi uniforme sur [0 ; 1] avec rand, puis
U une autre variable uniforme sur [0 ; 1] indépendante de V . On accepte V comme un tirage
de X si
f (V ) 3V 2
U≤ = = V 2.
cg (V ) 3×1
function Y = rejet (m , n )
Y = zeros (m , n ) ;
for i = 1: m
for j = 1: n
while %t
essai = rand () ;
valeur_test = rand () ;
if valeur_test <= essai ^2
break ; // on accepte
end
end
Y (i , j ) = essai ;
end
end
endfunction
3. Le nombre d’itération dans la boucle while est aléatoire, de loi géométrique de paramètre 1c
donc son espérance est c = 3. Si l’on demande un nombre N important de valeurs, d’après la
loi des grands nombres, le nombre moyen d’itérations dans la boucle sera proche de 3. Comme
chaque boucle while fait appel deux fois à la fonction rand, cela fait en moyenne 6 appels à
rand par valeur renvoyée.
C = [3 1 ; 1 2];
A = chol ( C ) ;
mu = [ -2 ; -3];
n = 1000;
N = rand (2 , n , " normal " ) ;
X = A*N;
X (1 ,:) = X (1 ,:) + mu (1) ;
X (2 ,:) = X (2 ,:) + mu (2) ;
clf () ;
plot ( X (1 ,:) , X (2 ,:) , " r . " )
[Q , D ] = spec ( C ) ;
u = Q (: ,1) * sqrt ( D (1 ,1) ) ;
xarrows ([ mu (1) , u (1) ] , [ mu (2) , u (2) ]) ;
v = Q (: ,2) * sqrt ( D (2 ,2) ) ;
xarrows ([ mu (1) , v (1) ] , [ mu (2) , v (2) ]) ;
Z = zeros (2 , t_max ) ;
for i = [1:4]
Z (1 , Alea == i ) = D (i ,1) ;
Z (2 , Alea == i ) = D (i ,2) ;
end
Positions = cumsum (Z , " c " ) ;
plot ( Positions (1 ,:) , Positions (2 ,:) ) ;
Corrigé de l’exercice 7.6 Voici un exemple de ce que l’on pouvait faire. J’ai rangé les deux
fonctions principales dans un fichier de fonctions galtonwatson.sci que voici.
// galtonwatson . sci
// fichier de fonctions pour des experiences
// sur les processus de galton - watson
function Z = galton_watson (n , xi )
// renvoie une simulation de
// ( Z_0 , Z_1 , ... , Z_n )
// xi ( N ) doit ê tre un vecteur al é atoire
// de taille N compose d ' entiers naturels
Z = zeros (1 , n +1) ; Z (1) = 1; // Z (1) = Z_0
for j = 1: n
Z ( j +1) = sum ( xi ( Z ( j ) ) ) ;
end
endfunction
Pour la suite, on peut séparer en plusieurs scripts. En voici pour le tracé d’une dizaine de courbes,
le fichier de script s’appelle gw_trace.sce. Au début du script, on appelle le fichier de fonction
pour en avoir toujours la dernière version (et être sûr qu’il soit chargé).
// gw_trace . sce
// Script pour experimenter sur les
// processus de Galton - Watson
exec ( ' galtonwatson . sci ') ;
// choix de la loi
eta = [.2 .4 .4];
function Y = xi ( n )
Y = support_fini (1 ,n , eta ) ;
endfunction
// un premier echantillon
n = 15
disp ( galton_watson (n , xi ) )
// Plusieurs experiences
num_exp = 20;
Z = zeros ( num_exp , n +1) ;
for i = 1: num_exp
Z (i ,:) = galton_watson (n , xi ) ;
end
// Trace des num_exp trajectoires
scf (1) ; clf () ;
plot (Z ') ; // trace chaque colonne de Z '
La figure 1 montre un exemple de ce que l’on pouvait obtenir. Pour la suite de l’exercice, on
// gw_extinction . sce
exec ( ' galtonwatson . sci ') ;
// extimation de la probabilite d ' extinction
// au bout de n generations
n = 15
// choix de la loi
eta = [.2 .4 .4];
function Y = xi ( n )
Y = support_fini (1 ,n , eta ) ;
endfunction
// estimation de P ( Z_ {15} = 0)
num_exp = 2000;
cpt_vivant = 0;
GW = zeros (1 , n +1) ;
for i = 1: num_exp
GW = galton_watson (n , xi ) ;
if ( GW (16) ~= 0)
cpt_vivant = cpt_vivant + 1;
end
end
disp ( " fr é quence empirique pour " ) ; disp ( num_exp ) ; disp ( " lancers←-
: ");
disp ( cpt_vivant / num_exp ) ;
// Comparaison avec la valeur theorique
function y = f ( x )
y = (1. + 2. * x + 2. * x .^2) / 5.;
endfunction
qn = 0;
for i = 1: n
qn = f ( qn ) ;
end
disp ( " valeur theorique : " ) ; disp (1 - qn ) ;
On devrait trouver des valeurs « assez proches » l’une de l’autre mais pour avoir une idée plus
théorique de l’ordre de grandeur de l’écart, il faudrait davantages de renseignements sur la loi
de Z15 (par exemple une majoration de son écart-type).
Il n’est pas très difficile de changer de loi de reproduction, il suffit simplement de changer la
fonction xi. Voici, par exemple comment on pouvait choisir η comme étant la loi de Poisson de
paramètre 3 en utilisant la fonction prédéfinie grand. On a dû réduire le nombre de générations
à 12 pour éviter un dépassement de la pile.
// gw_trace_poisson . sce
exec ( ' galtonwatson . sci ') ;
// loi de reproduction
function Y = xi ( n )
Y = grand (1 , n , " poi " , 3)
endfunction
// Nombre de generations
n = 12;
num_exp = 20;
Z = zeros ( num_exp , n +1) ;
for i = 1: num_exp
Z (i ,:) = galton_watson (n , xi ) ;
end
// Trace des num_exp trajectoires
On peut observer dans la figure 2 que les ordres de grandeurs ne sont pas les mêmes que dans
l’exemple précédent.
Figure 2 – 20 trajectoires de (Z0 , Z1 , . . . , Z12 ) dans le cas où la loi de reproduction est la loi de
Poisson de paramètre 3.
Références
[BC07] Bernard Bercu and Djalil Chafaï. Modélisation stochastique et simulation. Dunod,
2007.
[BP12] Marc Briane and Gilles Pagès. Analyse, Théorie de l’intégration, Convolution et Trans-
formation de Fourier, 5ème éd. Vuibert, Paris, 365p, 2012.
[Can13] Bernard Candelpergher. Théorie des probabilités. Calvage & Mounet, 2013.
[Dur10] Rick Durrett. Probability : theory and examples. Cambridge university press, 2010.