diff --git a/scripts/results.py b/scripts/results.py new file mode 100644 index 0000000..c5a2aa5 --- /dev/null +++ b/scripts/results.py @@ -0,0 +1,50 @@ +import pandas as pd +import matplotlib.pyplot as plt + + +def export_component_comparison( + rk4_path: str, + ab2_path: str, + component: str, + ylabel: str, + out_name: str, +): + """ + Строит график зависимости одной компоненты x_i(t) от времени, + на котором результаты метода Рунге--Кутты и метода Адамса--Башфорта + представлены на общей координатной плоскости (п.4 базовой части задания). + """ + df_rk4 = pd.read_csv(rk4_path) + df_ab2 = pd.read_csv(ab2_path) + + t_rk4, y_rk4 = df_rk4["t"].values, df_rk4[component].values + t_ab2, y_ab2 = df_ab2["t"].values, df_ab2[component].values + + plt.figure(figsize=(10, 6)) + + plt.plot(t_rk4, y_rk4, label="Рунге--Кутты 4-го порядка", + linewidth=2.2, color="#1f77b4") + plt.plot(t_ab2, y_ab2, label="Адамса--Башфорта 2-го порядка", + linewidth=1.8, color="#ff7f0e", linestyle="--") + + plt.xlabel("t", fontsize=12) + plt.ylabel(ylabel, fontsize=12) + plt.grid(True, which="both", linestyle="--", alpha=0.6) + plt.legend(fontsize=11, loc="best", framealpha=0.9) + + t_min = min(t_rk4.min(), t_ab2.min()) + t_max = max(t_rk4.max(), t_ab2.max()) + plt.xlim(t_min - 0.1, t_max + 0.1) + plt.ylim(-0.02, 1.05) + + plt.tight_layout() + plt.savefig(f"figures/{out_name}.png", dpi=300) + plt.close() + + +RK4_CSV = "../build/bin/results/runge_kutta_plugin.csv" +AB2_CSV = "../build/bin/results/adams_bashforth_plugin.csv" + +export_component_comparison(RK4_CSV, AB2_CSV, "x1", r"$x_1(t)$", "x1_comparison") +export_component_comparison(RK4_CSV, AB2_CSV, "x2", r"$x_2(t)$", "x2_comparison") +export_component_comparison(RK4_CSV, AB2_CSV, "x3", r"$x_3(t)$", "x3_comparison")