用于行星模拟的“维修”性能

我已经用yarr 方法模拟了太阳系的外层行星,并且实现了a)使用了yarr和b)使用yarr

yarr似乎执行比x30更快 。

鉴于此,我甚至没有尝试使用并行性。 我的代码中有没有明显的性能问题? 存储库在github上 。 如果这有帮助,我可以制作一个简化的重新版本的版本,但是你不会得到与yarr的性能比较。

或者,我如何debuggingrepa性能问题?

大多数欧拉数值积分方法遭受累积舍入误差,最终导致模拟“爆炸”。 您可能需要研究先进的数值积分方法,如四阶Runge-Kutta或预测校正器。

另一个n体问题模拟变得粘滞的地方是当两个物体变得非常接近时,例如一个绕着它的行星非常偏心的月球。 如果在模拟中使用固定的时间增量,那么angular速度变化较大时的误差可能导致零除误差,或者导致模拟爆炸的非常小的值的分割。 使用取决于angular速度的variablesdelta-t可能是有益的。

这些build议是基于我在1973年进行的本科物理课程中运行许多这样的模拟,同时testing各种数值积分方法。 从数字计算的黎明开始,Runge-Kutta和预测校正方法就已经出现了,并且有很多书籍可供使用。 参见例如 ,由William H.Press,Brian P.Flannery,Saul A.Teukolsky和William T.Vetterling撰写的Numerical Recipes:The Art of Scientific Computing 。 (剑桥大学出版社,1989)