Skip to content
Snippets Groups Projects
Commit 4b513875 authored by Orestis's avatar Orestis
Browse files

ajout tp

parent 06eb698b
No related branches found
No related tags found
3 merge requests!23Borne intégration,!21coeff complex,!2Pull request
35615
51965
51296
28625
22181
29834
41933
35022
24714
30536
23199
47129
17358
48716
37329
20876
1308
32744
21453
6322
6485
25548
11497
58371
32155
52743
15471
39931
58412
23565
33543
50665
39109
64383
13966
35311
887
23126
18155
62987
62114
28232
35813
20959
37997
49876
17006
40319
45228
18583
11800
5974
33403
50391
4285
21517
55022
50069
54667
64573
18287
62400
48965
6130
29827
61357
56154
23522
1612
4692
44765
51324
25794
54508
20735
45716
62118
52614
63348
55824
9637
38145
8612
45824
41595
41991
40585
59354
10880
25832
42549
5744
55747
44899
44874
61679
62478
18812
28469
63419
3002
12360
38705
38823
1657
3012
40244
58267
35663
945
63132
11055
62916
13358
4022
23329
38062
88
35341
57158
20707
7656
45116
13623
57791
65178
10323
62612
29841
34314
58492
56112
11124
32629
55422
41218
14860
48
26807
4158
30446
50432
16630
43399
64283
1489
8062
39207
26666
25877
12246
32527
43066
46547
22461
59654
25986
31380
1920
27484
57867
37140
17273
52498
34418
41534
38659
17412
49843
3678
61564
38767
19195
51475
6161
25285
47726
4451
1763
54952
14017
56429
31850
31091
5294
57132
19526
3747
21100
23598
7874
19055
29267
65172
27908
8352
53673
31623
34199
9508
61726
45030
42212
22494
12299
15936
23111
5125
55328
21898
30668
7222
59066
42993
23485
58933
26365
5516
28757
6114
60759
60141
16775
52226
27325
56714
56602
5206
33309
36266
17251
17137
54721
54982
36766
64436
23571
6665
52164
10818
31027
41558
43908
3352
49044
19970
36576
44880
799
50405
\ No newline at end of file
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage{amsfonts,bm,amsmath,amssymb,graphicx,verbatim}
\usepackage{cancel,url}
\newcommand{\dd}{\mathrm{d}}
\newcommand{\hf}{\hat{f}}
\newcommand{\real}{\mathbb{R}}
\newcommand{\integer}{\mathbb{Z}}
\newcommand{\definition}{\textbf{Definition }}
\newcommand{\exemples}{\textbf{Exemples }}
\newcommand{\remarque}{\textbf{Remarque }}
\newcommand{\proprietes}{\textbf{Propriétés }}
\newcommand{\propriete}{\textbf{Propriété }}
\title{Travaux pratiques: Génération de nombres aléatoires}
% \author{Orestis Malaspinas}
\date{A rendre pour le 01.06.2016}
\begin{document}
\maketitle
\section*{Travaux pratiques: Génération de nombres aléatoires}
Les nombres aléatoires sont utilisés dans un vaste champs d'applications (sécurité informatique, simulations,
prise de décision, ...). Le but de ce TP est de faire un premier pas vers la compréhension de la problématique de
la génération de nombres pseudo-aléatoires avec un ordinateur.
\section*{Générateurs congruentiels linéaires}
Les générateurs congruentiels sont des générateurs assez simples et donnent des nombres aléatoires d'assez bonne qualité.
La forme générale de ces générateurs est
\begin{equation}
X_{i+1}=(aX_i+c)\mod m,
\end{equation}
$a$, $c$, $m$ sont les paramètres dont la qualité des nombres aléatoires dépendront et $X_0$ est appelé le germe.
\begin{enumerate}
\item Cette congruence est de la forme $X_{i+1} = f(X_i)$. Si $0\leq X_i < n$ et $0\leq f (X_i ) < n$ $\forall i$, expliquez
pourquoi cette suite va commencer à faire des cycles (en d'autres termes $\exists m \geq 0$ tel que $X_{m+\lambda} = X_{\lambda}$).
\item Créez une fonction pour générer $n$ nombres pseudo-aléatoires en appliquant une congruence linéaire avec paramètres $a$, $c$, $m$ et $X_0$.
\item Écrivez un programme qui calcule la période d’un générateur congruentiel pour un ensemble de
paramètres données. Testez-le avec $m = 10$ et essayez de trouver un $a$ et un $c$ qui vous donnent
un cycle maximal.
\item Historiquement, le générateur \texttt{RANDU} développé par \texttt{IBM} utilisait les paramètres suivants :
$a = 65539$, $c = 0$, $n = 2^{31}$ and $X_0 = 123456789$. Générez 12000 nombres aléatoires avec
cette méthode. Visualisez les résultats comme des points $(X_{i-1} , X_i)$ en deux dimensions et
$(X_{i-2}, X_{i-1} , X_i )$ dans l’espace. En Matlab/Octave, servez-vous de la fonction plot3 pour afficher les triplets.
\end{enumerate}
\section*{Générateur de Stoll--Kirckpatrick}
Le générateur de Stoll-Kirckpatrick considère que nous possédons déjà 250 nombres aléatoires de
bonne qualité codés sur $l$ bits. Ensuite, nous pouvons trouver les autres nombres de la suite avec la
formule suivante :
\begin{equation}
X_{i+1} = X_{i-249}\ \bm{xor}\ X_{i-102},
\end{equation}
$\bm{xor}$ est appliqué bit par bit dans la représentation binaire des nombres.
Prenez le fichier \texttt{aleatoire250.txt} disponible sur Cyberlearn. Ce fichier contient 250 nombres aléatoires (entre 0
et $2^{16}-1$) obtenus du site \url{http://www.random.org}. Utilisez l’algorithme ci-dessus pour en trouver 300000
nombres pseudo-aléatoires.
\begin{enumerate}
\item Testez les résultats en les affichant en deux et trois dimensions comme avant.
\item Calculez la moyenne des nombres obtenus. Comment se compare-t-elle à la moyenne théorique attendue?
\end{enumerate}
\section*{Calcul de $\pi$}
Utiliser les générateurs de nombres aléatoires précédemment implantés pour calculer $\pi$, ainsi que la fonction \texttt{rand} d'Octave/Matlab (ou
une librairie d'un langage utilisant l'algorithme Mersenne Twister, elle est disponible dans boost par exemple). Pour ce faire
il faut tirer des couples des points dont la position est aléatoire $(x,y)\in [0,1]\times[0,1]$. Il faut ensuite calculer le rapport du nombre de points
tirés qui satisfont $x^2+y^2\leq 1$ sur le nombre total de points tirés. Que doit donner ce rapport si les nombres tirés sont
tous équiprobables après un très grand nombre de tirages? Obtenez le plus grand nombre possible de décimales de $\pi$
avec les différents générateurs de nombres aléatoires. Qu'observez-vous?
\section*{Remarques}
Le travail peut-être effectué en groupe de deux, mais les rapports doivent être individuels (le code peut être identique, n'oubliez pas de mentionner
explicitement si vous avez effectué le code à deux).
Finalement, je dois pouvoir exécuter le code
afin de pouvoir reproduire les résultats présentés dans le rapport.
Déposez le rapport EN FORMAT PDF et une archive contenant le code (deux fichiers séparés)
sur le site du cours s'il vous plaît, cela simplifie mon administration (et évite les problèmes avec les étudiants qui
ne mettent pas de nom sur le rapport...).
La note sera une combinaison entre le code rendu et le rapport (moitié/moitié).
\end{document}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment