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.

  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()
0
2
4
6
8
1
5
9
7
3

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()
n * p^2 = 0.025