Python脚本需要20多个小时才能运行

时间:2018-07-18 02:09:49

标签: python python-3.x differential-equations odeint

我有一个由16个耦合的微分方程组成的系统,并且我使用的是Scipy.integrate.odeint软件包。

代码必须运行0到5吉年,然后绘制数据,微分方程的本质是它们极易振荡。最重要的是,我使用的时间步长是1e + 8,否则会出现此恒定错误:

'此调用完成的工作过多(可能是Dfun类型错误)。 以full_output = 1运行以获取定量信息。'

我只是想知道,还有什么其他方法可以使积分器更快地求解?耦合ODE的大型系统是否有更好的集成方法?该代码已经运行了20多个小时,无济于事。

1 个答案:

答案 0 :(得分:0)

  • 对于大多数大型微分方程组,主要瓶颈通常是在计算导数(右侧)。您可能纯粹在Python中执行此操作,这使其运行速度大大降低。我写了Python module called JiTCODE,它通过对衍生代码进行硬编码来加快集成速度,并且特别适用于大型ODE系统。

  • 还要注意,odeint使用LSODA并不是非僵硬系统最有效的方法。

  • 如果集成步骤数超过特定阈值,通常会出现错误。对于长时间的集成,这是可以预期的。您可以通过调整参数mxstep来控制它。

  • odeint还具有一个最大步长参数,该参数以我不知道的方式自动选择。尽管这似乎可以在快速测试中与您的时间比例合理地缩放,但我不能排除它不能很好地解决您的情况下以SI单位使用千兆年的情况,这可能会导致很多步骤。

  • 鉴于您工作了数万亿年(这暗示着天文学,这反过来又使节能成为可能),还应该检查辛辛积分器是否更适合您的问题。