#python #sympy #differential-equations
#python #sympy #дифференциальные уравнения
Вопрос:
Я пытаюсь найти точки равновесия для набора из трех дифференциальных уравнений, но код зависает и не завершается, я не знаю, выполнены ли уравнения неправильно или есть какая-то ошибка в том, как они были написаны.
#Variables
C = sym.Symbol('C')
A = sym.Symbol('A')
P = sym.Symbol('P')
r_c = sym.Symbol('r_c')
r_a = sym.Symbol('r_a')
K_c = sym.Symbol('K_c')
K_a = sym.Symbol('K_a')
beta_ca = sym.Symbol('beta_ca')
delta = sym.Symbol('delta')
gamma = sym.Symbol('gamma')
e = sym.Symbol('e')
alpha = sym.Symbol('alpha')
theta = sym.Symbol('theta')
p = sym.Symbol('p')
# Equations
dCdt = (r_c*C)*(1-(C/K_c)-((beta_ca*A)/K_c))-(delta*C) (gamma*e)
dAdt = (r_a*A)*(1-(A/K_a)-((beta_ca*C)/K_a))-(A*alpha*P)
dPdt = (theta*A*P)-(p*P)
#Solving
solution = sym.solve((dCdt, dAdt, dPdt), (C, A, P))
Комментарии:
1. Является ли код «не выполняется вообще» или он, похоже, зависает, как говорится в названии?
2. Решателю просто требуется некоторое время, чтобы найти и кратко представить все решения. Если вас не волнует некоторое потенциальное перекрытие / дублирование, вы можете взять выходные данные только из двух уравнений, например
L = solve((dAdt,dCdt), (C,A,P))
, и объединить их с третьим, например[sol for L in [solve((dPdt, *(k-v for k,v in d.items())), (C,A,P)) for d in L] for sol in L]
. Это займет немного времени, но будет не так приятно, как то, что вы могли бы получить, просто решив всю систему.3. Спасибо, что сейчас он завершает запуск, но сталкивается с проблемами из-за того, что у кортежа нет атрибута items, я не очень хорошо разбираюсь в том, как вы объединяли решения