Advertisement
mirosh111000

Завдання 2

May 31st, 2023
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.44 KB | None | 0 0
  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.gridspec as gridspec
  4. import matplotlib.pyplot as plt
  5.  
  6. def dx_dt(x, y):
  7.     return x * ( eps_x - gamma_x * y )
  8.  
  9. def dy_dt(x, y):
  10.     return - y * ( eps_y - gamma_y * x )
  11.  
  12.  
  13. def runge_kute_system(x, y, h, a, b):
  14.     X = [x]
  15.     Y = [y]
  16.     X_Y = []
  17.  
  18.     # print(f'h = {h}')
  19.     t = a
  20.     # print(f't = {t}  |  x = {x}  |  y = {y}')
  21.     while round(t, 3) <= b:
  22.         t = t + h
  23.  
  24.         k1 = h * dx_dt(x, y)
  25.         k2 = h * dx_dt(x + h / 2, y + k1 / 2)
  26.         k3 = h * dx_dt(x + h / 2, y + k2 / 2)
  27.         k4 = h * dx_dt(x + h, y + k3)
  28.         dx = (k1 + 2 * k2 + 2 * k3 + k4) / 6
  29.         x += dx
  30.         X.append(x)
  31.  
  32.         r1 = h * dy_dt(x, y)
  33.         r2 = h * dy_dt(x + h / 2, y + k1 / 2)
  34.         r3 = h * dy_dt(x + h / 2, y + k2 / 2)
  35.         r4 = h * dy_dt(x + h, y + k3)
  36.         dy = (r1 + 2 * r2 + 2 * r3 + r4) / 6
  37.         y += dy
  38.         Y.append(y)
  39.  
  40.         # print(f't = {t:.3f}  |  x = {x:.3f}  |  y = {y:.3f}')
  41.  
  42.     X_Y.append(X)
  43.     X_Y.append(Y)
  44.  
  45.     # print('\n------------------------------------------------------------\n')
  46.     return X_Y
  47.  
  48.  
  49. def grafik(k=3):
  50.     plt.title(f"gamma_x={gamma_x}; gamma_y={gamma_y}; e_x={eps_x}; e_y={eps_y}")
  51.     plt.xlabel("x(t)")
  52.     plt.ylabel("y(t)")
  53.     plt.grid()
  54.     lines = []
  55.     labels = []
  56.     for i in dani:
  57.         x_y = runge_kute_system(i[0], i[1], i[2], i[3], i[4])
  58.         line, = plt.plot(x_y[0], x_y[1])
  59.         lines.append(line)
  60.         labels.append(f'x_0={i[0]}; y_0={i[1]}; h={i[2]}')
  61.     plt.legend(lines, labels, loc='center left', bbox_to_anchor=(1, 0.5))
  62.     plt.show()
  63.  
  64.     if k == 3:
  65.         plt.title(f"x(t) (gamma_x={gamma_x}; gamma_y={gamma_y}; e_x={eps_x}; e_y={eps_y})")
  66.         plt.xlabel("t")
  67.         plt.ylabel("x")
  68.         plt.grid()
  69.         lines = []
  70.         labels = []
  71.         for i in dani:
  72.             x_y = runge_kute_system(i[0], i[1], i[2], i[3], i[4])
  73.             plt.plot(np.arange(a, b+2*h, h), x_y[0], label=f'x(t); x_0={i[0]}; y_0={i[1]}; h={i[2]}')
  74.         plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))
  75.         plt.show()
  76.  
  77.         plt.title(f"y(t) (gamma_x={gamma_x}; gamma_y={gamma_y}; e_x={eps_x}; e_y={eps_y})")
  78.         plt.xlabel("t")
  79.         plt.ylabel("y")
  80.         plt.grid()
  81.         lines = []
  82.         labels = []
  83.         for i in dani:
  84.             x_y = runge_kute_system(i[0], i[1], i[2], i[3], i[4])
  85.             plt.plot(np.arange(a, b + 2 * h, h), x_y[1], label=f'y(t); x_0={i[0]}; y_0={i[1]}; h={i[2]}')
  86.         plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))
  87.         plt.show()
  88.  
  89.  
  90. def info(eps_x, eps_y, gamma_x, gamma_y):
  91.    
  92.     A = np.array([[0, - (eps_y * gamma_y)/gamma_x],
  93.                   [(eps_x * gamma_x)/gamma_y, 0]])
  94.     B = np.array([eps_y/gamma_x, eps_x/gamma_y])
  95.     stat_point = np.array([eps_y/gamma_x, eps_x/gamma_y])
  96.     print(f"Стаціонарна точка: ({stat_point[0]}, {stat_point[1]})")
  97.     eigenvalues, eigenvectors = np.linalg.eig(A)
  98.     print("lambda: ", eigenvalues)
  99.  
  100.     if eigenvalues[0] != eigenvalues[1] and np.iscomplexobj(eigenvalues[0]) == False:
  101.  
  102.         if (eigenvalues[0] < 0) and (eigenvalues[1] < 0):
  103.             print(f'Харкатер точки спокою: стійкий вузол ; Стійкість точки спокою: асимптотично стійка.')
  104.  
  105.         if (eigenvalues[0] > 0) and (eigenvalues[1] > 0):
  106.             print(f'Харкатер точки спокою: нестійкий вузол ; Стійкість точки спокою: нестійка.')
  107.  
  108.         if (eigenvalues[0] > 0 and eigenvalues[1] < 0) or (eigenvalues[0] < 0 and eigenvalues[1] > 0):
  109.             print(f'Харкатер точки спокою: сідло ; Стійкість точки спокою: нестійка.')
  110.  
  111.     elif np.iscomplexobj(eigenvalues[0]) == True:
  112.  
  113.         if (eigenvalues[0] < 0) and (eigenvalues[1] < 0):
  114.             print(f'Харкатер точки спокою: стійкий фокус ; Стійкість точки спокою: асимптотично стійка.')
  115.  
  116.         if (eigenvalues[0] > 0) and (eigenvalues[1] > 0):
  117.             print(f'Харкатер точки спокою: нестійкий фокус ; Стійкість точки спокою: нестійка.')
  118.  
  119.         if (eigenvalues[0] > 0 and eigenvalues[1] < 0) or (eigenvalues[0] < 0 and eigenvalues[1] > 0):
  120.             print(f'Харкатер точки спокою: центр ; Стійкість точки спокою: стійка.')
  121.  
  122.     else:
  123.         if (eigenvalues[0] < 0) and (eigenvalues[1] < 0):
  124.             print(f'Харкатер точки спокою: стійкий вузол ; Стійкість точки спокою: асимптотично стійка.')
  125.  
  126.         else:
  127.             print(f'Харкатер точки спокою: нестійкий вузол ; Стійкість точки спокою: нестійка.')
  128.     return stat_point
  129.  
  130. eps_x = 4
  131. gamma_x = 0.3
  132. eps_y = 0.4
  133. gamma_y = 0.4
  134.  
  135.  
  136. h = 0.001
  137. a = 0
  138. b = 60
  139.  
  140. point = info(eps_x, eps_y, gamma_x, gamma_y)
  141. dani = [[0.01, 2.0, h, a, b],
  142.         [0.01, 0.01, h, a, b],
  143.         [1.2, 1.0, h, a, b],
  144.         [0.01, 0.5, h, a, b],
  145.         [0.01, 1.0, h, a, b],
  146.         [1.2, 0.6, h, a, b],
  147.         [0.01, 1.5, h, a, b],
  148.         [0.01, 0.2, h, a, b],
  149.         [0.0, 0.0, h, a, b]]
  150.  
  151.  
  152.  
  153. grafik()
  154. eps_x = 1
  155. point = info(eps_x, eps_y, gamma_x, gamma_y)
  156.  
  157. grafik()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement