np.polyfit() – Ajustement de courbe avec Polyfit NumPy

Le.fonction polyfit(), accepte trois valeurs d’entrée différentes: x, y et le degré polynomial. Les arguments x et y correspondent aux valeurs des points de données que nous voulons ajuster, respectivement sur les axes x et y. Le troisième paramètre spécifie le degré de notre fonction polynomiale. Par exemple, pour obtenir un ajustement linéaire, utilisez le degré 1.

Table des Matières

Qu’est-ce que l’ajustement de courbe?

L’ajustement de courbe consiste à construire une fonction mathématique capable d’adapter certains points de données spécifiques. La plupart du temps, l’équation d’ajustement est soumise à des contraintes ; de plus, il est également possible de faire des suppositions initiales pour fournir des points de départ utiles pour l’estimation des paramètres d’ajustement, cette dernière procédure a l’avantage d’abaisser le travail de calcul. Dans cet article, nous explorerons la fonction NumPy .polyfit(), qui permet de créer des fonctions d’ajustement polynomial de manière très simple et immédiate.

Ajustement linéaire

Le type d’ajustement le plus simple est l’ajustement linéaire (une fonction polynomiale du premier degré), dans lequel les points de données sont ajustés à l’aide d’une ligne droite. L’équation générale d’une droite est :

y = mx + q

Où « m » est appelé coefficient angulaire et « q » ordonnée à l’origine. Lorsque nous appliquons un ajustement linéaire, nous recherchons essentiellement les valeurs des paramètres « m » et « q » qui donnent le meilleur ajustement pour nos points de données. Dans Numpy, la fonction np.polyfit() est un outil très intuitif et puissant pour l’ajustement des points de données; voyons comment ajuster une série aléatoire de points de données avec une ligne droite.

Dans l’exemple suivant, nous voulons appliquer un ajustement linéaire à certains points de données, décrits par les tableaux x et y. Le .fonction polyfit(), accepte trois valeurs d’entrée différentes: x, y et le degré polynomial. Alors que x et y correspondent aux valeurs des points de données que nous voulons ajuster, sur les axes x et y, respectivement; le troisième paramètre spécifie le degré de notre fonction polynomiale. Puisque nous voulons un ajustement linéaire, nous spécifierons un degré égal à 1. Les sorties de la fonction polyfit() seront une liste contenant les paramètres d’ajustement; le premier est celui qui dans la fonction est multiplié par le terme de degré le plus élevé; les autres suivent ensuite cet ordre.

import numpy as npfrom numpy import random #it will be useful for generating some random noise (on purpose) in the data points that we want to fitimport matplotlib.pyplot as plt #for plotting the data#---LINEAR FIT----#generate the x arrayx = np.linspace(0,60,60) # generate an array of 60 equally space points#generate the y array exploiting the random.randint() function to introduce some random noisey = np.array() #each element is a random number with value between +-2 the respective x axis value#Applying a linear fit with .polyfit()fit = np.polyfit(x,y,1)ang_coeff = fitintercept = fitfit_eq = ang_coeff*x + intercept #obtaining the y axis values for the fitting function#Plotting the datafig = plt.figure()ax = fig.subplots()ax.plot(x, fit_eq,color = 'r', alpha = 0.5, label = 'Linear fit')ax.scatter(x,y,s = 5, color = 'b', label = 'Data points') #Original data pointsax.set_title('Linear fit example')ax.legend()plt.show()

Comme mentionné précédemment, la variable fit contiendra les paramètres d’ajustement. Le premier est le coefficient angulaire, le dernier l’interception. À ce stade, afin de tracer notre ajustement, nous devons construire les valeurs de l’axe des ordonnées à partir des paramètres obtenus, en utilisant les valeurs de l’axe des abscisses d’origine. Dans l’exemple, cette étape est décrite par la définition de la variable fit_eq. La dernière chose qui reste est de tracer les données et l’équation d’ajustement. Le résultat est:

Ajustement polynomial du deuxième degré

Dans ce deuxième exemple, nous allons créer un ajustement polynomial du deuxième degré. Les fonctions polynomiales de ce type décrivent une courbe parabolique dans le plan xy ; leur équation générale est :

y = ax2 + bx + c

où a, b et c sont les paramètres d’équation que nous estimons lors de la génération d’une fonction d’ajustement. Les points de données que nous allons insérer dans cet exemple représentent la trajectoire d’un objet qui a été projeté d’une hauteur inconnue. En exploitant la fonction .polyfit(), nous ajusterons la trajectoire de l’objet tombant et nous obtiendrons également une estimation de sa vitesse initiale dans la direction x, v0.

#-----POLYNOMIAL FIT----x = np.array() # x coordinatesy = np.array() # y coordinatesfit = np.polyfit(x, y, 2)a = fitb = fitc = fitfit_equation = a * np.square(x) + b * x + c#Plottingfig1 = plt.figure()ax1 = fig1.subplots()ax1.plot(x, fit_equation,color = 'r',alpha = 0.5, label = 'Polynomial fit')ax1.scatter(x, y, s = 5, color = 'b', label = 'Data points')ax1.set_title('Polynomial fit example')ax1.legend()plt.show()

Une fois initialisés les tableaux x et y définissant la trajectoire de l’objet, nous appliquons la fonction .polyfit(), en insérant cette fois « 2 » comme degré de la fonction d’ajustement polynomial. En effet, la trajectoire d’un objet tombant peut être décrite par un polynôme du second degré; dans notre cas, la relation entre les coordonnées x et y est donnée par:

y = y0–½ (g / v02) x2

où y0 est la position initiale (la hauteur à partir de laquelle l’objet a été projeté), g l’accélération de la gravité (9,81 m / s2) et v0 la vitesse initiale (m / s) dans la direction x (visitez: https://en.wikipedia.org/wiki/Equations_for_a_falling_body pour plus de détails ). On affecte ensuite aux variables a, b et c la valeur des 3 paramètres d’ajustement et on définit fit_equation, l’équation polynomiale qui sera tracée ; le résultat est:

Si nous imprimons maintenant les trois paramètres d’ajustement, a, b et c, nous obtenons les valeurs suivantes: a = -0,100, b = 0,038, c = 24,92. Dans l’équation décrivant la trajectoire d’un corps tombant, il n’y a pas de terme b; puisque l’ajustement est toujours une approximation du résultat réel, nous obtiendrons toujours une valeur pour tous les paramètres; cependant, nous remarquerons que la valeur de notre terme b est beaucoup plus petite que les autres et peut être en quelque sorte négligée, en comparant notre ajustement avec l’équation décrivant la physique du problème. Le terme c représente la hauteur initiale (y0) tandis que le terme a décrit la quantité – ½ (g/v02). Par conséquent, la vitesse initiale v0 est donnée par :

v0 = 2-g2a

Donnant la valeur finale de v0 = 6,979 m/s.