Master d’Astronomie et d’Astrophysique M2-R
PROJET INFORMATIQUE 2013–2014
Jacques Le Bourlot, Didier Pelat
5 juin 2014
1 Objectif du projet
Le projet doit permettre aux étudiants de programmer quelques unes des méthodes
classiques dont le but est de générer une suite de nombres pseudo-aléatoires censée
provenir d’une loi de probabilité donnée. On mettra plus particulièrement l’accent sur
les simulations de Monte-Carlo par chaîne de Markov ou méthodes MCMC.
La loi de probabilité simulée rend souvent compte d’une loi physique, comme en
physique statistique, ou permet de réaliser une intégration ou encore une optimisa-
tion (recherche d’un maximum global). Cette simulation peut également permettre de
générer des bruits instrumentaux afin de valider, par exemple, des algorithmes de dé-
tection.
2 Simuler des variables aléatoires
2.1 Rappel sur les variables aléatoires
Une variable aléatoire Xest caractérisée par sa fonction de répartition F. Cette
fonction est égale, par définition, à la probabilité pour que Xne dépasse pas un seuil x.
On a
F(x)déf
= Pr(Xx).(1)
On caractérise également Xpar sa densité de probabilité f, si elle existe. On a
f(x) = dF
dx, F (x) = Zx
−∞
f(u) du. (2)
La forme explicite de Fou fdétermine la loi suivie par X, par exemple : la loi uni-
forme, la loi exponentielle ou la loi normale. Pour ces trois cas on a respectivement
F(x) =
0,si x0
x, si 0x1
1,si x1
, f(x) = (1,si x[0,1]
0,si x6∈ [0,1] ,(3)
F(x)=1eλx, f(x) = λeλx ,(4)
F(x) = 1
21 + erfxµ
2σ, f(x) = 1
2πσ e1
2(xµ
σ)2,(5)
Les quantités λ,µet σsont les paramètres des lois. La loi uniforme entre 0 et 1 n’a pas
de paramètres, c’est un cas particulier de la loi uniforme entre aet b. Pour simplifier
1
l’écriture de la densité il est pratique d’utiliser l’indicatrice 1A(x)qui est égale à 1 si
xAet à 0 dans le cas contraire. L’ensemble Aest le support de la loi. La densité de
la loi uniforme entre 0 et 1 s’écrit alors f(x) = 1[0,1](x). En toute rigueur, on devrait
écrire pour la loi exponentielle f(x) = λeλx1[0,[(x)On a introduit pour la fonction
de répartition de la loi normale, la fonction erf qui est, par définition, égale à
erf(x)déf
=2
πZx
0
et2dt. (6)
Elle s’obtient en Fortran, version 2008, par un appel à la fonction erf. Par exemple :
Real :: n, n_sigma_error
n = 3.0
n_sigma_error = erf(n/Sqrt(2.0))
dont le résultat est l’intégrale R3
3
1
2πe1
2t2dt.
Pour indiquer qu’une variable aléatoire suit une loi donnée on écrit, par exemple
pour chacun des trois cas évoqués ci-dessus
X∼ U(0,1), X ∼ Exp(λ), X ∼ N(µ, σ2).
Deux variables possèdant la même fonction de répartition, sauf peut-être en leurs
points de discontinuités, sont dites égales en loi. On note XLoi
=Y, mais souvent on
indique simplement X=Yétant sous-entendu qu’il s’agit d’une égalité en loi entre
variables aléatoires.
2.2 Trois méthodes
Il existe trois méthodes classiques pour générer des nombres issus d’une loi donnée.
1. La méthode par inversion.
2. La méthode du rejet de von Neumann.
3. La méthode de Monte-Carlo par chaînes de Markov dite MCMC.
Toutes ces méthodes nécessitent l’existence d’un générateur des nombres aléatoires
suivant la loi uniforme entre 0 et 1. Nous n’étudierons pas les diverses méthodes per-
mettant d’atteindre ce but, nous nous contenterons de l’examen des procédures mises
à disposition par les divers languages informatiques, ici le Fortran 90, censées déliver
des nombres suivant la loi uniforme U(0,1).
2.3 Nombres pseudo-aléatoires uniformes
Le language Fortran 90 et ses versions ultérieures intègre dans sa norme le calcul
de nombres pseudo-aléatoires suivant la loi uniforme entre 0 et 1. Ce calcul se fait par
l’intermédiaire de l’instruction
Call Random_number(harvest=tableau)
Le mot-clef harvest est une étiquette permettant d’identifier la variable tableau, sa
présence est facultative. La variable tableau est destinée à recevoir les valeurs calculées
par le programme Call Random_number.
Les générateurs de nombres aléatoires doivent pouvoir produire : soit toujours la
même série de nombres (en phase de test, par exemple) ; soit une série différente à
chaque lancement du programme (en phase d’exploitation). En Fortran 90 cette possi-
bilité est contrôlée par un appel au sous-programme Random_seed. Si l’appel se fait
sans arguments :
2
Call Random_seed
la série est différente d’une exécution du programme à une autre et ce dernier choisit
lui-même les paramètres de la simulation. Cependant cette norme n’est pas toujours
correctement implémentée et il y a lieu de vérifier que le système utilisé y est fidèle.
Si l’on désire contrôler soi-même la séquence de nombres au hasard, il faut fournir un
tableau : seed de graines de départ dont la taille dépend de l’implémentation partic-
ulière du compilateur fortran. On obtient ce contrôle grâce à deux appels successifs à
Random_seed :
Integer :: k
Integer, Allocatable, Dimension( : ) : : seed
Call Random_seed(size=k)
Allocate(seed(k))
seed = [s1, s2,...,sk]
Call Random_seed(put=seed(1: k))
Si l’on désire connaître le tableau des graines utilisées par le programme, il faut alors
inclure les appels suivants :
Call Random_seed(size=k)
Allocate(seed(k))
Call Random_seed(get=seed(1: k))
Print,seed
Les étiquettes size,put ou get sont obligatoires. Une bonne pratique consiste à imprimer
et à sauvegarder les graines utilisées au début et à la fin du programme. De cette façon
on aura la possibilité de recommencer le même calcul (pour la phase de mise au point)
ou de le poursuivre.
On suppose, à partir de maintenant, que l’on dispose d’une variable aléatoire U
suivant la loi uniforme entre 0 et 1. La variable Uest un être mathématique mais pour
nous, d’un point de vue pratique, c’est un programme.
2.4 La méthode par inversion
2.4.1 Cas des lois continues
Un résultat classique de la théorie du changement de variables aléatoires, dit que
si Fdésigne la fonction de répartition d’une variable aléatoire continue X, alors la
variable aléatoire F(X)est uniforme entre 0 et 1.
Démonstration. On connaît la fonction de répartition Fde la variable Xqui, par définition,
est égale a :
F(x)déf
= Pr(Xx).
On désire connaître Gla fonction de répartition de la variable U=F(X).
La variable Uétant définie en tant que fonction de répartition, elle est comprise entre 0 et 1.
Pour 0u1,ona:
G(u)déf
= Pr(Uu),
= Pr(F(X)u),
= Pr(XF1(u)) ,
=FF1(u)=u .
3
Finalement :
G(u) =
0,si u0;
u, si 0u1;
1,si u1.
La variable Usuit une loi uniforme entre 0 et 1 (sa densité est constante).
On écrira F(X) = U, en donnant à l’égalité entre variables aléatoires le sens de
l’égalité en loi.
Il est alors possible d’utiliser le changement de variables afin de générer des nom-
bres Xsuivant une loi caractérisée par F. Il suffit d’écrire : X=F1(U), à condition
que la fonction Fsoit bijective, ce qui est le cas pour les variables continues. D’un
point de vue technique, cette procédure est praticable si Fest facilement inversible
numériquement.
Exemple de la loi exponentielle. À partir de sa fonction de répartition F(x)=1
eλx, on en déduit :
U= 1 eλX
eλX = 1 U
λX = ln(1 U)
X=1
λln(1 U)
X=1
λln(U).
La dernière égalité ne doit pas surprendre car les variables 1Uet Upossèdent la
même fonction de répartition et sont, par conséquent, égales en loi. Ainsi, pour générer
une variable aléatoire suivant la loi exponentielle de paramètre λ, il suffit d’avoir à
disposition un générateur de nombres suivant la loi exponentielle de paramètre λ0= 1
et de divisier les résultats par λ.
2.4.2 Cas des lois discrètes
Considérons le cas d’une variable aléatoire discrète Xprenant les valeurs Xkavec
la probabilité pk:Pr(X=Xk) = pkpour kN. Il est facile de simuler la variable X
à l’aide d’une variable Uuniforme entre 0 et 1, en remarquant que d’après la définition
de la fonction de répartition de la loi uniforme
Pr(F(Xk1)< U F(Xk)) = F(Xk)F(Xk1) = pk.
La méthode consiste alors à générer une variable Uuniforme entre 0 et 1, repérer l’in-
tervalle (Xk1, Xk)F(Xk1)< U F(Xk)et d’affecter à Xla borne supérieure
de (Xk1, Xk). La valeur Xkest donc la plus petite valeur xtelle que F(x)U. Si
on introduit l’inverse généralisée F(1) de la façon suivante
F(1)(u) = inf{x|F(x)u},(7)
on peut alors étendre la méthode par inversion au cas discret et écrire
Xk=F(1)(U).(8)
4
Comme l’inverse généralisée coïncide avec l’inverse si Fest continue, la validité de
cette définition s’étend à toutes les variables aléatoires quelles soient discrètes ou con-
tinues.
Exemple : la loi géométrique. La loi géométrique indique le rang du premier succès
dans une suite d’épreuves indépendantes de Bernoulli de paramètre p(jeu de pile ou
face). Ce paramètre est la probabilité de succès d’une épreuve. Si la variable Xsuit
une loi géométrique, on a Pr(X=k) = p(1 p)k1,k= 1,2, . . . . Sa fonction de
répartition est F(x)=1(1 p)bxc. Afin de simuler X, on écrit
U= 1 (1 p)bXc,
(1 p)bXc= 1 U=U ,
bXcln(1 p) = ln(U),
bXc=ln(U)
ln(1 p).
Le point délicat est d’inverser, au sens généralisé, la fonction bxc=y. D’après la
définition (7) de l’inverse généralisé, xest la plus petite valeur telle que bxc ≥ y, mais
bxcétant un entier, xest alors le plus petit entier supérieur ou égal à y, autrement
dit dye. On obtient finalement
X=ln(U)
ln(1 p).
2.5 La méthode du rejet de von Neumann
La méthode du rejet, ou méthode par réjection (voir [9]), consiste à simuler une
variable aléatoire Xde densité connue fà partir d’une autre variable Yde densité
gdont la simulation, par exemple par la méthode d’inversion, est facile à mettre en
œuvre. La densité gdoit pouvoir, après multiplication par une constante M, majorer f
pour tout xde son support
x, g(x)6= 0,f(x)
g(x)M . (9)
La densité fest la loi cible et gest la loi enveloppe. La procédure est la suivante
Méthode de von Neumann
1. On génère Ysuivant la loi g, facile à simuler. Soit yla valeur trouvée.
2. On génère ud’après la variable Uqui suit la loi uniforme entre 0 et 1. Les variables
Yet Udoivent être indépendantes.
3. Si u1
M
f(y)
g(y), alors x=y, sinon on retourne à l’étape 1.
Afin de prouver que la variable Xgénérée de cette façon, suit effectivement la loi
de densité f, il faut calculer la probabilité conditionnelle PrYx|U1
M
f(Y)
g(Y)
donnant la probabilité de succès du test à l’étape 3de la procédure, et montrer qu’elle
est égale à Pr{Xx}.
5
1 / 18 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !