Bac à sable Chaînes et listes Fonctions Numpy Piles Récursivité Tris

Modélisation polynomiale - numpy polyfit


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 :

  1. Représentation graphique des points expérimentaux avec leurs barres d’incertitude.
  2. Superposition de la courbe représentative du modèle testé.
  3. Observation graphique des résidus/écarts normalisés.
  4. Conclusion.

Problématique

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.

Outils python

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.


Données expérimentales simulées (à remplacer par les données réelles)

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

🎮 Exécuter la cellule ci-dessous pour simules des valeurs expérimentales.


Etape 1 - 🛠️ Courbe expérimentale - Représentation des barres d’erreur

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 :

  • Arguments : les tableaux de valeurs x et y ainsi que les valeurs ou les tableaux de valeurs yerr et xerr
  • Effectue un tracé

Résumé : plt.errorbar(x, y, yerr=None, xerr=None) → courbe

🎮 Exécuter la cellule ci-dessous pour représenter les données.


Etape 2 - Ajustement polynomial

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 :

  • Arguments : les tableaux de valeurs x et y ainsi que le degré deg du polynôme cherché
  • Renvoie : le tableau des coefficients pi du polynôme

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.


Etape 3 - Superposition points expérimentaux / 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 :

  • Arguments : le tableau p (coefficients du polynôme) et le tableau des valeurs x
  • Effectue un tracé

Résumé : np.polyval(p, x) -> courbe

🎮 Exécuter la cellule ci-dessous pour superposer données et modèle.


Etape 4 - Validation du modèle

Protocole :

Analyse qualitative de la validité du modèle : distribution des écarts normalisés

  1. Calcul des résidus \(y-y_{mod}\) et des écarts normalisés \((y-y_{mod}) / u(y)\)
  2. Représentation des écarts normalisés en fonction de x afin de vérifier que :
    • la distribution n’a pas de forme définie ;
    • la majorité des points possède un écart normalisé compris entre -2 et 2
Si ces conditions ne sont pas vérifiées, le modèle n’est pas adapté aux données.

Analyse quantitative : incertitudes sur les paramètres du modèle
  1. Simulation de Monte-Carlo : tirage d'un jeu de valeurs aléatoires pour y centrées sur l’incertitude-type u(y).
  2. Ajustement polynomial sur le nouveau jeu de valeurs de y ; on en déduit les paramètres du modèle avec les données simulées.
  3. Itération du procédé (étapes 3 et 4) sur un très grand nombre de tirages (avec stockage des paramètres à chaque tirage).
  4. Analyse statistique des distributions obtenues pour les paramètres : histogrammes, moyennes, écarts-types.
Conclusion
Analyse des incertitudes relatives…

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.


Analyse quantitative via une simulation de Monte-Carlo - Incertitudes sur les paramètres du modèle

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