Решение системы дифференциальных уравнений с ориентациейPython

Программы на Python
Anonymous
Решение системы дифференциальных уравнений с ориентацией

Сообщение Anonymous »

Я пытался решить систему двух дифференциальных уравнений с помощью scipy.integrate.odient.
Результаты далеки от моих ожиданий, как видно из графиков, которые я приложил ниже.
Буду благодарен за любая помощь.
начальное знакомство с системой ODE.
Это система ODE
, где Функции альфа и бета являются функциями времени t и представляют функцию входного сигнала.
мои графики для сигналов в моем коде:
Ожидаемые графики
мой код:

Код: Выделить всё


import numpy as np
from scipy.integrate import odeint ,solve_ivp
import matplotlib.pyplot as plt

def normalize_array(A):
# Convert to NumPy array if it's not already
A = np.array(A)

# Calculate min and max
min_val = np.min(A)
max_val = np.max(A)

# Normalize
if max_val == min_val:
# Avoid division by zero if all values are the same
return np.zeros_like(A)
else:
return (A - min_val) / (max_val - min_val)
def solve_system_of_ODE(init_vec,t,alpha_func,beth_func,gamma,delta):

# Define the system of differential equations
def system(init_vec,t,alpha_func,beth_func,gamma,delta):
x,A = init_vec
dydt = [alpha_func(t)*(A-x)-beth_func(t)*x-gamma*x+delta*(1-A),
delta*(1-A)-gamma*x]
return dydt

# Solve the system of differential equations
solution = odeint(system,init_vec,t,args=(alpha_func,beth_func,gamma,delta))
return solution

# Initial conditions
init_vec = [0,0]

# Time points where the solution is evaluated
t = np.linspace(0,50,500)

signals=[lambda t: 1 / (1 + np.exp(-5 * (t - 10))),
lambda t: 0.3*np.sin(t/3)+ 0.25*np.sin(t/2)+np.sin(t/5)+np.sin(t/10),
lambda t: np.sin(t/3)]
n_signals=len(signals)

delta=0.2
gamma=0.4

X_lst,A_lst=[],[]
for i in range(len(signals)):
alpha=signals[i]
beth=signals[i]
solution=solve_system_of_ODE(init_vec,t,alpha,beth,gamma,delta)

X = solution[:,0]
X=normalize_array(X)
A = solution[:,1]
A=normalize_array(A)

X_lst.append(X)
A_lst.append(A)

fig, axes = plt.subplots(2, n_signals, figsize=(10, 5))

for i in range(len(signals)):
y=signals[i](t)
axes[0,i].plot(t,y)
axes[0, i].set_title(f" signal({i+1})")
axes[0, i].grid(True)
axes[0, i].set_xlabel('t')
axes[0, i].set_ylabel('u(t)')

#plot the results
axes[1,i].plot(t, X_lst[i], label='X(t)')
axes[1,i].plot(t, A_lst[i], label='A(t)')
axes[1,i].set_title('Solutions ')
axes[1,i].set_xlabel('t')
axes[1,i].set_ylabel('Solutions X, A')
axes[1, i].grid(True)
axes[1, i].legend()

plt.tight_layout()
plt.show()
Я пытался изменить исходное состояние системы ODE - но мне это не помогло.

Подробнее здесь: https://stackoverflow.com/questions/787 ... ith-odient

Вернуться в «Python»