#!/usr/bin/env python # coding: utf-8 # # Python – travaux pratiques # ## Démarrage # # Il y a plusieurs manières de faire ce TP. # # 1. Une possibilité est de télécharger ce notebook (fichier `.ipynb`) en local sur votre ordinateur et de le l'ouvrir avec jupyter notebook. Il vous faut pour cela une installation de python et de jupyter. Cette installation peut se faire très simplement en utilisant la distribution [anaconda](https://www.anaconda.com/distribution/#download-section). # # 2. Une autre possibilité si python est installé sur votre ordinateur est de taper les commandes dans la fenêtre de commande (en utilisant `Spyder` ou `IPython`) et de taper vos programmes étant écrits dans votre éditeur de texte préféré. # # 3. N'OUBLIEZ PAS DE SAUVEGARDER !!! # In[1]: import numpy as np import matplotlib.pyplot as plt import scipy.stats as sps # In[2]: from TP_intro_python import * # On rappelle que l’aide Python pour une fonction appelée `fun` s’obtient en tapant : `fun?` dans la console. # ## 1. Prise en main # a) On considère n cartes numérotées de 0 à n − 1 et triées par ordre croissant. # - on supprime la première carte, # - on met la suivante à l’autre extrémité du paquet, # - on recommence jusqu’à ce qu’il n’en reste qu’une. # Ecrire un programme qui affiche la liste des cartes supprimées dans l’ordre de leurs suppressions, ainsi que la carte restante. # *Indication : on utilisera une boucle while et la récursivité n’est pas utile.* # In[5]: exo1() # b) Soit f définie par $f(x) = sin(x)/x$ si $x\neq 0$ et $f(0) = 1$. Tracer son graphe sur $[−a,a]$ en # rouge, pour $a = 20\pi$ par exemple. On pourra ajouter un titre et une légende. # Indication : $\pi$ s’obtient avec `np.pi`, la commande # # plt.plot(x,y,color="r",label="ma legende") # # affiche en rouge la courbe affine par morceaux reliant les points d’abscisses x et d’ordonnées y, la commande # # plt.legend(loc=’best’) # # affiche la légende définie plus haut avec label (en position optimale) et # # plt.title("mon titre") # # donne un titre à la figure. # In[6]: exo2() # ## 2. Loi des Grands Nombres et Théorème Central Limite # a) Afin d'illustrer la Loi des Grands Nombres, visualiser la suite $S_n = X_1+···+X_n$ pour $X_i$ une suite de variables aléatoires indépendantes de loi uniforme sur $[−1, 1]$. # # *Indication : pour $x= [x_1,\dots ,x_n]$, la commande `np.cumsum(x)` retourne le vecteur # $$[x_1, x_1 +x_2, x_1 +x_2 +x_3,\dots, x_1 +\dots+x_n]$$ des sommes cumulées des coordonnées de $x$*. # In[7]: exo3() # b) Faire de même avec des variables aléatoires $Y_i$ de loi de Cauchy, c-à-d de densité # $$\frac 1 \pi \frac 1 {1+x^2},$$ # qui s'obtiennent par $Y_i = \tan(\pi X_i /2)$. La suite $\frac {\sum Y_i}{n}$ semble t-elle converger ? Pourquoi ? # In[8]: exo4() # c) On définit les $X_i$ comme une suite de variables aléatoires indépendantes de loi uniforme sur $[−1, 1]$. Calculer la moyenne $\mu$ et l'écart-type $\sigma$ des $X_i$ et vérifier, afin d'illustrer le Théorème Central Limite, que $\sqrt{n}(S_n − \mu)/\sigma$ converge en loi, lorsque $n \rightarrow\infty$ vers $\mathcal{N}(0,1)$ : on se fixera une grande valeur de $n$, on simulera un grand nombre de fois $\sqrt{n}(S_n − \mu)/\sigma$, on en tracera l'histogramme et on le comparera à la densité $\frac 1 {\sqrt{2\pi}\sigma}e^{-x^2/2}$ de $\mathcal{N}(0,1)$. # # *Indication : pour $x$ un tableau bidimensionnel de taille $n × p$, `np.sum(x,axis=1)` donne le tableau unidimensionnel de taille $n$ dont les coordonnées sont les sommes des lignes de $x$.* # In[9]: exo5() # ## 3. Lois continues # Dans ces exercices, on se propose d’identifier la loi d’une variable aléatoire $X$ en traçant l'histogramme d'un grand nombre, $X_1, . . . , X_n$, de réalisations indépendantes de $X$ et en le comparant à la densité supposée de $X$. On rappelle qu'un histogramme d'un échantillon est un diagramme en colonnes exprimant la répartition des valeurs de cet échantillon dans divers intervalles (la renormalisation est faite de façon à ce que l’aire totale vaille 1). # # **Commande Python** : # # plt.hist(mon-echantillon,bins=mon-nombre-de-colonnes,density=1) # # On peut aussi remplacer le paramètre mon-nombre-de-colonnes par le vecteur des abscisses (ordonnées dans l’ordre croissant) des bases des colonnes. # # a) Soient $X$ et $Y$ des variables aléatoires de loi uniforme sur $[−1, 1]$ indépendantes. Illustrer, # via un histogramme, le fait que $X + Y$ a pour densité $\rho(x) := \frac 1 4 \max(2 − |x|, 0)$. # *Indication : utiliser `np.random.rand` pour simuler $X$ et $Y$.* # In[10]: exo6() # b) Soient $X$ et $Y$ des variables aléatoires de loi exponentielle de paramètre 1, indépendantes. Illustrer, via un histogramme, le fait que $X + Y$ a pour densité $\mathbf{1}_{x\geq 0}xe^{−x}$. # # *Indication : utiliser `np.random.exponential`* # In[11]: exo7() # c) Illustrer la propriété d'absence de mémoire des lois exponentielles : si $X$ suit une loi exponentielle, alors pour tout $t > 0$, la loi de $X − t$ sachant que $X > t$ est la loi de $X$ (c'est la raison pour laquelle on utilise ces lois pour modéliser les durées de vie de composants sans usure). # # *Indication : pour $X$ vecteur de type numpy, $X[X>t]$ est le vecteur $X$ dans lequel on n'a gardé que les coordonnées plus grandes que $t$*. # In[3]: exo8() # ## 4. Lois discrètes # # Un calcul simple montre que lorsque $n$ tend vers l’infini, la loi de binomiale $B(n, \lambda/n)$ tend vers la loi de Poisson de paramètre $\lambda$. En pratique, on assimile $B(n, p)$ à la loi de Poisson de paramètre $np$ dès que $np^2 < 0.1$. Illustrer cette proximité de lois en affichant, sur le même graphique, leurs histogrammes en bâtons (sans faire aucune simulation). # # *Indication : les fonctions `sps.poisson.pmf` et `sps.binom.pmf` donnent les probabilités associées aux différentes valeurs que peuvent prendre des variables aléatoires de loi de Poisson et de loi binomiale, la fonction `plt.stem(x, y)` affiche des barres verticales d’abs. x et hauteur y*. # # In[4]: exo9()