Panoramica
Scopo
Eseguire un fit lineare pesato y = m x + c su dati sperimentali con incertezze su y e, opzionalmente, anche su x.
Parametri
x,y: dati sperimentali.sigma_y: incertezze suy, strettamente positive.sigma_x: incertezze opzionali sux, anch’esse strettamente positive.decimals: precisione testuale usata nelle etichette del fit. Deve essere un intero compreso tra 0 e 20.tol: tolleranza relativa usata nel criterio di convergenza quandosigma_xe presente.max_iter: massimo numero di aggiornamenti dei pesi.style:Noneusa glircParamscorrenti; i nomi degli stili inclusi nel package vengono risolti automaticamente; qualunque altra stringa viene passata a Matplotlib come nome stile.show_plot,show_band,show_legend,show_fit_params,show_grid: controllano la parte grafica.xlabel,ylabel,residuals_label,title,xlim,ylim,figsize,dpi,save_path: regolano testi, assi e salvataggio della figura.figsizeedpivengono passati alla creazione della figura solo quando esplicitati.normalize_residuals: seTrue, il pannello inferiore mostra i residui normalizzatir_i / sigma_eff_iinvece dei residui fisici. La normalizzazione riguarda solo il grafico:LinearFitResult.residualsresta sempre espresso nelle unita diy.fit_label,band_label: personalizzano i testi della legenda di retta e banda.fit_labelviene usato solo quandoshow_fit_params=False; seshow_fit_params=True, la label della retta viene costruita automaticamente conmec.title_fontsize,title_pad,legend_fontsize,legend_loc: override puntuali di titolo e legenda. Se lasciati aNone, la funzione usa lo stile attivo.point_color,fit_color,band_color,res_line_color,data_alpha,band_alpha,grid_alpha: regolano colori e trasparenze di punti, retta, banda, linea di zero dei residui e griglia.res_line_color=Noneriusa il colore effettivo della retta di fit; gli altri colori lasciati aNonevengono ricavati dal ciclo colori dello stile attivo;grid_alpha=Nonelascia decidere allo stile attivo.
Restituisce
Un LinearFitResult con parametri del fit, incertezze, residui fisici non normalizzati, diagnostiche e figura opzionale.
Errori ed eccezioni
ValueErrorsex,yesigma_ynon hanno la stessa lunghezza.ValueErrorse ci sono meno di 3 punti.ValueErrorse gli input contengono valori non finiti.ValueErrorsesigma_yosigma_xcontengono valori non positivi.ValueErrorsedecimalsnon e un intero valido tra 0 e 20.ValueErrorsetolomax_itersono invalidi.ValueErrorsexnon contiene almeno due valori distinti.ValueErrorsesave_pathviene usato conshow_plot=False.RuntimeErrorse il caso consigma_xnon converge entromax_iter.
Esempio
import numpy as np
from mespy import lin_fit
x = np.array([1.0, 2.0, 3.0, 4.0, 5.0])
y = np.array([1.8, 3.1, 4.1, 5.2, 6.1])
sigma_y = np.full_like(x, 0.2)
result = lin_fit(
x,
y,
sigma_y,
style="mespy",
xlabel="tempo [s]",
ylabel="spazio [m]",
show_plot=False,
)
Per mostrare i residui normalizzati nel pannello inferiore:
result = lin_fit(
x,
y,
sigma_y,
normalize_residuals=True,
)
In questo caso i punti del pannello dei residui sono result.residuals / sigma_y se non passi sigma_x; se passi anche sigma_x, il denominatore diventa sqrt(sigma_y**2 + result.slope**2 * sigma_x**2).
Note
Nel caso base i pesi sono
1 / sigma_y**2.Se
sigma_xe presente, i pesi vengono aggiornati con la varianza efficacesigma_y^2 + m^2 sigma_x^2.normalize_residuals=Trueusa la stessa varianza efficace delchi2, ma non cambiaresult.residuals,result.residual_std,result.chi2oresult.reduced_chi2.Quando
normalize_residuals=True, le barre d’errore verticali del pannello inferiore sono unitarie e l’asse dei residui diventa adimensionale. Seresiduals_labelresta al default, la label viene adattata automaticamente.La parte grafica riusa
_style_context, quindi il comportamento distylee degli override e coerente conhistogram.I coefficienti iniziali e gli aggiornamenti intermedi passano per
_fit_coefficients.