提高odeint速度:重力积分

2024-09-19 23:39:19 发布

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

这个问题是关于整合模块。在

我用以下原理模拟相互作用的星系:让两个原子核在开普勒轨道上运动,然后把星系中的每一颗恒星都看成没有质量。在

我在1星系的参考坐标系下工作,所以我使用两个经典的牛顿重力+1个离心力。在

所有这些都与odeint集成在一起(整合模块),效果很好。我对速度有点问题odeint正在整合我的星星: 在大约10个小时的时间里,恒星的积分大约需要10个小时。据我的教授说,他的程序运行大约5分钟,做那些星星。我甚至不知道如何提高这个速度,因为我不能改变方程组,而odeint实际上占用了99%的运行时间。在

长话短说,我怎样才能提高我的odeint计算时间?在

谢谢


Tags: 模块时间质量速度重力原理经典小时
1条回答
网友
1楼 · 发布于 2024-09-19 23:39:19

odeint是一个很好的通用ode集成器,但是由于某些原因,它可能没有使用最好的方法来解决您的问题。您可以尝试使用ode1,因为您可以通过更改它使用的积分器来控制它。如果问题不是刚性的,那么通常使用Runge-Kutta(4)5方法(dopri5使用ode)是合理的,如果问题是刚性的,则BDF方法通常是一个不错的选择。由于我没有为您描述的问题类型建模,我不知道您的问题是否很棘手,我建议您先尝试dopri5,然后尝试BDF方法。在

您的代码中也可能有一个问题,使得右侧的计算效率不合理,所以您可以尝试在那里做一些工作以加快执行速度。ode的另一个优点是,您可以为它提供一个精确的雅可比函数,该函数可以大大提高速度,因为不使用近似。在

参考号:Scipy docs on ^{}

相关问题 更多 >