mirosh111000

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

Mar 17th, 2026
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.78 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. D = 0.5
  9. Delta = (1.0 - D) / D
  10.  
  11. j_regular = 2
  12. j_degenerate = 3
  13. a_irregular = 2
  14.  
  15. zeta_0 = 1.0
  16. zeta_max = 5.0
  17. num_points = 500
  18.  
  19. u_degenerate = 0.35
  20. u_irregular = 0.85
  21.  
  22. output_dir = Path(__file__).resolve().parent
  23. output_png = output_dir / "pr3_hierarchical_connection_plot.png"
  24.  
  25.  
  26. def w_regular(zeta: np.ndarray, delta: float, zeta_start: float = 1.0) -> np.ndarray:
  27.     return np.exp(-delta * (zeta - zeta_start))
  28.  
  29.  
  30. def w_degenerate(zeta: np.ndarray, delta: float, u: float, zeta_start: float) -> np.ndarray:
  31.     base = 1.0 + u * np.log(zeta_start / zeta)
  32.     if np.any(base <= 0):
  33.         raise ValueError(
  34.             "Для виродженого дерева вираз у дужках став непозитивним. "
  35.             "Зменште u або звузьте діапазон ζ."
  36.         )
  37.     return np.power(base, delta)
  38.  
  39.  
  40. def w_irregular(zeta: np.ndarray, delta: float, u: float, zeta_start: float, a: float) -> np.ndarray:
  41.     base = 1.0 + u * ((zeta_start / zeta) ** (a - 1.0) - 1.0)
  42.     if np.any(base <= 0):
  43.         raise ValueError(
  44.             "Для нерегулярного дерева вираз у дужках став непозитивним. "
  45.             "Зменште u або звузьте діапазон ζ."
  46.         )
  47.     return np.power(base, delta)
  48.  
  49.  
  50. def main() -> None:
  51.     zeta = np.linspace(zeta_0, zeta_max, num_points)
  52.  
  53.     y_regular = w_regular(zeta, Delta, zeta_0)
  54.     y_degenerate = w_degenerate(zeta, Delta, u_degenerate, zeta_0)
  55.     y_irregular = w_irregular(zeta, Delta, u_irregular, zeta_0, a_irregular)
  56.  
  57.     plt.figure(figsize=(9, 5.5))
  58.     plt.plot(zeta, y_regular, label=f"Регулярне дерево (j={j_regular})")
  59.     plt.plot(zeta, y_degenerate, label=f"Вироджене дерево (j={j_degenerate})")
  60.     plt.plot(zeta, y_irregular, label=f"Нерегулярне дерево (a={a_irregular})")
  61.  
  62.     plt.xlabel("ζ")
  63.     plt.ylabel("w(ζ)")
  64.     plt.title("Порівняння функції ієрархічного зв'язку для трьох типів дерев")
  65.     plt.grid(True, alpha=0.35)
  66.     plt.legend()
  67.     plt.tight_layout()
  68.     plt.savefig(output_png, dpi=200)
  69.     plt.close()
  70.  
  71.     print("Файл Python виконано успішно.")
  72.     print(f"Графік збережено у: {output_png}")
  73.     print("Використані параметри:")
  74.     print(f"D = {D}")
  75.     print(f"Δ = {Delta}")
  76.     print(f"ζ0 = {zeta_0}")
  77.     print(f"u (вироджене дерево) = {u_degenerate}")
  78.     print(f"u (нерегулярне дерево) = {u_irregular}")
  79.     print(f"a = {a_irregular}")
  80.  
  81.  
  82. if __name__ == "__main__":
  83.     main()
Advertisement
Add Comment
Please, Sign In to add comment