有没有办法减少行星轨迹计算中的偏差?

计算科学 算法 模拟
2021-12-22 23:39:22

我觉得标题不太准确,抱歉。

我使用两个时间步长模拟空间中的物体:

TIMESTEP 是我用来进行计算的Δt ,XTIME 是我进行计算的次数

我希望每个可见步骤为 7 days , Δt 为 86400 (秒)和 XTIME 7 ,因此将计算 7 天。

我这样做是因为如果 会有很多像差(尤其是在月球轨道上)。Δt=864007

由于我每次将使用少于 20 个行星,计算 7 倍 Δt 并不是真正的问题,但更多可能是问题。

这就是问题所在,当时,当行星离大质量(太阳)太近时,我仍然有像差,结果是行星以光速消失!这是因为 Δt 太大而无法计算“反作用力”。Δt=86400

我听说过跨越式,但我一定是愚蠢的,我没有成功地将它适应我的代码(结果比任何事情都糟糕,就像月亮离开地球一样)我不确定这会解决我的问题.

我确切地说我想要一些看起来可信但不现实的东西,所以如果没有“不吃cpu”的方法,我肯定会在这些情况下作弊,但我不想这样做。

我在这里问这个问题是因为我认为它比物理更多的是计算,因为我已经掌握了物理

编辑:也许是线索?类似 if (distanceToOldPosition > FIXED_VALUE) 计算更多次

编辑2:评论中询问的计算精度:

F=GM1M2r

加速度

a=FM

那么线性向量

vt+1=vt+aΔt

最后是新职位

xt+1=xt+vt+1Δt

3个回答

要获得行星轨道看起来逼真的东西,您不应该使用前向或后向欧拉方法。这些将导致你的行星向外或向内盘旋。您应该使用辛方法。

当两个物体彼此非常接近时,您可能还需要将时间步调整得更小。

阅读Chambers (1999)一种混合辛积分器,它允许大质量物体之间的近距离接触以开始使用这种方法。

一般来说,我建议不要编写自己的 ODE 求解器。这是一个很好解决的问题,请阅读流行的如何工作并选择一个适合您的问题的问题。

如果您让我们知道您正在使用哪种语言,我相信有人可以推荐他们最喜欢的软件包。:)

请记住,这些从来都不是精确的解决方案,但有些解决方案的错误比其他解决方案要少。

如果不需要物理,你可以作弊,让你的行星在一个完美的圆周上运行,甚至在椭圆上更好。

posplanet=circumference(angle(time),radius,center)

月球和其他卫星会有点不同:

possatellite=posplanet+circumference(angle(time),radius,center)