Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import matplotlib.pyplot as plt
- def dx_dt(x, y):
- return -4*x - np.sin(y) + np.exp(y)
- def dy_dt(x, y):
- return 3*np.cos(x) + np.log(x) + 2*y
- # Розкладання в ряд Тейлора
- def linearize(x, y):
- A = np.array([[-4, -np.cos(y)], [-3*np.sin(x)/x, 2]])
- B = np.array([-np.exp(y), -3*np.sin(x) + 2*np.log(x)])
- return A, B
- stat_point = np.array([1, 0])
- print(f"Стаціонарна точка: ({stat_point[0]}, {stat_point[1]})")
- J, b = linearize(*stat_point)
- eigenvalues, eigenvectors = np.linalg.eig(J)
- print("lambda: ", eigenvalues)
- if eigenvalues[0] != eigenvalues[1] and np.iscomplexobj(eigenvalues[0]) == False:
- if (eigenvalues[0] < 0) and (eigenvalues[1] < 0):
- print(f'Харкатер точки спокою: стійкий визел ; Стійкість точки спокою: асимптотично стійка.')
- if (eigenvalues[0] > 0) and (eigenvalues[1] > 0):
- print(f'Харкатер точки спокою: нестійкий визел ; Стійкість точки спокою: нестійка.')
- if (eigenvalues[0] > 0 and eigenvalues[1] < 0) or (eigenvalues[0] < 0 and eigenvalues[1] > 0) :
- print(f'Харкатер точки спокою: сідло ; Стійкість точки спокою: нестійка.')
- elif np.iscomplexobj(eigenvalues[0]) == True:
- if (eigenvalues[0] < 0) and (eigenvalues[1] < 0):
- print(f'Харкатер точки спокою: стійкий фокус ; Стійкість точки спокою: асимптотично стійка.')
- if (eigenvalues[0] > 0) and (eigenvalues[1] > 0):
- print(f'Харкатер точки спокою: нестійкий фокус ; Стійкість точки спокою: нестійка.')
- if (eigenvalues[0] > 0 and eigenvalues[1] < 0) or (eigenvalues[0] < 0 and eigenvalues[1] > 0) :
- print(f'Харкатер точки спокою: центр ; Стійкість точки спокою: стійка.')
- else:
- if (eigenvalues[0] < 0) and (eigenvalues[1] < 0):
- print(f'Харкатер точки спокою: стійкий вузел ; Стійкість точки спокою: асимптотично стійка.')
- else:
- print(f'Харкатер точки спокою: нестійкий вузел ; Стійкість точки спокою: нестійка.')
- x = np.linspace(0.1, 2, 15)
- y = np.linspace(-2, 2, 15)
- X, Y = np.meshgrid(x, y)
- dx = dx_dt(X, Y)
- dy = dy_dt(X, Y)
- fig, ax = plt.subplots()
- ax.quiver(X, Y, dx, dy)
- ax.plot(stat_point[0], stat_point[1], 'ro')
- plt.xlabel('x')
- plt.ylabel('y')
- plt.title('Фазовий портрет')
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement