Quand on fait une mesure en laboratoire, on n'obtient jamais une valeur exacte. On mesure par exemple une distance de 10.0 cm, mais on sait que la vraie valeur est quelque part entre 9.8 et 10.2 cm. On écrit ça 10.0 ± 0.2 cm.
Mais que se passe-t-il quand on utilise cette mesure dans un calcul? Si on additionne deux mesures incertaines, quelle est l'incertitude du résultat? C'est ce qu'on appelle la propagation des incertitudes.
Ce projet est une calculatrice qui fait ce travail pour vous. Vous entrez vos mesures avec leurs incertitudes, et elle calcule automatiquement l'incertitude du résultat.
Quand on écrit a = 10±2, on dit que la valeur mesurée est distribuée autour de 10. Ce n'est pas juste "entre 8 et 12". C'est (la grande majorité du temps) une distribution gaussienne (ou normale) : les valeurs proches de 10 sont beaucoup plus probables que les valeurs loin de 10.
Le nombre après le ± est l'écart-type (souvent noté
- 68% des mesures tombent entre moyenne - sigma et moyenne + sigma (ici entre 8 et 12)
- 95% des mesures tombent entre moyenne - 2sigma et moyenne + 2sigma (ici entre 6 et 14)
- 99.7% tombent à 3 sigma
Quand vous écrivez a = 10±2 dans la calculatrice, elle génère des centaines de milliers de valeurs aléatoires qui suivent cette distribution. Ensuite, quand vous faites un calcul avec a, elle fait le calcul sur chacune de ces valeurs et regarde le résultat.
Si a = 10 ± 2 et b = 20 ± 3, on pourrait penser que a + b = 30 ± 5. Mais ce n'est pas le cas.
L'incertitude réelle est 30 ± 3.61, pas 30 ± 5. Pourquoi? Parce qu'il est très peu probable que a et b soient tous les deux à leur valeur extrême en même temps. Quand a est trop grand, b a autant de chances d'être trop petit, ce qui compense partiellement.
La règle mathématique pour des mesures indépendantes est : l'écart-type du résultat est la racine de la somme des carrés des écarts-types :
La calculatrice trouve ce résultat automatiquement par Monte Carlo, sans que vous ayez besoin de connaître la formule. Et ça marche aussi pour des calculs beaucoup plus complexes où la formule analytique serait très difficile à dériver (par exemple sin(a*b) / sqrt(c)).
La calculatrice obtient le résultat en échantillonnant les valeurs et en refaisant le calcul plusieurs fois (i.e. des milliers de fois). Elle calcule à la fin l'écart-type de la distribution du calcul, ce qui donne l'incertitude sur le calcul. Cette méthode où l'on répète un calcul plusieurs fois s'appelle la méthode Monte Carlo.
Allez sur https://www.novajo.ca/expression.html ou ouvrez expression.html localement dans votre navigateur.
python expression.pyMesure simple avec incertitude :
:> a = 10±2
10.000 ± 2.000
La mesure a vaut 10 avec un écart-type de 2.
Calcul avec propagation :
:> b = 20±3
20.000 ± 3.000
:> a + b
30.000 ± 3.606
L'incertitude du résultat n'est pas 2+3=5, mais sqrt(4+9)=3.61. La calculatrice trouve ça automatiquement par Monte Carlo.
Données brutes de laboratoire :
:> mesures = [10.1, 9.8, 10.3, 10.0, 9.9]
10.020 ± 0.172
Vous pouvez entrer directement vos données. La calculatrice calcule la moyenne et l'écart-type.
Fonctions :
:> sin(1±0.1)
0.841 ± 0.054
:> sqrt(a)
3.162 ± 0.316
Incertitude en pourcentage :
:> 100±5%
100.000 ± 5.000
Définir une fonction :
:> f(x) := x*2
:> f(10±1)
20.000 ± 2.000
Utiliser random(moyenne, ecart_type) :
:> random(10, 2)
10.000 ± 2.000
C'est équivalent à écrire 10±2.
Visualiser la distribution avec hist() :
:> hist(a + b)
30.00 ± 3.61
Affiche l'histogramme de la distribution Monte Carlo du résultat (fenêtre matplotlib en Python, graphique dans le navigateur).
| Syntaxe | Description |
|---|---|
10±2 ou 10+-2 ou 10pm2 |
Valeur 10 avec écart-type 2 |
10±5% |
Valeur 10 avec 5% d'incertitude |
a = 10±2 |
Assigner une mesure à une variable |
f(x) := x*2 |
Définir une fonction |
[10, 11, 12] |
Entrer des données brutes |
random(10, 2) |
Équivalent à 10±2 |
hist(x) |
Afficher l'histogramme de la distribution de x |
Tapez help ou ? pour voir la liste complète. Les fonctions incluent : sin, cos, tan, asin, acos, atan, sqrt, exp, ln, log, log10, log2, abs, round, random(m, s), hist(x).
| Commande | Description |
|---|---|
help ou ? |
Afficher l'aide |
decimal=N |
Changer le nombre de décimales affichées |
samples=N |
Changer le nombre d'échantillons Monte Carlo (défaut: 500 000) |
clear |
Effacer l'écran et les variables |
reset |
Réinitialiser les variables |
| Fichier | Description |
|---|---|
expression.py |
Code principal (Python) |
expression.js |
Port JavaScript (identique au Python) |
expression.html |
Interface web avec graphiques de distributions |
test_expression.py |
Tests unitaires Python |
test_expression.js |
Tests unitaires JavaScript |
test_cross_language.py |
Tests de cohérence Python/JavaScript |
La calculatrice distingue deux façons d'assigner une variable :
-
a = 10±2: évalue immédiatement et stocke la distribution. Siaest utilisé deux fois dans un calcul, c'est la même série d'échantillons. Les utilisations sont corrélées :a + adonne20 ± 4(l'incertitude double). -
a := 10±2: stocke l'expression sans l'évaluer. Chaque référence àagénère une nouvelle série d'échantillons indépendants (c'est comme une fonction) :a + adonne20 ± 2.83(racine de la somme des carrés).
En pratique : utilisez = quand vous avez mesuré une valeur précise en laboratoire (une seule mesure réutilisée). Utilisez := quand vous décrivez une source d'incertitude qui se répète indépendamment (par exemple, le bruit d'un instrument à chaque lecture).

