objectif
Ajuster une courbe non linéaire aux données.
code minimal
import numpy as np
from scipy.optimize import curve_fit
def model(x, a, b): return a*np.exp(b*x)
x = np.linspace(0,1,10); y = model(x, 2, 0.5) + 0.01*np.random.default_rng(0).normal(size=x.size)
popt, pcov = curve_fit(model, x, y, p0=[1, 0.1])
print(len(popt) == 2)
utilisation
from scipy.optimize import curve_fit
import numpy as np
def f(x, a): return a*x
x = np.arange(5.0); y = f(x, 2.0)
print(curve_fit(f, x, y)[0][0])
variante(s) utile(s)
from scipy.optimize import curve_fit
import numpy as np
def f(x, a, b): return a*x + b
print(len(curve_fit(f, np.arange(5.0), np.arange(5.0))[0]))
notes
- Fournir de bons p0 pour convergence.