La fonction scipy.optimize.curve_fit permet
un ajustement optimal du (ou des)
paramètre(s) d'une fonction que l'on pense susceptible de décrire un
ensemble de données expérimentales.
Par exemple, essayons d'ajuster
une fonction polynomiale
\(f(t)=at^b+c\), où \(a\), \(b\) et \(c\) sont des paramètres réels
inconnus, aux données collectées lors de la chute
libre d'une masse
(voir le fichier ChuteLibreData.txt déjà utilisé
dans ce cours).
Représentation des points expérimentaux :
import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize
t,d = np.loadtxt('ChuteLibreData.txt', usecols = (1,2), skiprows = 4, unpack = True)
plt.xlabel("temps t [s]")
plt.ylabel("distance parcourue d [m]")
plt.scatter(t,d,label='points expérimentaux')
plt.legend(loc='best')
plt.show()
La fonction plt.scatter() permet de représenter uniquement
les points, sans les relier.

Ajustement des paramètres d'une fonction polynomiale aux données expérimentales :
def fct_fit(x,a,b,c):
return a * x**b + c
parametres, m_covariance = optimize.curve_fit(fct_fit,t,d)
print('tableau des paramètres : ', parametres)
print('matrice (tableau) de covariance : \n', m_covariance)
tableau des paramètres : [4.67235125 2.06247522 0.19456514]
matrice (tableau) de covariance :
[[ 0.92275613 -0.1731547 -0.81855416]
[-0.1731547 0.03352579 0.13967152]
[-0.81855416 0.13967152 1.22872764]]
Les valeurs estimées des paramètres obtenues grâce à la fonction
scipy.optimize.curve_fit sont :
\(a\cong 4.766\), \(b\cong 2.020\) et
\(c\cong 0.095\).
Les valeurs théoriques attendues sont évidemment (chute libre à la surface de la Terre) : \(a = \displaystyle\frac{1}{2}g \cong 4.903\), \(b=2\) et \(c=0\).
Représentation des points expérimentaux et de la courbe ajustée :
plt.scatter(t,d,label='points expérimentaux')
plt.plot(t, fct_fit(t, parametres[0], parametres[1], parametres[2]), label='courbe ajustée')
plt.legend(loc='best')
plt.show()
