diff --git a/plot_temperatura.png b/plot_temperatura.png new file mode 100644 index 0000000..a940d18 Binary files /dev/null and b/plot_temperatura.png differ diff --git a/plot_temperatura.py b/plot_temperatura.py index 94c8aaf..c1efe57 100644 --- a/plot_temperatura.py +++ b/plot_temperatura.py @@ -17,4 +17,5 @@ ax.legend() ax.grid(True, alpha=0.3) plt.tight_layout() +plt.savefig("plot_temperatura.png", dpi=150, bbox_inches="tight") plt.show() diff --git a/report.md b/report.md index 2d04a22..c5bddd7 100644 --- a/report.md +++ b/report.md @@ -5,9 +5,22 @@ Finestra di osservazione: **0.2 s → 133.7 s** (133.5 s totali, 888 campioni). --- -## 1. Temperatura ambiente T∞ +## 1. Dati e analisi preliminare -### Metodologia +### 1.1 Dati grezzi + +Il grafico seguente riporta il profilo termico completo acquisito dal sensore IR, a partire da t = 105 s. +Sono mostrate le due curve: temperatura ambiente e temperatura della scatola. + +![Profilo termico grezzo](plot_temperatura.png) + +*Temperatura ambiente (blu) e temperatura scatola (arancione).* + +--- + +### 1.2 Temperatura ambiente T∞ + +#### Metodologia `T_inf` è usata come temperatura di equilibrio nel modello di raffreddamento. È calcolata come **media ponderata sul tempo** sull'intera finestra di osservazione, con la regola dei trapezi: @@ -16,7 +29,7 @@ $$T_{\infty} = \frac{\int_{t_i}^{t_f} T_{amb}(t)\, dt}{t_f - t_i}$$ Questo approccio è corretto con campionamento non uniforme: ogni campione pesa proporzionalmente all'intervallo di tempo che copre. -### Risultati +#### Risultati | Parametro | Valore | |---|---| diff --git a/report.tex b/report.tex new file mode 100644 index 0000000..d3ee20f --- /dev/null +++ b/report.tex @@ -0,0 +1,194 @@ +\documentclass[12pt,a4paper]{article} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage[italian]{babel} +\usepackage{amsmath} +\usepackage{graphicx} +\usepackage{booktabs} +\usepackage{geometry} +\usepackage{caption} +\usepackage{hyperref} + +\geometry{margin=2.5cm} + +\title{\textbf{Analisi termica} \\ \large Scatola su linea di forno} +\author{} +\date{} + +\begin{document} + +\maketitle + +Campionamento IR della temperatura di una scatola che attraversa un forno su linea di produzione. +Finestra di osservazione: \textbf{0.2\,s $\rightarrow$ 133.7\,s} (133.5\,s totali, 888 campioni). + +% ───────────────────────────────────────────── +\section{Dati e analisi preliminare} + +\subsection{Dati grezzi} + +Il grafico seguente riporta il profilo termico completo acquisito dal sensore IR, a partire da $t = 105\,\mathrm{s}$. +Sono mostrate le due curve: temperatura ambiente ($T_{\mathrm{amb}}$) e temperatura della scatola ($T_{\mathrm{obj}}$). + +\begin{figure}[h!] + \centering + \includegraphics[width=\textwidth]{plot_temperatura.png} + \caption{Profilo termico grezzo: temperatura ambiente (blu) e temperatura scatola (arancione).} +\end{figure} + +% ───────────────────────────────────────────── +\subsection{Temperatura ambiente $T_\infty$} + +\subsubsection*{Metodologia} + +$T_\infty$ è usata come temperatura di equilibrio nel modello di raffreddamento. +È calcolata come \textbf{media ponderata sul tempo} sull'intera finestra di osservazione, con la regola dei trapezi: + +\begin{equation} + T_{\infty} = \frac{\int_{t_i}^{t_f} T_{\mathrm{amb}}(t)\,dt}{t_f - t_i} +\end{equation} + +Questo approccio è corretto con campionamento non uniforme: ogni campione pesa proporzionalmente all'intervallo di tempo che copre. + +\subsubsection*{Risultati} + +\begin{table}[h!] +\centering +\begin{tabular}{ll} +\toprule +Parametro & Valore \\ +\midrule +$T_{\mathrm{amb}}$ minima & 22.60\,°C \\ +$T_{\mathrm{amb}}$ massima & 23.80\,°C \\ +\textbf{$T_\infty$ (media ponderata)} & \textbf{22.99\,°C} \\ +\bottomrule +\end{tabular} +\end{table} + +% ───────────────────────────────────────────── +\section{Raffreddamento} + +Il profilo di raffreddamento è modellato con la legge di raffreddamento di Newton: + +\begin{equation} + T(t) = T_{\infty} + A \cdot e^{-\frac{t - t_0}{\tau}} +\end{equation} + +con $T_{\infty} = 22.99\,°C$ fisso. Il metodo di stima è in tutti i casi \textbf{Nonlinear Least Squares con Trust Region Reflective (TRF)} (\texttt{scipy.optimize.curve\_fit(..., method="trf")}). + +% ───────────────────────────────────────────── +\subsection{Raffreddamento intero} + +Fit sulla finestra completa $t_0 = 115.0\,\mathrm{s} \rightarrow$ fine osservazione, con pesi espliciti per escludere la zona di transizione in uscita dal forno. + +\begin{table}[h!] +\centering +\caption{Schema dei pesi} +\begin{tabular}{lll} +\toprule +Intervallo & Peso & Motivazione \\ +\midrule +$[115.0,\ 115.9)$\,s & $w = 1$ & Raffreddamento regolare \\ +$[115.9,\ 117.2]$\,s & $w = 0\ (\sigma = 10^{10})$ & Errore di misura \\ +$(117.2,\ \mathrm{fine}]$\,s & $w = 1$ & Raffreddamento regolare \\ +\bottomrule +\end{tabular} +\end{table} + +I punti nella zona esclusa ricevono peso nullo: assegnando $\sigma = 10^{10}$ il termine $(\mathrm{residuo}/\sigma)^2 \rightarrow 0$, rendendoli ininfluenti sul costo del fit. Entrambi i parametri $A$ e $\tau$ sono liberi. + +\begin{table}[h!] +\centering +\caption{Parametri stimati — Raffreddamento intero} +\begin{tabular}{lll} +\toprule +Parametro & Descrizione & Valore \\ +\midrule +$A$ & Sovratemperatura iniziale & $185.18 \pm 0.27\,°C$ \\ +$\tau$ & Costante di tempo & $16.27 \pm 0.05\,\mathrm{s}$ \\ +\bottomrule +\end{tabular} +\end{table} + +\textbf{Curva stimata:} +\begin{equation} + T(t) = 22.99 + 185.18 \cdot e^{-\frac{t - 115.0}{16.27}} \quad [°C] +\end{equation} + +\textbf{Bontà del fit:} $R^2 = 0.9938$ (calcolato solo sui punti con peso pieno). + +\begin{figure}[h!] + \centering + \includegraphics[width=\textwidth]{fit_raffreddamento_intero.png} + \caption{Raffreddamento intero: dati raw (blu), zona esclusa (arancione), curva di fit TRF (rosso tratteggiato).} +\end{figure} + +\clearpage + +% ───────────────────────────────────────────── +\subsection{Raffreddamento 1° tratto} + +Fit sul primo sotto-tratto $[115.0,\ 115.9\,\mathrm{s}]$, la finestra precedente alla zona di transizione. Pesi uniformi ($w = 1$ su tutti i punti). Parametri liberi: $A$, $\tau$. + +\begin{table}[h!] +\centering +\caption{Parametri stimati — 1° tratto} +\begin{tabular}{lll} +\toprule +Parametro & Descrizione & Valore \\ +\midrule +$A$ & Sovratemperatura iniziale & $194.51\,°C$ \\ +$\tau$ & Costante di tempo & $13.17\,\mathrm{s}$ \\ +\bottomrule +\end{tabular} +\end{table} + +\textbf{Curva stimata:} +\begin{equation} + T(t) = 22.99 + 194.51 \cdot e^{-\frac{t - 115.0}{13.17}} \quad [°C] +\end{equation} + +\textbf{Bontà del fit:} $R^2 = 0.9998$. + +\begin{figure}[h!] + \centering + \includegraphics[width=\textwidth]{fit_raffreddamento_1tratto.png} + \caption{1° tratto $[115.0\text{--}115.9\,\mathrm{s}]$: dati raw (blu) e curva di fit (rosso tratteggiato).} +\end{figure} + +\clearpage + +% ───────────────────────────────────────────── +\subsection{Raffreddamento 2° tratto} + +Fit sul solo tratto di raffreddamento stazionario, a partire dall'istante in cui la scatola ha completato l'uscita dal forno. In questa finestra i dati seguono il modello esponenziale senza discontinuità, quindi non sono necessari pesi espliciti. + +Finestra: $t_0 = 117.5\,\mathrm{s} \rightarrow$ fine osservazione. Pesi uniformi ($w = 1$). Parametri liberi: $A$, $\tau$. + +\begin{table}[h!] +\centering +\caption{Parametri stimati — 2° tratto} +\begin{tabular}{lll} +\toprule +Parametro & Descrizione & Valore \\ +\midrule +$A$ & Sovratemperatura iniziale & $154.94\,°C$ \\ +$\tau$ & Costante di tempo & $17.12\,\mathrm{s}$ \\ +\bottomrule +\end{tabular} +\end{table} + +\textbf{Curva stimata:} +\begin{equation} + T(t) = 22.99 + 154.94 \cdot e^{-\frac{t - 117.5}{17.12}} \quad [°C] +\end{equation} + +\textbf{Bontà del fit:} $R^2 = 0.9981$ — il modello spiega il 99.81\% della varianza, fit eccellente. + +\begin{figure}[h!] + \centering + \includegraphics[width=\textwidth]{fit_raffreddamento_2tratto.png} + \caption{2° tratto $[117.5\,\mathrm{s}\text{--fine}]$: dati raw (blu) e curva di fit (rosso tratteggiato).} +\end{figure} + +\end{document}