Outils pour utilisateurs

Outils du site


bts:python:propagationincertitude

Ceci est une ancienne révision du document !



Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172

Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172

Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172

Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172

Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172

Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172

Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Propagation d'incertitude

Dans ce TD on veut mettre en évidence des phénomènes de propagation d'incertitude.

Commençons par importer toutes les bibliothèques et fonctions utiles :

from random import random, gauss
import numpy as np

Une seule variable

On se place dans le cas où $y = f(x)$ et où $x$ est connu avec une incertitude. On veut évaluer l'incertitude sur $y$.

À titre d'exemple, on prend $y = 3\,x^2$. On sait que $x = 5 \pm 0,1$.

On supposera que $X$ est aléatoire et suit une lui uniforme sur $[5-0,1\,;\,5+0,1]$. $Y$ est donc aléatoire également et on souhaite visualiser la distribution de $Y$.

Simulation de $X$

N = 10000

def tirage(reference, incertitude):
    '''
    reference: valeur de référence. Exemple 5 pour X
    incertitude: marge d'erreur. Exemple 0,1 pour X
    '''
    return reference + (2*random()-1)*incertutude
    
Xs = [tirage(5, 0.1) for i in range(N)]

Ce code permet de simuler N tirage de la grandeur $X$. Vous pouvez l'exécuter et calculer en console les paramètres statistiques de Xs :

>>> np.mean(Xs)
>>> np.std(Xs)
>>> 0.2/np.sqrt(12)

Calcul des $Y$

def f(x):
    return 3*x**2

Ys = [f(Xs[i]) for i in range(N)]

On obtient ainsi les N valeurs de $Y$ correspondant aux $X$ précédents. Là encore on peut relever les paramètres statistiques.

>>> np.mean(Ys)
>>> np.std(Ys)
>>> np.std(Ys) / np.std(Xs)

À quoi reliez-vous le résultat du dernier calcul ?

Représentation graphique

On souhaite afficher la distribution de $Y$. Il faut donc faire un comptage. Rien de plus simple :

import matplotlib.pyplot as plt

plt.figure()
plt.hist(Ys, bins=20, density = True, edgecolor='black')
plt.show()

Vous constatez que $Y$ a une densité à peu près uniforme, tout comme $X$.

Deux variables

Modifiez le programme pour le cas suivant : $y = f(x_1, x_2) = 3\,x_1^2 + 2 \,x_2$ avec $x_1 = 5 \pm 0,1$ et $x_2 = 7 \pm 0,2$.

En particulier, calculez $\frac{\partial f}{\partial x_1}$ et $\frac{\partial f}{\partial x_2}$ puis vérifiez que :

$$\sigma_y = \sqrt{\left(\frac{\partial f}{\partial x_1}\,\sigma_{x_1}\right)^2 + \left(\frac{\partial f}{\partial x_2}\,\sigma_{x_2}\right)^2}$$

Visualisez la distribution de $Y$.

Vous pouvez voir que la densité de $Y$ apparaît comme un rectangle un peu cassé sur les bords. On est encore loin d'une gaussienne ce que l'on peut expliquer : $\frac{\partial f}{\partial x_1}\sigma_{x_1}$ est beaucoup plus grand que $\frac{\partial f}{\partial x_2}\sigma_{x_2}$ et donc la dispersion de $Y$ est surtout le fait de $X_1$. C'est presque comme si on n'avait qu'une variable.

Modifions la fonction pour : $f(x_1, x_2) = 3\,x_1^2 + 15\,x_2$. Maintenant, les deux variables ont le même poids dans la dispersion de $Y$. Refaites l'expérience et visualisez $Y$.

Variables gaussiennes

On avait $\sigma_{x_1} \approx 0,06$ et $\sigma_{x_2} \approx 0,12$. Essayons maintenant de prendre $X_1$ et $X_2$ gaussiens :

Xs1 = [gauss(5,0.06) for i in range(N)]
Xs2 = [gauss(7,0.12) for i in range(N)]

Visualisez la distribution de $Y$.

bts/python/propagationincertitude.1676411443.txt.gz · Dernière modification : de goupillwiki