Imaginez votre premier TP d'électricité. Vous disposez d'une alimentation qui
peut délivrer un courant à tension constante réglable, d'une résistance de
puissance suffisante (ou non, ce qui est plus amusant!), d'un ampèremètre et de
câbles (supposés de résistance négligeable). L'alimentation est dotée d'un
voltmètre qui indique la tension du courant délivré. Admettons que
l'alimentation puisse délivrer un courant de tension variant entre 0 (à peu
près) et 15 V.
Muni de ce matériel, le professeur vous demande d'établir la relation existant
entre la valeur de la tension aux bornes de la résistance et l'intensité du
courant circulant. Accessoirement, il vous demande de déduire de vos expériences
la valeur de la résistance.
Vous allez donc construire un montage en reliant en série l'ampèremètre et la
résistance, que vous brancherez aux bornes de l'alimentation. Pour établir la
relation demandée, vous allez faire varier la tension du courant délivré par
l'alimentation (la seule variable...) et vous lirez la valeur de l'intensité I
du courant pour chaque valeur de tension U. Supposons que vous faites varier la
tension de 1 V après chaque lecture de I, entre 0 et 15 V. Manip super classique
au bout de laquelle vous obtiendrez un tableau de valeurs de I en fonction de U.
Vous voici donc en possession d'un tableau de mesures, comportant 16 couples
(u,i). A partir de ces mesures vous devez déterminer la relation qui relie U et
I.
Ce tableau pourrait être le suivant, en supposant que l'unité d'intensité
choisie est le mA et celle de tension le V:
| U | I |
| 0 | 0 |
| 1 | 9 |
| 2 | 19 |
| 3 | 29 |
| 4 | 41 |
| 5 | 50 |
| 6 | 62 |
| 7 | 69 |
| 8 | 83 |
| 9 | 95 |
| 10 | 101 |
| 11 | 109 |
| 12 | 119 |
| 13 | 130 |
| 14 | 142 |
| 15 | 149 |
Bien sur, vous savez depuis la quatrième au moins, qu'il s'agit de la loi d'Ohm
(simplifiée) qui établie une relation linéaire entre U et I, de la forme célèbre
U = R*I. Bon d'accord, mais comment l'établir, comment le montrer?
Premier réflexe, peut être, vous allez tracer un graphique en portant en
abscisse les valeurs de tension, variant entre 0 et 15, et en ordonnée, la
valeur de I mesurée pour chaque valeur de U. Si vous avez été soigneux, vous
verrez que vos points sont vaguement disposés le long d'une droite que vous
devinez. Vous supputez donc une relation linéaire I = a*U et il vous reste à
déterminer a. Vous savez (j'espère...) que a est la pente de la droite que vous
devinez et donc, avec la plus grande témérité, vous tracez une droite qui passe
à peu près par tous les points ou presque, et vous calculer a.
Le principe n'est pas idiot, mais il pêche par un point : le tracé de la droite!
Tel que vous le faites, il est purement "pifométrique"! Vous avez cherché à
faire passer la droite le plus près du maximum de points, mais vous l'avez fait
empiriquement. J'ai vu mon fils (en TS) faire ça hier sur un autre problème
similaire et je me suis dit "on ne connait plus la méthode des moindres carrés
en TS?" - pour la petite histoire, cette méthode est au programme des STG....
Il existe en effet une méthode rigoureuse de tracer cette droite, qu'on appelle
droite de régression. Cette méthode fait partie d'une famille de méthodes, dites
de régressions, qui peuvent être linéaire, polynomiale, logarithmique ou
exponentielle. En gros cela signifie trouver la courbe, une droite, une courbe
polynomiale, un log ou une expo, qui passe au plus près de l'ensemble des points
(on dit "minimiser l'écart quadratique"!).
Dans le cas de la régression linéaire, il s'agit d'une droite, et la méthode
porte le doux nom de méthode "des moindres carrés". Dans la suite de cette page,
je vais tenter de vous expliquer comment la mettre en oeuvre pratiquement, après
avoir abordé très succinctement sa "démonstration" mathématique.
Dans son principe, la méthode est simple. Voyons cela sur un schéma:
Voici donc une collection de n points de mesure (xi,yi) dont on
suppose qu'ils sont reliés par un loi affine d'équation y = a*x + b. Le jeu
étant bien sur de calculer les coefficients a et b. Ce qui est valable pour une
loi affine l'est bien sur pour une loi linéaire (y=0 pour x = 0).
Vous noterez que vous supposez qu'il
s'agit d'une loi affine. Vous pourriez très bien supposer qu'il s'agit d'une loi
exponentionnelle, et dans ce cas vous feriez un calcul de régression
exponentielle. Le choix de la nature de la courbe de régression relève de
l'utilisateur selon des considérations de physique. La méthode n'est qu'un outil
au service du physicien, elle ne remplace pas la compréhension physique du
phénomène.
On appelle "somme des résidus" la somme S =
S(yi - y)2, soit en remplaçant y par sa valeur S =
S(yi - (a*xi +b))2 pour i variant de 1 à n (ou de 0 à n-1, ce qui est
identique).
La méthode des moindres carrés consiste à chercher les
coefficients a et b, tels que la somme S soit minimale, d'où son nom...
A partir de là, les exposés divergent. Les statisticiens font des
calculs en utilisant les notions de point moyen, de variance et covariance. Les
analystes remarqueront que S est minimale si la dérivée partielle de S par
rapport à a et celle par rapport à b sont nulles, ce qui aboutit à un système
d'équations linéaires que l'on sait facilement résoudre.
Ces notions n'étant pas au programme, je les passe. Si vraiment
cela vous embête, vous pourrez trouver la démonstration sur
http://www.sites.univ-rennes2.fr/laboratoire-statistique/AGUYADER/doc/regression/poly.pdf
au paragraphe 1.2.1. La démonstration basée sur les statistiques est disponible
sur wikipédia (qui apparemment snobe la démonstration analytique!).
Quelle que soit la méthode, le calcul donne le même résultat pour les
valeurs de a et de b, que j'ai arrangé pour programmer plus facilement :
a = (n*Sxi*yi - SxiSyi) / (n*Sxi2 - (Sxi)2)
b = (1/n)(Syi - a*Sxi)
Voilà, c'est aussi simple que ça... Evidemment faire le calcul manuellement est un peu pénible! On va donc réaliser un petit programme qui le fait pour nous. A vrai dire, vous disposez déjà tous d'un programme qui le fait, car Excel ou OpenOffice Calc disposent d'une fonction qui calcule la régression linéaire....
L'écriture de la procédure de calcul des coefficients de la droite de régression est une simple application des formules données ci-dessus. Aucune complication comme vous pouvez en juger:
void RegLineaire(double x[], double y[], int n, double *a, double *b)
{
int i; double xsomme, ysomme, xysomme, xxsomme;
double ai,bi;
xsomme = 0.0; ysomme = 0.0;
xysomme = 0.0; xxsomme = 0.0;
for (i=0;i<n;i++)
{
xsomme = xsomme + x[i]; ysomme = ysomme + y[i];
xysomme = xysomme + x[i]*y[i];
xxsomme = xxsomme + x[i]*x[i];
}
ai = (n*xysomme - xsomme*ysomme)/(n*xxsomme - xsomme*xsomme);
bi = (ysomme - ai*xsomme)/n;
*a = ai;
*b = bi;
return;
}
Le programme complet, qui utilise la librairie graphique Dislin pour le tracé graphique,
est très classique. Son code source RegLineaire.cpp est téléchargeable.
Son utilisation est immédiate: vous indiquez le nombre de points de mesure, vous
entrez les valeurs (xi,yi) de chaque point et vous obtenez le tracé des points,
de la droite de régression et les valeurs des coefficients a et b. A titre
d'amélioration du programme, vous pouvez ajouter une routine qui charge les
données à partir d'un fichier: c'est pénible de le faire à chaque lancement!
A titre d'exemple, voilà le graphique obtenu avec les valeurs de mesures
mentionnées ci-dessus:

Nous obtenons a = 10.057 et b = 0.007, en arrondissant .
Comment répondre aux
questions posées (nature de la loi, valeur de la résistance)?
La droite tracée est de la forme I = f(U), soit I = a*U + b. La très faible
valeur de b nous fait penser qu'il peut s'agir d'une fonction linéaire, et donc
que nous pouvons écrire I = a*U ou bien, comme demandé par votre professeur U =
(1/a)*I.
La résistance est donc égale à 1/a. Attention aux unités, I dans notre tableau
est exprimée en mA. Nous obtenons donc une valeur de résistance égale à
(1/10)*10^3 environ, c'est à dire environ 100 ohm, aux incertitudes de mesure
près.
La programmation est plus simple! Nous utiliserons la fonction Regress(X,Y) de
Scilab, qui retourne les coefficients a et b de la droite de régression dans un
vecteur ligne [a,b]. Attention, Scilab pose l'équation Y = a + b*X, ce qui n'est
pas notre notation Y = a*X + b. Il ne faudra donc pas oublier de changer la
signification du a de Scilab, qui est notre b, et celle du b, qui est notre a.
Le programme RegLineaire.sce est
téléchargeable.
Voilà le résultat obtenu:
Les valeurs de a et de b, visibles dans la fenêtre d'exécution de Scilab, sont
identiques à celles obtenues avec le progamme en C. La droite de régression est
elle aussi identique. Ouf!
L'économie de moyens obtenue avec Scilab est confirmée...
On peut très facilement réaliser une régression linéaire (et même les autres)
avec Excel! On utilise pour cela la fonction DROITEREG prédéfinie.
Voyons sur la copie d'écran suivante ce que cela donne:
Les données X sont stockées en colonne de A2:A17, les données Y sont stockées
dans la colonne B2:B17.
Les coefficients a et b sont calculés dans les cases D3 et D4 par appel de la
fonction DROITEREG et extraction de la matrice de retour [a,b] par la fonction
INDEX. Pour plus de renseignements sur DROITEREG et INDEX, consultez l'aide
Excel... La feuille de calcul Reglin.xls est
téléchargeable.
Encore une fois, nous obtenons les mêmes résultats.
Je n'ai pas fait l'exercice sous OpenOffice Calc, mais le principe est
identique, la syntaxe pouvant être légèrement différente. En cas de difficulté,
consultez l'aide de Calc...