- fit_doppio_esponenziale.py: modello T∞ + A1·exp + A2·exp con TRF, pesi nulli su [115.9–117.2 s], R²=0.9991 - plot_confronto_fit.py: sovrapposizione dei fit singoli sui dati raw, motivazione visiva per la combinazione lineare - report.md: sezione 2.4 con motivazione, equazione, parametri stimati e grafici
43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
import pandas as pd
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
|
|
# --- Dati ---
|
|
df = pd.read_csv("data.csv")
|
|
df["time_s"] = df["time since start [ms]"] / 1000.0
|
|
df_plot = df[df["time_s"] >= 114]
|
|
|
|
# --- Parametri fit ---
|
|
T_INF = 22.99
|
|
t_full = np.linspace(114, df["time_s"].max(), 1000)
|
|
|
|
# 1° tratto: t0=115.0, A=194.51, tau=13.17
|
|
T_curve_1 = T_INF + 194.51 * np.exp(-(t_full - 115.0) / 13.17)
|
|
|
|
# 2° tratto: t0=117.5, A=154.94, tau=17.12
|
|
T_curve_2 = T_INF + 154.94 * np.exp(-(t_full - 117.5) / 17.12)
|
|
|
|
# --- Plot ---
|
|
fig, ax = plt.subplots(figsize=(12, 5))
|
|
|
|
ax.plot(df_plot["time_s"], df_plot["temp_obj IR [C]"],
|
|
color="steelblue", linewidth=0.8, label="Dati raw (temp_obj)")
|
|
ax.plot(t_full, T_curve_1,
|
|
color="tomato", linewidth=2, linestyle="--",
|
|
label=r"Fit 1° tratto: $22.99 + 194.51\cdot e^{-(t-115)/13.17}$")
|
|
ax.plot(t_full, T_curve_2,
|
|
color="seagreen", linewidth=2, linestyle="--",
|
|
label=r"Fit 2° tratto: $22.99 + 154.94\cdot e^{-(t-117.5)/17.12}$")
|
|
ax.axvspan(115.0, 115.9, color="tomato", alpha=0.10, label="Finestra fit 1° tratto")
|
|
ax.axvspan(117.5, df["time_s"].max(), color="seagreen", alpha=0.07, label="Finestra fit 2° tratto")
|
|
|
|
ax.set_xlabel("Tempo [s]")
|
|
ax.set_ylabel("Temperatura [°C]")
|
|
ax.set_title("Confronto curve di fit sui dati raw")
|
|
ax.legend(fontsize=8)
|
|
ax.grid(True, alpha=0.3)
|
|
|
|
plt.tight_layout()
|
|
plt.savefig("plot_confronto_fit.png", dpi=150, bbox_inches="tight")
|
|
plt.show()
|