Le package CalculErreur définit un ensemble de commandes pour calculer la propagation des incertitudes d'une manière automatique. La méthode de calcul est fondée sur la formule de Gauss-Laplace

Pour  z=f(x,y), l'incertitude sur z est 
Δz=(Sqrt[(((((∂f(x,y))/(∂x)) Δx))^2)+(((((∂f(x,y))/(∂y)) Δy))^2)])

Pour avoir accès au package :

<<CalculErreur`

Fonctions disponibles :

Names["CalculErreur`*"]

Déclarer l'expression et les variables

Déclaration de l'expression

Nous appelons expression la formule sur laquelle va porter le calcul d'erreur. Par exemple

k=1.36;
fExpr=k (x/(y^2));

Dans l'expression, on distingue
	les variables		x, y;
	les constantes		k;
	la valeur		fExpr.
Si les variables et les constantes peuvent être en nombres quelconques, il n'y a qu'une seule valeur.
Du point de vue mathématique, il s'agit d'une fonction         fExpr= f(x, y).
Par contre, en Mathematica,  l'expression n'est pas formellement déclarée comme fonction.

Déclaration des variables

L'utilisateur doit ranger les variables dans un ordre donné, par exemple

var={x,y}

C'est dans le même ordre que devront apparaître les données {{(Subscript[x, 1]),(Subscript[y, 1])},{(Subscript[x, 2]),(Subscript[y, 2])}, ...}.

Si on attribue une valeur à une variable, par exemple

x=5

il  n'est alors plus possible de calculer la dérivée partielle correspondante

(∂_x) fExpr

Pour effectuer correctement le calcul d'erreur, il faut éviter d'assigner des valeurs aux variables.
La commande protege évite que l'utilisateur ne leur affecte une valeur par inadvertance.

Clear[x,y]

?protege

protege[var]

Il n'est désormais plus possible d'attribuer des valeurs ni aux variables, ni aux incertitudes correspondantes. Par exemple,

Δy=0.02

Pour donner des valeurs aux variables ou aux incertitudes, on passera habituellement par les commandes evalF, evalΔf ou evalFΔf.

Entrer les données

Entrer le tableau des mesures

On effectue généralement plusieurs mesures pour lesquelles on veut calculer l'incertitude pour chaque point de mesure.

En respectant l'ordre dans lequel ont été déclarées les variables, les mesures sont introduites sous la forme d'un tableau
 mesures={{(Subscript[x, 1]),(Subscript[y, 1])},{(Subscript[x, 2]),(Subscript[y, 2])}, ...}, par exemple

mesures={{3.02,1.5},{3.45,1.98},{4.23,2.35}};

Entrer la liste des incertitudes

En respectant l'ordre dans lequel ont été déclarées les variables, les incertitudes sont introduites sous la forme d'une liste
 incertitudes={Δx,Δy,...}
à raison d'une incertitude par variable. Par défaut, les incertitudes sont absolues. Chaque incertitude peut être déclarée comme relative en la faisant suivre du symbole ℜ. Pour disposer de ce symbole, sélectionnez la palette "BasicTypesetting"; ℜ est situé sur la 7-ème ligne, 5-ème colonne. Par exemple, pour déclarer que l'incertitude absolue sur x est de 0.05 et que l'incertitude relative sur y est de 2 %, on déclare

incert={0.05, 0.02 ℜ};

A chaque mesure {x,y}, le programme attribue l'incertitude correspondante (Δx, Δy). Dans l'exemple précédent,
	à {3.02,1.5}   correspond l'incertitude {0.05, 0.02*1.5};
	à {3.45,1.98}   correspond l'incertitude {0.05, 0.02*1.98};
	à {4.23,2.35}   correspond l'incertitude {0.05, 0.02*2.35}

Il est aussi possible de déclarer qu'une incertitude est la somme d'une incertitude absolue et d'une incertitude relative. Par exemple, pour indiquer que sur la deuxième variable, l'incertitude est de 0.03 plus 2 %, on déclare

incert={0.05, 0.03+0.02 ℜ};

Dans ce dernier cas, à chaque mesure {x,y}, le programme attribue l'incertitude correspondante (Δx, Δy) comme suit
	à {3.02,1.5}   correspond l'incertitude {0.05, 0.03+0.02*1.5};
	à {3.45,1.98}   correspond l'incertitude {0.05, 0.03+0.02*1.98};
	à {4.23,2.35}   correspond l'incertitude {0.05, 0.03+0.02*2.35}

Effectuer les calculs

Valeurs numériques de l'expression

Pour calculer la valeur de l'expression en chaque point de mesure, on utilise la commande evalF

?evalF

Pour chaque mesure {(Subscript[x, 1]), (Subscript[y, 1]),...},  {(Subscript[x, 2]), (Subscript[y, 2]),...}, ...,  {(Subscript[x, m]), (Subscript[y, m]),...}, le programme calcule la valeur numérique correspondante (Subscript[z, 1])=f((Subscript[x, 1]),(Subscript[y, 1]),...), (Subscript[z, 2])=f((Subscript[x, 2]),(Subscript[y, 2]),...), ..., (Subscript[z, m])=f((Subscript[x, m]),(Subscript[y, m]),...). L'output de evalF consiste en la liste des valeurs numériques {(Subscript[z, 1]), (Subscript[z, 2]), ..., (Subscript[z, m])}. Le nombre de valeurs sera donc égal au nombre de mesures. Par exemple,

fVal=evalF[fExpr, var, mesures]

Formules de propagation des incertitudes

Pour déterminer la formule de l'incertitude absolue ΔfExpr, on utilise la commande gauss

?gauss

gauss[fExpr,var]

Pour déterminer la formule de l'incertitude relative ((ΔfExpr)/fExpr), on utilise la commande gaussRel

?gaussRel

gaussRel[fExpr,var]

Calcul numérique des incertitudes

Pour calculer les incertitudes associées à chaque point de mesure, on utilise la commande evalΔf

?evalΔf

Pour chaque mesure {(Subscript[x, 1]), (Subscript[y, 1]),...},  {(Subscript[x, 2]), (Subscript[y, 2]),...}, ...,  {(Subscript[x, m]), (Subscript[y, m]),...}, le programme calcule l'incertitude correspondante (Subscript[Δz, 1]), (Subscript[Δz, 2]), ..., (Subscript[Δz, m]). L'output de evalΔf consiste en la liste des valeurs numériques {(Subscript[Δz, 1]), (Subscript[Δz, 2]), ..., (Subscript[Δz, m])}. Les incertitudes apparaissent dans le même ordre que les mesures et que les valeurs. Par exemple, voici les incertitudes absolues sur chaque mesure

Δf=evalΔf[fExpr, var, mesures,incert]

et les incertitudes relatives sur chaque mesure

evalΔfRel[fExpr, var, mesures,incert]

Calcul combiné des valeurs et des incertitudes

Pour calculer les valeurs et les incertitudes associées à chaque point de mesure, on utilise la commande evalFΔf

?evalFΔf

Pour chaque mesure {(Subscript[x, 1]), (Subscript[y, 1]),...},  {(Subscript[x, 2]), (Subscript[y, 2]),...}, ...,  {(Subscript[x, m]), (Subscript[y, m]),...}, le programme calcule la valeur et l'incertitude correspondantes {(Subscript[z, 1]),(Subscript[Δz, 1])}, {(Subscript[z, 2]),(Subscript[Δz, 2])}, ..., {(Subscript[z, m]),(Subscript[Δz, m])}. L'output de evalFΔf consiste en un tableau de valeurs numériques  {{(Subscript[z, 1]),(Subscript[Δz, 1])}, {(Subscript[z, 2]),(Subscript[Δz, 2])}, ..., {(Subscript[z, m]),(Subscript[Δz, m])}}. Les résultats apparaissent dans le même ordre que les mesures. Par exemple,

resultats=evalFΔf[fExpr, var, mesures,incert]

Calcul de la moyenne et de l'écart-type de la moyenne

Pour calculer la moyenne d'une liste de valeurs ainsi que l'écart-type de la moyenne, on dispose de la commande mσ. Le symbole σ peut être obtenu à partir de la palette "BasicTypesetting"; σ est situé sur la  3-ème ligne, 2-ème colonne.

?mσ

Par exemple,

mσ[{2.99,3.05,3.04,3.01,3.03,3.02}]

Présenter les données et les résultats

Tableaux

Dans le package Tableaux se trouvent des commandes qui facilitent la présentation des données ou des résultats sous la forme de tableaux, en particulier la commande afficheTableau.

<<Tableaux`

?afficheTableau

Par exemple,

afficheTableau[{"N° 1","N° 2","N° 3"},{"f", "Δf"},resultats,EngineeringForm]

Pour arrondir les résultats d'un calcul, on dispose de la fonction resultArrondi:

?resultArrondi

L'arrondi se fait au premier chiffre de l'erreur :

resultArrondi[resultats]

On peut composer plusieurs commandes:

afficheTableau[{"N° 1","N° 2","N° 3"},{"f", "Δf"},resultArrondi[resultats],EngineeringForm]

On peut aussi assembler les données et les résultats dans un même tableau

?fusionneLignes

afficheTableau[{"N° 1","N° 2","N° 3"},{"x","y","f", "Δf"},fusionneLignes[mesures,resultArrondi[resultats]],EngineeringForm]

Graphiques

Certaines sortes de graphiques qui dessinent les incertitudes peuvent être obtenus par la commande "graphErr" :

?graphErr

Par exemple,

Show[graphErr[resultats]]

Dessinons par exemple la fonction tangente des angles entre 60° et 80°, avec une incertitude de 5 %:

xVal=Range[60,80];

yValErr=evalFΔf[Tan[x °], x,xVal,0.05 ℜ]

graphExp=graphErr[xVal,yValErr];

Show[graphExp]

On peut lui superposer la courbe :

graphTh=Plot[Tan[x °],{x,60,80}]

Show[graphExp,graphTh]