optimize.curve_fit fits nonlinear model parameters to data by least squares—common in labs, finance decay curves, and sensor calibration.
Model function signature
Define def model(x, a, b, ...): returning predictions. curve_fit returns optimal parameters and covariance estimate.
Workflow
- Plot raw (x, y) data
- Choose model with physical meaning
- Provide initial guess
p0 - Inspect fitted curve and parameter uncertainties
Exponential decay fit
import numpy as np
from scipy import optimize
def exp_decay(t, a, b):
return a * np.exp(-b * t)
t = np.linspace(0, 4, 20)
y = 2.5 * np.exp(-0.8 * t) + 0.05 * np.random.default_rng(0).normal(size=20)
popt, pcov = optimize.curve_fit(exp_decay, t, y, p0=[2, 1])
print('fitted a, b:', popt)
Important interview questions and answers
- Q: p0 importance?
A: Poor initial guesses can converge to wrong local minima—plot and try multiple starts. - Q: pcov diagonal?
A: Variance estimates for parameters—sqrt gives approximate standard errors.
Self-check
- What does curve_fit return?
- Why plot data before trusting fitted parameters?
Pitfall: Bad p0 guesses send curve_fit to local minima—try multiple starts.
Interview prep
- curve_fit returns?
popt optimal parameters, pcov covariance estimate.
- Validation?
Plot residuals; try multiple p0; check parameter uncertainties.