Как код Python Распределенная задержка дифференциальной системы в Python?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как код Python Распределенная задержка дифференциальной системы в Python?

Сообщение Anonymous »

уже попробовал с DDEINT, не дает хороших результатов. У меня есть эквивалентная система PDE, которая отлично работает, и я могу сравнить результаты. Ключом проблемы является то, что система связана, поэтому я вычисляю ядро ​​и нормализую его до цикла для цикла, однако кажется, что вклады ядра таковы, что ожидаемого распада очень недостаточно. Код, который я использую, < /p>
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('QtAgg') # or 'QtAgg' if available
from tqdm import tqdm

def X_equation(x, y_delta, m, k1, K, q1):
return k1 / (K**m + (y_delta)**m) - q1*x

def Y_equation(x, y, q2, k2):
return k2*x - q2*y

def kernel(tau, D, mu, Delta):
return (1/(np.pi*D*tau)**0.5)*np.exp(-Delta**2 /(4*D*tau) - mu*tau)

k1 = 0.1
K = 1.0
m = 6.0
q1 = 0.03
q2 = 0.03
k2 = 0.1
D = 0.06
mu = 0.0
Delta = 7.5

mu_values = [0.0]

t_span = (0, 1000)
dt = 0.01
t_steps = int(t_span[-1]/dt)

X = np.zeros([t_steps, len(mu_values)])
Y = np.zeros([t_steps, len(mu_values)])
Yprima = np.zeros_like(Y)

time = np.linspace(0,t_span[-1],t_steps)

ker = np.zeros([t_steps, len(mu_values)])

for j in range(0, len(mu_values)):
mu = mu_values[j]
for k in range(1, t_steps): # Start from k=1 to avoid division by zero
tau = k*dt
ker[k, j] = kernel(tau, D, mu, Delta)
ker[:, j] /= np.sum(ker[:, j]) * dt

for j in tqdm(range(0, len(mu_values))):
mu = mu_values[j]
# X[0, j] = (q1 * K**m) / k1
X[0, j] = 1
Y[0, j] = 0
for i in tqdm(range(1,t_steps)):
##Here I compute the convolution integral at each step
precomputed = ker[:i, j] * Y[i-1::-1, j]
cumulative = np.sum(precomputed) * dt
Yprime = cumulative
##This is a RK scheme to compute the rest of the variables once I got the ##convolution integral for this time step
k1_x = X_equation(X[i-1, j], Yprime, m, k1, K, q1)
k1_y = Y_equation(X[i-1, j], Y[i-1, j], k2, q2)

aux_x = X[i-1, j]+dt*k1_x
aux_y = Y[i-1, j]+dt*k1_y

k2_x = X_equation(aux_x, Yprime, m, k1, K, q1)
k2_y = Y_equation(aux_x, aux_y, k2, q2)

X[i, j] = X[i-1, j]+0.5*dt*(k1_x+k2_x)
Y[i, j] = Y[i-1, j]+0.5*dt*(k1_y+k2_y)
Yprima[i, j] = Yprime

plt.plot(time, X[:, 0], label=f"X(t), μ = 0", color='b')
plt.plot(time, Yprima[:, 0], label=f"Ydelta(t), μ = 0", color='g')
plt.plot(time, Y[:,0], label=f"Y0(t), μ = 0", color='r')

plt.xlabel("t")
plt.ylabel("X, Y")
plt.title("Time series")
plt.legend()
plt.grid()


Подробнее здесь: https://stackoverflow.com/questions/796 ... -in-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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