Skip to content

DCC-Lab/Expression

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

73 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

English version

Expression : calculatrice avec propagation d'incertitudes

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.

Qu'est-ce que 10 ± 2 veut dire?

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.

Distribution gaussienne : 10 ± 2

Le nombre après le ± est l'écart-type (souvent noté $\sigma$). Il dit "à quel point les valeurs sont étalées" :

  • 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.

Pourquoi les incertitudes ne s'additionnent pas

Si a = 10 ± 2 et b = 20 ± 3, on pourrait penser que a + b = 30 ± 5. Mais ce n'est pas le cas.

Propagation des incertitudes

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 :

$$\sigma_{a+b} = \sqrt{\sigma_a^2 + \sigma_b^2} = \sqrt{4 + 9} = 3.61$$

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)).

Comment ça marche

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.

Utilisation

Dans le navigateur

Allez sur https://www.novajo.ca/expression.html ou ouvrez expression.html localement dans votre navigateur.

En ligne de commande (Python)

python expression.py

Exemples

Mesure 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

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

Fonctions disponibles

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).

Commandes

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

Fichiers

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

Note pour experts : = vs := et corrélations

La calculatrice distingue deux façons d'assigner une variable :

  • a = 10±2 : évalue immédiatement et stocke la distribution. Si a est utilisé deux fois dans un calcul, c'est la même série d'échantillons. Les utilisations sont corrélées : a + a donne 20 ± 4 (l'incertitude double).

  • a := 10±2 : stocke l'expression sans l'évaluer. Chaque référence à a génère une nouvelle série d'échantillons indépendants (c'est comme une fonction) : a + a donne 20 ± 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).

About

A simple parser to evaluate mathematical expressions with uncertainties.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors