Objectif ✔️ : rechercher ou tester si un modèle mathématique polynomial décrit correctement une série de mesures.
💡 Cas particulier fréquent : recherche d'un modèle affine ("régression linéaire").
La procédure de validation se décompose en plusieurs étapes :
On suppose qu’on dispose d’une série de N valeurs pour la mesure de deux grandeurs x et y.
On suppose également que les incertitudes-types u(x) et u(y) sur x et y sont connues
(valeur commune unique ou séries de N valeurs).
On cherche à tester un modèle numérique polynomial (une fonction f) dont la représentation y = f(x) décrirait
les points expérimentaux de manière satisfaisante.
Dans la suite, on liste les bibliothèques et les fonctions nécessaires en construisant un script pas à pas.
Pour chaque fonction, un lien vers la documentation de numpy ou matplotlib est disponible.
La description de ce que retourne la fonction et des paramètres obligatoires est en général simple
(les autres paramètres peuvent être ignorés en première approche).
La lecture et l'interprétation de ce type de documentation est une compétence attendue.
🎮 Exécuter la cellule ci-dessous pour charger les bibliothèques nécessaires.
⚠️ Cellules de code ci-dessous : scroller ou passer le code en plaine page pour voir la totalité du code.
Dans la suite, on va utiliser des données "expérimentales" générées artificiellement par python : un modèle affine de la forme \(y = ax+b\) est bruité aléatoirement (de façon à obtenir un nuage de points dispersés autour la droite initiale). La modélisation consiste à rechercher les valeurs de a et b à partir du nuage de points.
Dans le cas de travaux pratiques, ces données simulées doivent bien entendu être remplacées par les données réelles.
On crée un tableau numpy (array) de N abscisses x et un tableau de N ordonnées y obtenu à partir de x (par exemple y = ax + b) puis bruité aléatoirement. On choisit également les incertitudes-types u(x) et u(y) sur x et y (valeur unique valable pour toutes les mesures ou tableau de N valeurs).Pour représenter les barres d’erreur liées à chaque point expérimental, on fournit à la fonction errorbar les tableaux de valeurs x et y ainsi que la valeur ou le tableau de valeurs pour u(x) et u(y).
Fonction errorbar de matplotlib.pyplot :
Résumé : plt.errorbar(x, y, yerr=None, xerr=None) → courbe
🎮 Exécuter la cellule ci-dessous pour représenter les données.
Lors d'un ajustement polynomial, la fonction modèle cherchée f(x) est un polynôme p(x) de degré
noté deg de la forme :
$$p(x) = {p_0}{x^{\deg }} + {p_1}{x^{\deg - 1}} + ... + {p_{\deg - 1}}{x^1} + {p_{\deg }}$$
Noter que, dans cette écriture, p0 est le coefficient du monôme de degré le plus élevé.
La recherche de ce polynôme est effectuée par la fonction polyfit.
Fonction polyfit de numpy :
Résumé : np.polyfit(x, y, deg) -> array([ p0 , p1,… ])
Un ajustement par une droite affine est donc réalisé en choisissant deg = 1.
🎮 Exécuter la cellule ci-dessous pour rechercher les paramètres du modèle.
On souhaite superposer la courbe représentative du modèle \(f(x) = p(x)\) aux points expérimentaux.
Le tracé des points du modèle est effectué par la fonction polyval.
Fonction polyval de numpy :
Résumé : np.polyval(p, x) -> courbe
🎮 Exécuter la cellule ci-dessous pour superposer données et modèle.
Protocole :
Analyse qualitative de la validité du modèle : distribution des écarts normalisés
🎮 Exécuter la cellule ci-dessous pour visualiser les écarts normalisés sur chaque valeur de y.
🎮 Exécuter la cellule ci-dessous pour analyser visuellement des distributions
🎮 Exécuter la cellule ci-dessous pour calculer les incertitudes sur les paramètres.
💻 👁️ Expérimenter en modifiant les données simulées, l'amplitude du bruit par exemple (essayer A_bruit = 15).