Fichiers
Les différents fichiers nécessaires sont ici.
Simulation de lois
Ecrivez une classe Alea qui contient les méthodes suivantes:
int Bernoulli(double p)
qui simule une variable aléatoire de Bernoulli de paramètre p
int Dice()
qui lance un dé (non truqué)
double Exponentielle(double lambda)
qui simule une variable
aléatoire exponentielle de paramètre lambda
ìnt Poisson(double lambda)
qui simule une variable de Poisson
de paramètre lambda
int Binomiale(int n, double p)
qui simule une variable aléatoire
binomiale de paramètre n,p
int Geometrique(double p)
qui simule une variable aléatoire
géométrique de paramètre p
double Normale()
qui simule une variable aléatoire normale.
On utilisera pour tout cela la fonction Math.random
qui fournit un
nombre entre 0 (compris) et 1 (non compris) dont on supposera la
distribution uniforme (malgré les réserves vues en cours et dans ce TP)
Attention Il y a deux typos dans le cours (au tableau), pour la
loi de Poisson et la loi Normale.
Il faut remplacer le 1/lambda par lambda dans l'algorithme pour Poisson
et le 1/2 par 2 dans l'algorithme final pour la loi Normale.
Le PDF sur le web contient les versions correctes.
Espérance et Variance
En utilisant les fonctions définies précédemment, calculer
empiriquement l'espérance et la variance des différentes lois (on
prendre p = 0.11, n = 20, lambda = 2.2).
- N'oubliez pas de tester aussi la loi uniforme !
- Pour obtenir l'espérance, on fera 1000 tirages successifs, et on calculera la moyenne des résultats.
La loi des grands nombres nous dit que la moyenne converge en effet
vers l'espérance.
- Pour calculer la variance, on ne peut pas utiliser
la formule du cours, puisqu'on ne connaît pas a priori la moyenne, on
a uniquement une estimation m de la moyenne.
Pour obtenir une bonne estimation de la variance, on calculera la
moyenne du carré de la différence entre X et m, mais en divisant par
n-1 (donc 999) et non pas par n. L'estimation prend en compte le fait
que le nombre de données disponibles n'est plus n mais n-1, puisqu'il
a fallu estimer la moyenne. On en parlera un peu plus dans le cours de
statistiques.
- Comparer avec la théorie en calculant l'erreur absolue (valeur
approchée moins valeur réelle)
Histogrammes
On va comparer les résultats obtenus par 1000 tirages aléatoires avec
les résultats théoriques.
Pour faire des histogrammes, on examinera le fichier hist.plot
qui
permet d'afficher deux histogrammes, correspondant à deux fichiers,
côte à côte.
Pour pouvoir l'utiliser, on a besoin de connaître le "pas" des fichiers
data.1
et data.2
qui est contenu dans la variable step
. Il
faudra donc la changer si nécessaire.
Si on veut afficher un seul histogramme plutôt que deux, on enlèvera
la derniere ligne et la virgule sur la ligne précédente.
Variables discrètes
- Ecrire une fonction qui à partir d'un tableau d'entiers affiche
combien de fois chaque nombre apparaît dans la liste.
- A partir de cette fonction, pour chacune des lois Bernoulli, Binomiale, Géométrique et Poisson:
- Tirer 1000 valeurs suivant la loi, et utiliser la fonction
précédente pour construire un premier histogramme.
- Construire un deuxième histogramme qui dit, pour chaque entier k,
combien de fois en moyenne il doit apparaître sur 1000 tirages
(c'est donc 1000 P[X=k])
- Utiliser gnuplot pour afficher les deux histogrammes côte à côte
- Afficher les deux histogrammes correspondant à Poisson et Binomial
côte à côte. Qu'observe-t-on ?
On cherche maintenant à simuler le nombre de buts marqués
dans un match du championnat de France de ligue 1 de football par une
loi de Poisson de paramètre 2.516 (nombre de buts moyen par
match sur la saison 2011-2012).
- Ecrire dans un fichier l'histogramme correspondant à l'exécution
de 380 (38 journées, 10 rencontres par journées) lancers d'une loi
de Poisson de paramètre 2.516. Ecrire dans un deuxième fichier les statistiques
officielles pour la saison 2011-2012, ci-dessous et afficher les deux
côte à côte.
Buts marqués |
Nombre de matches |
0 |
27 |
1 |
71 |
2 |
114 |
3 |
78 |
4 |
55 |
5 |
21 |
6 |
6 |
7 |
3 |
8 |
4 |
9 |
1 |
Variables continues
- Ecrire une fonction qui à partir d'un tableau de réels et d'une
taille de pas donnée, regroupe les valeurs par paquets de la taille du
pas, puis affiche combien de réels sont dans chaque paquet.
Par exemple, si le tableau est [0.3, 0.6, 0.2, 0.8, 0.1, 0.9, 0.9,
0.92] et que le pas est 0.25, le résultat sera
0 2
0.25 1
0.5 1
0.75 4
puisqu'il y a 2 nombres entre 0 et 0.25, 1 entre 0.25 et 0.5, etc.
- Pour chacune des lois Uniforme, Exponentielle et Normale:
- Tirer 1000 valeurs suivant la loi, et utiliser la fonction
précédente pour construire un premier histogramme.
- Construire un deuxième histogramme qui dit, pour chaque intervalle I,
combien de fois en moyenne il doit apparaître sur 1000 tirages
(Ce n'est pas très difficile pour Uniforme et Exponentielle.
Pour la loi Normale, on approchera par 1000 fois la densité au point x de
début de l'intervalle)
- Utiliser gnuplot pour afficher les deux histogrammes côte à côte (Pensez à changer le paramètre
step
dans le fichier plot)