Travaux pratiques
Méthodologie
Régression linéaire et incertitudes
Réaliser une régression linéaire en tenant compte des incertitudes.
1. Données numériques
On dispose d’un relevé expérimental de valeurs d’absorbance en fonction du temps.
t (s) 0 20 40 60 80 100 120 140 160 180 200 220 240
A 0,973 0,930 0,884 0,842 0,803 0,765 0,729 0,693 0,660 0,628 0,598 0,570 0,542
Les incertitudes-type proposées pour A et pour t sont : 𝑢𝐴 = 0,02 et 𝑢𝑡 = 0,6 𝑠.
Objectif : tester si le nuage de points, 𝐴 = 𝑓(𝑡), peut être assimilé à une droite.
2. Régression linéaire avec Regressi
Saisir les valeurs numériques dans le
tableau,
Ajouter des colonnes d’incertitudes (clic
sur « u incertitudes)
D’abord
Puis double clic
Indiquer les valeurs des incertitudes-
type sur t et A
(double clic sur la colonne u(t), puis u(A)).
-1-
Créer éventuellement une grandeur
calculée (par exemple, logA = ln(A) )
Le logiciel calcule automatiquement les
incertitudes-type pour les grandeurs
calculées.
Afficher la courbe, modéliser le nuage
de points et analyser les résultats de la
modélisation :
• Les résidus sont-ils aléatoires ?
• La valeur du Chi2 est-elle proche
de 1 ?
• Les barres/ellipses d’incertitudes
chevauchent-elles la droite de
régression ?
Utiliser (ou non) les valeurs des
paramètres de la régression linéaire et
les incertitudes-types associées.
-2-
3. Régression linéaire avec python
Importer numpy et matplotlib. import numpy as np
import matplotlib.pyplot as plt
Saisir les valeurs expérimentales t=[0,20,40,60,80,100,120,140,160,180,200,220]
dans des listes, et les incertitudes- A=[0.973,0.930,0.884,0.842,0.803,0.765,0.729,0.69
type associées. 3,0.660,0.628,0.598,0.570]
Créer éventuellement les listes des #Exemple création autre grandeur
abscisses X et des ordonnées Y si ce logA= [np.log(i) for i in A]
ne sont pas les grandeurs
expérimentales, et saisir les #Définition abscisse et ordonnée
incertitudes-type associées (il est X=t
Y=A
possible de les évaluer avec une
formule de propagation, avec Gum- #Incertitudes-type
MC ou avec la méthode Monte- u_X = .7
Carlo : voir plus loin). u_Y = .02
Modéliser le nuage de points par la #Régression linéaire
fonction polyfit qui revoie les p = np.polyfit(X,Y,1)
coefficients d’un polynôme de degré
1.
Afficher le nuage de points avec les #Tracés : nuage points, courbe modèle et résidus.
barres d’incertitudes, et les résidus. plt.figure(1)
plt.errorbar(X,Y,xerr=2*u_X,yerr=2*u_Y,fmt='o')
plt.plot(X,np.polyval(p,X),'--')
plt.xlabel('t en s')
plt.ylabel('Absorbance A')
plt.title("Absorbance en fonction du temps")
plt.grid()
plt.figure(2)
plt.errorbar(X,Y-
np.polyval(p,X),yerr=2*u_Y,fmt='o')
plt.xlabel('t en s')
plt.ylabel('Résidus')
plt.axhline()
plt.grid()
plt.title("Résidus")
plt.show()
Afficher le coefficient directeur et #Affichage des paramètres de la régression
l’ordonnée à l’origine. print(f'Coef dir : {p[0]} (en unitéY/unitéX)')
print(f'Ord origine : {p[1]} (en unitéY)')
Coefficient directeur : -0.0017939560439560432 (en unité de Y/unité de X)
Ordonnée à l'origine : 0.9550439560439558 (en unité de Y)
-3-
4. Propagation d’incertitudes avec python
Importer numpy. import numpy as np
Choisir le nombre de tirages. N = 100000
Identifier l’ensemble des grandeurs mesurées A = np.random.uniform(10.8 , 11.2 , size=N)
(ici, A, B, C et D) et choisir des lois de B = np.random.uniform(21 , 22 , size=N)
distribution pour chacune. C = np.random.triangular(2.5 , 2.7 , 2.9 , s
ize=N)
• Cas 1 : distribution uniforme (même D = np.random.uniform(16 , 16.7 , size=N)
probabilité sur tout un intervalle) :
np.random.uniform(borne_inf,
borne_sup)
• Cas 2
: distribution triangulaire (probabilité plus
forte pour une valeur au centre d'un
intervalle) :
np.random.triangular(borne_inf,
valeur_proba_max , borne_sup)
• Cas 3 : distribution normale (probabilité
suivant une loi normale, utile à condition
de connaître l'écart-type) :
np.random.normal(valeur_centrale ,
écart-type)
Faire calculer la grandeur X avec chaque jeu X = A**2 * (B-C) / D
de grandeurs simulées.
Exemple :
𝘈𝟤 ⋅ (𝘉 − 𝘊)
𝘟=
𝘋
Déterminer : Xmoy = np.average(X)
• la valeur moyenne, meilleur estimateur uX = np.std(X,ddof=1)
de X
• l'écart-type, incertitude-type
Afficher les résultats. print(f'Valeur de X : {Xmoy} (unité de X)')
print(f'Incertitude-type u(X) : {uX} (unité
de X)')
Valeur de X : 139.14843297465035 (unité de X)
Incertitude-type u(X) : 4.066120581016981 (unité de X)
-4-