Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- from scipy.integrate import odeint
- import matplotlib.pyplot as plt
- import sympy as sp
- # Визначимо систему диференціальних рівнянь
- def system(y, t):
- x, z = y
- dxdt = x - z
- dzdt = 2 * (x - z) + 2
- return [dxdt, dzdt]
- # Визначимо матрицю Якобі для системи рівнянь
- def jacobian():
- dxdt_dx = 1
- dxdt_dy = -1
- dydt_dx = 2
- dydt_dy = -2
- return np.array([[dxdt_dx, dxdt_dy], [dydt_dx, dydt_dy]])
- x_range = np.linspace(-100, 100, 5)
- z_range = np.linspace(-100, 100, 5)
- plt.figure(figsize=(15, 10))
- for x0 in x_range:
- for z0 in z_range:
- y0 = [x0, z0] # Початкові значення [x0, z0]
- t = np.linspace(0, 30, 1000) # Часовий інтервал
- solution = odeint(system, y0, t)
- x, z = solution[:, 0], solution[:, 1]
- plt.plot(x, z)
- plt.xlabel('x')
- plt.ylabel('y')
- plt.grid()
- plt.show()
- # Визначимо символьні змінні
- x, y = sp.symbols('x y')
- # Визначимо систему рівнянь
- eq1 = x - y
- eq2 = 2 * (x - y) + 2
- # Знайдемо точки (де dx/dt = 0 і dy/dt = 0)
- solutions = sp.solve([eq1, eq2], (x, y))
- print("Точки вузла:")
- if len(solutions) != 0:
- for solution in solutions:
- print(f"x = {solution[x]}, y = {solution[y]}")
- else:
- print("Точок (де dx/dt = 0 і dy/dt = 0) не існує")
- try:
- # Знайдемо точки вузла (де dx/dt = 0 і dy/dt = 0)
- x_eq = solution[x]
- y_eq = solution[y] # значення x і y в точці
- # Обчислимо матрицю Якобі в точці вузла
- Jacobian = jacobian()
- # Знайдемо власні значення матриці Якобі
- eigenvalues = np.linalg.eigvals(Jacobian)
- print("Матриця Якобі:")
- print(Jacobian)
- print("Власні значення:")
- print(eigenvalues)
- except:
- print("Матриця Якобі:")
- print(Jacobian)
- print("Власних значень не існує")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement