Sympy solve не завершит переход к символьному уравнению

#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, я не очень хорошо разбираюсь в том, как вы объединяли решения