я сейчас пытаюсь использовать пакет SciPy интегрировать.ode для решения пары связанных ОДУ первого порядка: скажем, уравнение Лотка-Вольтерра хищник-жертва . Однако это означает, что во время цикла интеграции я должен обновлять параметры, которые я отправляю методам на каждой итерации, и просто отслеживать предыдущее значение и вызывать set_f_params ()
на каждой итерации не кажется, делают свое дело.
hprev = Ho
pprev = Po
yh = np.zeros(0)
yp = np.zeros(0)
while dh.successful() and dp.successful() and dp.t < endtime and dh.t < endtime:
hparams = [alpha, beta, pprev]
pparams = [delta, gamma, hprev]
dh.set_f_params(hparams)
dp.set_f_params(pparams)
dh.integrate(dh.t + stepsize)
dp.integrate(dp.t + stepsize)
yh = np.append(yh, dh.y)
yp = np.append(yp, dp.y)
hprev = dh.y
pprev = dp.y
Ценности I ' Настройка m на каждой итерации через set_f_params
, похоже, не распространяется на методы обратного вызова, что неудивительно, учитывая, что ни один из примеров в Интернете, похоже, не включает "живую" переменную, передаваемую в обратные вызовы , но это был единственный способ получить эти значения в методах обратного вызова.
Есть ли у кого-нибудь совет, как использовать SciPy для численной интеграции этих ODE?