Riscaldamento e raffreddamento esponenziali con c e tau condivisi; grafici per dominio nel report
- modelli per tipo di dominio ([fit.modelli_per_tipo]) - nei domini di riscaldamento c e tau fissati ai valori del raffreddamento - un grafico dati/modelli per dominio e serie, incorporato in report.md Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
d4fbd02a51
commit
b8c8aeb60e
11 files changed
+167
-58
No files matched your search
@@ -77,11 +77,12 @@ Tutto in `lavoro/` (ignorata da git):
|
||||
|---|---|
|
||||
| `domini.toml` | proposta dei domini (o quelli che hai usato) |
|
||||
| `dati.csv` | copia del CSV analizzato |
|
||||
| `out/report.md` | per dominio e serie: modello scelto, parametri ± IC 95 %, metriche, tabella di confronto di tutti i modelli |
|
||||
| `out/report.md` | con i grafici incorporati (si vede bene in un visualizzatore Markdown); per dominio e serie: modello scelto, parametri ± IC 95 %, metriche, tabella di confronto di tutti i modelli |
|
||||
| `out/equazioni.md` | solo le equazioni scelte |
|
||||
| `out/modello_finale.json` | modello e parametri per dominio e serie (input di `valuta`) |
|
||||
| `out/risultati.json` | tutti i fit con tutte le metriche |
|
||||
| `out/fit_<serie>.png` | dati, fit a tratti (un colore per tipo di dominio) e residui |
|
||||
| `out/fit_<serie>.png` | panoramica: dati, fit a tratti (un colore per tipo di dominio) e residui |
|
||||
| `out/dominio<k>_<serie>.png` | un grafico per dominio e serie: dati grezzi contro il modello scelto (rosso) e gli altri modelli validi (tratteggiati), più residui; i campioni esclusi dal fit sono in grigio |
|
||||
|
||||
### Come leggere il report
|
||||
|
||||
@@ -93,7 +94,7 @@ Tutto in `lavoro/` (ignorata da git):
|
||||
## Come funziona
|
||||
|
||||
1. **Domini**: un salto positivo tra due campioni consecutivi sopra `soglia_gradino_c` è un gradino di riscaldamento. Prima del primo gradino il dominio è `riposo`, tra due gradini `riscaldamento`, dopo l'ultimo `raffreddamento`.
|
||||
2. **Fit**: in ogni dominio, con il tempo traslato a `t' = t − t0`, si fittano tutti i modelli di `modelli_abilitati` con `scipy.optimize.least_squares` e perdita robusta.
|
||||
2. **Fit**: in ogni dominio, con il tempo traslato a `t' = t − t0`, si fittano i modelli del suo tipo con `scipy.optimize.least_squares` e perdita robusta. Riscaldamento e raffreddamento sono esponenziali; nel riscaldamento `c` e `τ` sono fissati ai valori del raffreddamento (i tratti sono troppo corti per stimarli) e si stima solo l'ampiezza.
|
||||
3. **Scelta**: regola automatica (SPEC §5.3), senza intervento umano.
|
||||
|
||||
Dettagli, modelli e limiti: [docs/SPEC.md](docs/SPEC.md). Uso esteso: [docs/USO.md](docs/USO.md).
|
||||
@@ -109,7 +110,7 @@ Dettagli, modelli e limiti: [docs/SPEC.md](docs/SPEC.md). Uso esteso: [docs/USO.
|
||||
| `esp_doppio` | `y = c + A1·exp(−t'/τ1) + A2·exp(−t'/τ2)` |
|
||||
| `logistica` | `y = c + A / (1 + exp(−(t'−t_m)/w))` |
|
||||
|
||||
Per aggiungerne uno: nuova voce in `MODELLI` di [src/fitseg/modelli.py](src/fitseg/modelli.py), nuova riga in SPEC §4 e nome in `modelli_abilitati`.
|
||||
Per aggiungerne uno: nuova voce in `MODELLI` di [src/fitseg/modelli.py](src/fitseg/modelli.py), nuova riga in SPEC §4 e nome nelle liste di `[fit.modelli_per_tipo]` dei tipi di dominio in cui va provato.
|
||||
|
||||
## Configurazione
|
||||
|
||||
@@ -120,7 +121,8 @@ Tutti i valori sono in [config.toml](config.toml); non c'è nessun default nel c
|
||||
| `[domini] soglia_gradino_c` | salto minimo che segna un gradino (20 °C); da adattare se i gradini reali sono più piccoli |
|
||||
| `[domini] scarta_dopo_salto_n` | campioni esclusi all'inizio di un dominio dopo un gradino (transizione del sensore) |
|
||||
| `[domini] n_min_punti` | campioni minimi per dominio |
|
||||
| `[fit] modelli_abilitati` | modelli provati in ogni dominio |
|
||||
| `[fit.modelli_per_tipo]` | modelli provati per tipo di dominio (riposo: costante/lineare/esponenziale; riscaldamento e raffreddamento: esponenziale) |
|
||||
| `[fit] riscaldamento_fissa_da_raffreddamento` | parametri dei domini di riscaldamento fissati al valore del raffreddamento (`["c", "tau"]`; `[]` = liberi) |
|
||||
| `[fit] soglia_delta_aicc` | entro questa differenza vince il modello con meno parametri |
|
||||
| `[fit] rmse_vs_rumore_max` | soglia di «adeguato» (RMSE ≤ valore × σ rumore) |
|
||||
| `[fit] seed` | seme delle partenze multiple: stessi dati e stessa config danno gli stessi risultati |
|
||||
@@ -131,7 +133,7 @@ Tutti i valori sono in [config.toml](config.toml); non c'è nessun default nel c
|
||||
.venv/bin/pytest # tutti
|
||||
.venv/bin/pytest -k raffreddamento # uno solo
|
||||
```
|
||||
I test verificano, sui seed 1–3, che i domini siano `riposo, riscaldamento, riscaldamento, raffreddamento`, che nel raffreddamento vinca `esp_decad` con τ entro il 10 % di 15.9 s e che il riposo sia `costante`. Richiedono `dati/gen_1.csv`, `gen_2.csv`, `gen_3.csv` (vedi sopra).
|
||||
I test verificano, sui seed 1–3, che i domini siano `riposo, riscaldamento, riscaldamento, raffreddamento`, che nel raffreddamento vinca `esp_decad` con τ entro il 10 % di 15.9 s, che nel riscaldamento sia `esp_decad` con `c` e `τ` del raffreddamento e che il riposo sia `costante`. Richiedono `dati/gen_1.csv`, `gen_2.csv`, `gen_3.csv` (vedi sopra).
|
||||
|
||||
## Codici di uscita
|
||||
|
||||
@@ -140,6 +142,6 @@ I test verificano, sui seed 1–3, che i domini siano `riposo, riscaldamento, ri
|
||||
## Limiti noti
|
||||
|
||||
- Nel raffreddamento i residui sono autocorrelati (ACF1 ≈ 0.7) per scarti casuali e deriva lenta del sensore: i parametri sono buoni, ma gli intervalli di confidenza sono troppo stretti e il dominio risulta «non adeguato».
|
||||
- I domini di riscaldamento sono corti (2–4 s): il decadimento è quasi lineare e τ non è identificabile; vince un modello semplice, con valore descrittivo e non fisico.
|
||||
- I domini di riscaldamento sono corti (2–4 s): τ non è identificabile da solo e viene preso dal raffreddamento; gli IC di `A` sono condizionati a quei valori fissi.
|
||||
- Ogni dominio è fittato in modo indipendente: nessun vincolo di continuità tra domini.
|
||||
- Provato su 3 seed; non su file senza gradini o con un solo gradino.
|
||||
Reference in new issue
Block a user