← retour aux snippets

scipy.optimize: curve_fit

Ajuster une courbe non linéaire aux données.

python stats #scipy#optimize

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.