scipy.integrate.ode与两个耦合的ode



我目前正在尝试使用SciPy的integrate.ode包来求解一对耦合的一阶常微分方程:比如Lotka-Volterra捕食-被捕食方程。然而,这意味着在集成循环期间,我必须在每次迭代中更新发送给方法的参数,而简单地跟踪以前的值并在每次迭代时调用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

我通过set_f_params在每次迭代中设置的值似乎不会传播到回调方法,这并不令人惊讶,因为网络上的例子似乎都没有涉及将"实时"变量传递到回调,但这是我能想到的将这些值传递到回调方法中的唯一方法。

有人对如何使用SciPy对这些ODE进行数值积分有什么建议吗?

我可能错了,但这个例子似乎非常接近你的问题。:(它使用odeint来求解ODEs系统。

我也遇到了类似的问题。事实证明,积分器不会在每次调用integrate((时重新评估微分方程函数,而是在自己的内部时间进行评估。我将积分器的max_step选项更改为与步长相同,这对我有效。

最新更新