6

我目前正在尝试使用 SciPy 的 integration.ode 包来解决一对耦合的一阶 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 进行数字积分有任何建议吗?

4

2 回答 2

7

我可能是错的,但这个例子似乎非常接近你的问题。:) 它用于odeint求解 ODE 系统。

于 2011-04-20T03:25:29.360 回答
4

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

于 2012-07-18T09:14:19.027 回答