scipy.integrate.ode有两个耦合的ODE?

时间:2011-04-20 01:06:04

标签: python scipy ode

我目前正在尝试使用SciPy的integrate.ode包来解决一对耦合的一阶ODE:比如Lotka-Volterra predator-prey equation。但是,这意味着在集成循环期间,我必须更新我在每次迭代时发送给方法的参数,并且只是跟踪前一个值并在每次迭代时调用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有任何建议?

2 个答案:

答案 0 :(得分:7)

我可能错了,但this example似乎非常接近你的问题。 :)它使用odeint来解决ODE系统。

答案 1 :(得分:4)

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