为什么行星在我的太阳系模型中以错误的速度移动?

计算科学 时间积分 保护
2021-12-11 21:21:08

不是 100% 确定这个问题属于哪里,因为我不确定问题是否与代码相关。

我写了一个程序来模拟太阳系。我现在正在测试它的准确性。我已经检查了角动量的守恒,它是完全守恒的,能量也是如此——我正在使用速度 verlet 算法。我还绘制了行星的路径,它们的轨道稳定超过 1000 年,并且绝对是圆形的(我坚持模拟圆形轨道)。

问题是行星不是在一个轨道周期之后开始的。他们确实回到了他们开始的地方,只是不是在正确的时间。我不知道为什么。它使我的很多支票变得毫无用处。为什么会发生这种情况?效果显着,每年约0.2*10^11m。然而 1000 年后,轨道仍然是圆形的,半径大致相同。

1个回答

这是 Verlet 算法的预期行为。它是一个辛积分器,这意味着它将保持二次不变量在舍入误差内——因此行星轨道的形式保持得相当准确(我假设你的意思是说轨道是椭圆的,而不是圆形的)。然而,该方法仍然是数值近似并且确实引入了误差。引入的误差只影响每个轨道的相位这意味着行星将在正确的轨道上移动,但不会以正确的速度移动。为了减少相位误差,您可以采取更小的时间步长——但最终会有一个限制,因为它会增加解决方案中的舍入误差量。

要了解有关这些问题的更多信息,我推荐《几何数值积分》一书。

研究太阳系的长期稳定性(数百万到数十亿年)是一个微妙而活跃的研究领域,它利用了更精确的数值方法,甚至是多精度算术。