mirosh111000

НПтаМ_ПР№4_Мірошниченко

Mar 23rd, 2026
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.77 KB | None | 0 0
  1. from __future__ import annotations
  2.  
  3. from pathlib import Path
  4.  
  5. import matplotlib.pyplot as plt
  6. import numpy as np
  7.  
  8.  
  9. def build_curves() -> tuple[np.ndarray, dict[str, np.ndarray]]:
  10.     T_over_Q = 2.0
  11.     Q_over_T = 1.0 / T_over_Q
  12.     l0 = 2.0
  13.     a = 2.0
  14.     D = 2.0
  15.  
  16.     beta = 1.0 / (1.0 + Q_over_T)
  17.     gamma = T_over_Q * (D - 1.0)
  18.  
  19.     x = np.logspace(np.log10(5.0), np.log10(500.0), 500)
  20.  
  21.     curves = {
  22.         "Дебаївська експонента": np.exp(-x),
  23.         "Закон Колерауша": np.exp(-(x ** beta)),
  24.         r"$\exp\!\left(-\left[(T/Q)\ln x\right]^{1/a}\right)$": np.exp(-((T_over_Q * np.log(x)) ** (1.0 / a))),
  25.         r"$[(T/Q)\ln x]^{-1/l_0}$": (T_over_Q * np.log(x)) ** (-1.0 / l0),
  26.         r"$x^{-\gamma}$": x ** (-gamma),
  27.         r"$[(T/Q)\ln x]^{-D/a}$": (T_over_Q * np.log(x)) ** (-D / a),
  28.         r"$[\ln((T/Q)\ln x)]^{-D}$": np.log(T_over_Q * np.log(x)) ** (-D),
  29.     }
  30.  
  31.     return x, curves
  32.  
  33.  
  34. def make_plot(output_path: str | Path = "pr4_asymptotics_from_python.png", show: bool = True) -> Path:
  35.     x, curves = build_curves()
  36.     output_path = Path(output_path)
  37.  
  38.     plt.figure(figsize=(8.4, 5.2))
  39.     for label, y in curves.items():
  40.         plt.plot(x, y, label=label)
  41.  
  42.     plt.xscale("log")
  43.     plt.xlabel(r"$x=t/\tau_0$")
  44.     plt.ylabel("S(x)")
  45.     plt.title("Порівняння часових асимптотик структурного фактора")
  46.     plt.grid(True, which="both", alpha=0.25)
  47.     plt.legend()
  48.     plt.tight_layout()
  49.     plt.savefig(output_path, dpi=200)
  50.  
  51.     if show:
  52.         plt.show()
  53.     else:
  54.         plt.close()
  55.  
  56.     return output_path
  57.  
  58.  
  59. if __name__ == "__main__":
  60.     saved_to = make_plot()
  61.     print(f"Графік збережено у файл: {saved_to.resolve()}")
  62.  
Advertisement
Add Comment
Please, Sign In to add comment