带两个耦合节点的scipy.integrate.ode?

2024-09-27 02:24:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试使用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的每次迭代中设置的值似乎不会传播到回调方法,这并不奇怪,因为web上的任何示例似乎都不涉及传递给回调的“live”变量,但这是唯一一个可以将这些值获取到回调方法中的方法。

有人对如何使用SciPy对这些ODEs进行数值集成有什么建议吗?


Tags: and方法npzerosscipyparamsdpdh
2条回答

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

我也有类似的问题。结果是,积分器并不是在每次调用integrate()时重新计算微分方程函数,而是在它自己的内部时间进行计算。我将积分器的max_step选项更改为与stepsize相同,这对我有效。

相关问题 更多 >

    热门问题