Outils pour utilisateurs

Outils du site


bts:python:propagationincertitude

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
bts:python:propagationincertitude [2023/02/14 22:24] – créée goupillwikibts:python:propagationincertitude [2026/02/12 19:04] (Version actuelle) – [Calcul des $y$] goupillwiki
Ligne 1: Ligne 1:
 ====== Propagation d'incertitude ====== ====== Propagation d'incertitude ======
 +
 +{{ :bts:python:propagation_incertitudes.td.pdf |Version imprimable}}
  
 Dans ce TD on veut mettre en évidence des phénomènes de 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 :
 +<code python>
 +from random import random, seed, gauss
 +import numpy as np
 +seed(45)
 +</code>
 +
  
 ===== Une seule variable ===== ===== Une seule variable =====
Ligne 11: Ligne 21:
 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$. 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$ ====+<WRAP tip> 
 +Quand on écrit $X$, on est dans le domaine des probabilités. On parle alors des valeurs que pourrait prendre $x$ avant même d'avoir fait la moindre expérience. Les probabilités sont là pour faire des prédiction sur ce qui pourrait arriver.
  
-<code python> +Si on écrit $x$, on parle alors de résultats qui se sont effectivement produits et que l'on constate. On peut alors faire des statistiques.
-from random import random +
-import numpy as np+
  
 +L'espérance $E(X)$ et l'écart-type $\sigma(X)$ servent à prédire les valeurs que l'on devrait obtenir si on calcule la moyenne $\overline{x}$ t l'écart-type $\sigma_x$ (en version statistique)
 +
 +Dans ce TD, nous allons faire l'expérience avec Python de sorte que nous obtiendrons des résultats statistiques. Nous vérifierons ensuite si ces résultats correspondent aux prédictions que les probabilités nous auraient permis de faire.
 +</WRAP>
 +
 +
 +==== Simulation de $x$ ====
 +
 +<code python>
 N = 10000 N = 10000
  
 def tirage(reference, incertitude): def tirage(reference, incertitude):
     '''     '''
-    reference: valeur de référence. Exemple 5 pour X +    reference: valeur de référence. Exemple 5 
-    incertitude: marge d'erreur. Exemple 0,pour X+    incertitude: marge d'erreur. Exemple 0.1
     '''     '''
     return reference + (2*random()-1)*incertutude     return reference + (2*random()-1)*incertutude
          
-Xs = [tirage(5, 0.1) for i in range(N)]+x_values = [tirage(5, 0.1) for i in range(N)]
 </code> </code>
  
-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'' :+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 ''%%x_values%%'' :
  
 <code python> <code python>
->>> np.mean(Xs+>>> np.mean(x_values
->>> np.std(Xs)+>>> np.std(x_values)
 >>> 0.2/np.sqrt(12) >>> 0.2/np.sqrt(12)
 </code> </code>
  
-==== Calcul des $Y$ ====+==== Calcul des $y$ ====
  
 <code python> <code python>
Ligne 43: Ligne 61:
     return 3*x**2     return 3*x**2
  
-Ys = [f(x) for x in Xs]+y_values = [f(x) for x in x_values]
 </code> </code>
  
-On obtient ainsi les ''N'' valeurs de $Y$ correspondant aux $X$ précédents. Là encore on peut relever les paramètres statistiques.+On obtient ainsi les ''N'' valeurs de $y$ correspondant aux $x$ précédents. Là encore on peut relever les paramètres statistiques.
  
 <code python> <code python>
->>> np.mean(Ys+>>> np.mean(y_values
->>> np.std(Ys+>>> np.std(y_values
->>> np.std(Ys) / np.std(Xs)+>>> np.std(y_values) / np.std(x_values)
 </code> </code>
  
-À quoi reliez-vous le résultat du dernier calcul ?+Le dernier calcul correspond à $\frac{\sigma_y}{\sigma_x}$. Comparez ce résultat à $\left|f'(\overline{X})\right|$.
  
 ==== Représentation graphique ==== ==== Représentation graphique ====
Ligne 65: Ligne 83:
  
 plt.figure() plt.figure()
-plt.hist(Ys, density = True, edgecolor='black')+plt.hist(y_values, bins=20, density = True, edgecolor='black')
 plt.show() plt.show()
 </code> </code>
  
-Vous constatez que $Y$ a une densité à peu près uniforme, tout comme $X$.+Vous constatez que $Y$ a une densité à peu près uniforme, tout comme $X$. Cela ne serait plus vrai si l'incertitude de $x$ devenait plus importante (ce que vous pouvez vérifier !) 
 + 
 +==== Cas Gaussien ==== 
 + 
 +Recommencez avec 
 + 
 +<code python> 
 +x_values = [gauss(5,0.05) for i in range(N)] 
 +</code> 
 + 
 +On a toujours $x = 5 \pm 0,1$ mais cette fois il ne faut pas comprendre l'incertitude comme un intervalle $[4,9\,;\,5,1]$ dont $x$ ne pourrait pas sortir. Ce n'est plus maintenant qu'un intervalle de fluctuation à 95 %. 
 + 
 +Faites la simulation, calculez $\overline{y}$ et $\sigma_y$. Constatez que $y$ a bien une répartition gaussienne. 
 + 
 +On peut donc écrire $y = nominal \pm incertitude$. Puisque $y$ est gaussien, on peut dire $nominal = \overline{y}$ et $incertitude = 2 \sigma_y$.
  
 ===== Deux variables ===== ===== Deux variables =====
  
-Modifiez le programme pour le cas suivant : $y = 3\,x_1^2 + 2 \,x_2$ avec $x_1 = 5 \pm 0,1$ et $x_2 = 7 \pm 0,2$.+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$. 
 + 
 +<WRAP tip>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. 
 +</WRAP> 
 + 
 +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 : 
 + 
 +<code python> 
 +Xs1 = [gauss(5,0.06) for i in range(N)] 
 +Xs2 = [gauss(7,0.12) for i in range(N)] 
 +</code> 
 + 
 +Visualisez la distribution de $Y$. 
  
  
  
bts/python/propagationincertitude.1676409849.txt.gz · Dernière modification : de goupillwiki