【发布时间】:2012-05-24 12:40:04
【问题描述】:
这个问题是关于 scipy.integrate 模块中的 odeint 函数。
我正在根据以下原理模拟相互作用的星系:我让两个原子核在开普勒轨道上移动,然后让星系中的每颗恒星都没有质量。
我在 1 个星系的参考系中工作,所以我使用两个经典牛顿重力 + 1 个离心力。
所有这些都与 odeint(scipy.integrate 模块)集成,效果很好。我遇到了速度 odeint 整合我的星星的问题: 每颗恒星需要大约 10-15 秒才能在大约 100 个时间步长(约 10 亿年)内整合,但这相当于整合 1000 颗恒星需要几个小时。据我的教授说,他的程序运行大约 5 分钟,做那些星星。我什至不知道如何提高这个速度,因为我无法更改方程式,而 odeint 确实占用了 99% 的运行时间。
长话短说,我该如何提高我的 odeint 计算时间?
谢谢
【问题讨论】:
-
您可能希望研究的另一件事是实际的力评估。积分仅为 O(N),但典型实现中的力评估为 O(N^2)。
odeint必须在某个时候调用您的力量评估,这将非常昂贵。
标签: python performance scipy