我已经使用欧拉辛方法编写了太阳系外行星的模拟,并实现了这个 a) usingrepa
和 b) using yarr
。
鉴于此,我什至没有尝试使用并行性。我的repa
代码中是否存在明显的性能问题?存储库位于github。如果这有帮助,我可以制作一个仅缩减repa
版的版本,但是您将无法获得与yarr
.
或者,我如何调试性能问题repa
?
我已经使用欧拉辛方法编写了太阳系外行星的模拟,并实现了这个 a) usingrepa
和 b) using yarr
。
鉴于此,我什至没有尝试使用并行性。我的repa
代码中是否存在明显的性能问题?存储库位于github。如果这有帮助,我可以制作一个仅缩减repa
版的版本,但是您将无法获得与yarr
.
或者,我如何调试性能问题repa
?
大多数欧拉数值积分方法都存在累积舍入误差,最终会导致模拟“崩溃”。您可能想要研究高级数值积分方法,例如 4 阶 Runge-Kutta 或预测器-校正器。
n体问题模拟变得棘手的另一个地方是当两个物体非常接近时,例如围绕其行星的轨道非常偏心的卫星。如果使用固定时间增量进行模拟,则角速度大变化期间的误差会导致除以零误差或除以非常小的值,从而导致模拟崩溃。使用取决于角速度的变量 delta-t 可能是有益的。
这些建议基于我在 1973 年参加的本科物理课程项目中运行的许多此类模拟,同时测试了各种数值积分方法。Runge-Kutta 和预测校正器方法自数字计算出现以来就已经存在,并且有许多书籍可供使用。参见,例如,数字食谱: William H. Press、Brian P. Flannery、Saul A. Teukolsky 和 William T. Vetterling的科学计算艺术。(剑桥大学出版社,1989 年)