У меня есть начальная проблема, которую нужно решить; дифференциальные уравнения получены из словаря, который выглядит следующим образом:
eqs = {'a': array([-1., 2., 4., 0., ...]),
'b': array([ 1., -10., 0., 0., ...]),
'c': array([ 0., 3., -4., 0., ...]),
'd': array([ 0., 5., 0., -0., ...]),
...}
Дифференциальное уравнение da/dt
задано как -1*[a]+2*[b]+4*[c]+0*[d]
....
Используя приведенный выше словарь, я пишу функция dXdt
as:
def dXdt (X, t):
sys_a, sys_b, sys_c, sys_d,... = eqs['a'], eqs['b'], eqs['c'], eqs['d'],...
dadt = sys_a[0]*X[0]+sys_a[1]*X[1]+sys_a[2]*X[2]+sys_a[3]*X[3]+...
dbdt = sys_b[0]*X[0]+sys_b[1]*X[1]+sys_b[2]*X[2]+sys_b[3]*X[3]+...
dcdt = sys_c[0]*X[0]+sys_c[1]*X[1]+sys_c[2]*X[2]+sys_c[3]*X[3]+...
dddt = sys_d[0]*X[0]+sys_d[1]*X[1]+sys_d[2]*X[2]+sys_d[3]*X[3]+...
...
return [dadt, dbdt, dcdt, dddt, ...]
Начальные условия:
X0 = [1, 0, 0, 0, ...]
, а решение имеет вид:
X = integrate.odeint(dXdt, X0, np.linspace(0,10,11))
Это хорошо работает для небольшая система, где я могу написать уравнения вручную. Однако у меня есть система, которая имеет ~ 150 дифференциальных уравнений, и мне нужно автоматизировать способ, которым я пишу dXdt
, чтобы использовать with scipy.integrate.odeint
, учитывая словарь eqs
. Есть ли способ сделать это?