我使用Euler symplectic method编写了太阳系外行星的模拟,并使用repa
和b)使用yarr
实现了这一点a。
yarr
seems to perform about x30 quicker than repa
鉴于此,我甚至没有尝试使用并行性。我的repa
代码中是否存在明显的性能问题?存储库位于github。如果这有用,我可以生成一个仅限repa
- 仅限版本的版本,但是您将无法与yarr
进行性能比较。
或者,我如何调试repa
中的性能问题?
答案 0 :(得分:2)
大多数欧拉数值积分方法都会遇到累积舍入误差,最终导致模拟“爆炸”。您可能想要研究高级数值积分方法,例如4阶Runge-Kutta或预测校正器。
n体问题模拟变得粘稠的另一个地方是两个物体非常靠近,例如月球周围有一个非常偏心的轨道。如果使用固定时间增量进行模拟,则角速度大幅度变化期间的误差可能导致被零除误差或除以非常小的值,从而导致模拟爆炸。使用取决于角速度的变量delta-t可能是有益的。
这些建议是基于运行许多这样的模拟作为我在1973年参加的本科物理课程的项目,同时测试各种数值积分方法。自数字计算开始以来,Runge-Kutta和预测校正器方法已经存在,并且有许多书籍可供使用。参见例如, 数字食谱:科学计算的艺术 作者:William H. Press,Brian P. Flannery,Saul A. Teukolsky和William T. Vetterling。 (剑桥大学出版社,1989年)