Files
report-temperatura/algoritmo.md

91 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Algoritmo di fitting: Minimi Quadrati Non Lineari con Trust Region Reflective
## 1. Introduzione
Il raffreddamento newtoniano produce curve della forma:
$$T(t) = T_\infty + A \cdot e^{-(t - t_0)/\tau}$$
I parametri da stimare sono $A$, $\tau$ e $t_0$. Nonostante la parte esponenziale sia linearizzabile con un logaritmo, la presenza di $T_\infty$ e di $t_0$ rende il modello **intrinsecamente non lineare** nei parametri: non esiste una trasformazione algebrica che lo riduca a una regressione lineare. È quindi necessario un algoritmo iterativo di ottimizzazione non lineare.
---
## 2. Minimi Quadrati Non Lineari
L'obiettivo è trovare il vettore di parametri $\boldsymbol{\theta}$ che minimizza la somma dei quadrati dei residui pesati:
$$\min_{\boldsymbol{\theta}} \; S(\boldsymbol{\theta}) = \sum_{i=1}^{N} \left(\frac{y_i - f(x_i,\, \boldsymbol{\theta})}{\sigma_i}\right)^2$$
dove:
- $y_i$ sono le temperature misurate,
- $f(x_i, \boldsymbol{\theta})$ è il modello (esponenziale semplice o doppio),
- $\sigma_i$ è l'incertezza associata al campione $i$ (usata per pesare i punti).
A differenza dei minimi quadrati lineari, qui $S(\boldsymbol{\theta})$ non ha soluzione analitica chiusa. Il problema viene risolto iterativamente sfruttando il **Jacobiano** $J_{ij} = \partial f(x_i, \boldsymbol{\theta}) / \partial \theta_j$, che descrive come ogni parametro influenza i residui localmente.
---
## 3. Trust Region Reflective (TRF)
`scipy.optimize.curve_fit` usa per default il metodo **Trust Region Reflective**, progettato per problemi di minimi quadrati non lineari — in particolare con vincoli di bound (parametri limitati inferiormente/superiormente).
### Idea di base: regione di fiducia
Ad ogni iterazione $k$, invece di cercare il minimo globale di $S$, l'algoritmo risolve un **sottoproblema locale** entro una *regione di fiducia* di raggio $\Delta_k$:
$$\min_{\mathbf{p}} \; m_k(\mathbf{p}) = S(\boldsymbol{\theta}_k) + \mathbf{g}_k^T \mathbf{p} + \tfrac{1}{2}\mathbf{p}^T B_k \mathbf{p}$$
$$\text{soggetto a } \|\mathbf{p}\| \leq \Delta_k$$
dove $\mathbf{g}_k = J^T \mathbf{r}$ è il gradiente e $B_k \approx J^T J$ è l'approssimazione hessiana (formula di GaussNewton).
### Aggiornamento adattivo del raggio
Dopo ogni passo proposto $\mathbf{p}_k$, si calcola il **rapporto di riduzione**:
$$\rho_k = \frac{S(\boldsymbol{\theta}_k) - S(\boldsymbol{\theta}_k + \mathbf{p}_k)}{m_k(\mathbf{0}) - m_k(\mathbf{p}_k)}$$
- $\rho_k \approx 1$: il modello quadratico è accurato → il passo viene accettato e $\Delta_k$ aumenta.
- $\rho_k \ll 1$ o negativo: il modello è impreciso → il passo viene rifiutato e $\Delta_k$ si riduce.
Questo meccanismo garantisce convergenza anche quando il punto iniziale è lontano dal minimo.
### Gestione dei bound ("Reflective")
Il termine *Reflective* indica la strategia per rispettare i vincoli di box ($l_j \leq \theta_j \leq u_j$): quando il passo proposto supera un bound, viene **riflesso** lungo quella direzione, mantenendo il sottoproblema risolvibile in modo efficiente senza proiezioni esplicite.
---
## 4. Pesi (Weighted Least Squares)
Il parametro `sigma` di `curve_fit` permette di assegnare incertezze diverse ai punti. Campioni con $\sigma_i$ grande contribuiscono poco a $S(\boldsymbol{\theta})$ e vengono quasi ignorati dal fit.
Questa tecnica è usata per **escludere zone di dati corrotti** senza eliminarle fisicamente: ai campioni nella zona problematica si assegna $\sigma_i = 10^{10}$, riducendo il loro peso a zero in modo pratico. I campioni affidabili mantengono $\sigma_i = 1$.
---
## 5. Stima iniziale dei parametri
I minimi quadrati non lineari sono sensibili al punto di partenza: un'inizializzazione lontana dal minimo globale può far convergere l'algoritmo verso un minimo locale. Per questo motivo i parametri iniziali vanno scelti con cura, usando:
- **Conoscenza fisica** del processo (es. costante di tempo dell'ordine di decine di secondi per un oggetto metallico in aria),
- **Fit preliminari** su sotto-finestre dei dati (es. il risultato del fit sull'intero intervallo come punto di partenza per il doppio esponenziale),
- **Ispezione visiva** della curva.
---
## 6. Metriche di qualità
### Coefficiente di determinazione R²
$$R^2 = 1 - \frac{\sum_i (y_i - \hat{y}_i)^2}{\sum_i (y_i - \bar{y})^2}$$
Misura la frazione di varianza dei dati spiegata dal modello. Valori vicini a 1 indicano un fit eccellente.
### Incertezze sui parametri
`curve_fit` restituisce la **matrice di covarianza** $C = (J^T J)^{-1} \sigma^2_{\text{res}}$. La deviazione standard del parametro $\theta_j$ è:
$$\sigma_{\theta_j} = \sqrt{C_{jj}}$$
Queste incertezze quantificano la sensibilità del fit alla variabilità dei dati e dipendono sia dalla qualità del modello sia dalla struttura dei residui.