数值:如何重新规范化以下 ODE

计算科学
2021-12-15 08:35:33

这个问题更多地是关于如何以数字方式解决问题。

在一个小项目中,我想模拟 Janus 和 Epimetheus 的轨道运动。这基本上是一个三体问题。我选择土星固定在原点,让r1r2分别是janus和epimetheus的位置向量。由于当 Janus 和 Epimetheus 非常接近时会出现这种效果,所以我选择了相对坐标以获得更好的分辨率,即r=r1r2R=r1+r2. 现在我得到以下运动方程:

d2dt2(Rr)=G(m2±m1)RR34MG(r+R(r+R)3rR(rR)3)

其中对应于卫星的质量,是土星的质量,是引力常数。当我尝试以数字方式解决这个问题时,问题就出现了。必须处理大小完全不同的值,即并且 ,在 0 到 150,000 的范围内。miMGMe28mie17rR

老实说,我不确定这是否是讨论此类数字问题的地方论坛。

更多信息:

代码是用 Matlab 编写的,我使用标准 ODE 求解器来获得结果。然而,这是失败的,因为在机器精度下无法减小步长。(我觉得这并不奇怪,因为必须处理已经提到的数量级)。

3个回答

您当前的方法破坏了数值稳定性;实际上,您可能会以这种方式失去分辨率。

将每颗卫星的开普勒变量和包含卫星位置、速度和原点的平面角度作为坐标。卫星之间没有相互作用的微分方程非常简单,只有相互作用变得有些复杂。如果卫星距离很远,则相互作用很小,因此产生的动力学应该在数值上是稳定的。

您可以使用专用算法进行几何数值积分,而不是使用“经典”(刚性)ODE 求解器。例如,请参阅本书以及您可以在Ernst Hairer 的网站上找到的 GNI 代码。

如果您在模拟中包含三个步骤,情况如何:

  1. 通过计算 Janus - Saturn 力来更新 Janus 位置。
  2. 通过计算 Epimetheus - Saturn 力来更新 Epimetheus 位置。
  3. 通过计算 Janus - Epimetheus 力来更新 Janus 和 Epimetheus 的位置。

可能对#3 使用更精细的时间步长。

我不确定这是否会有所帮助。我想真正的问题是月球和月球土星情况下力的大小是不同的,除非卫星很接近?

或者:

  1. 如果卫星关闭,则使用它们的质心向量计算一个近似的卫星 - 土星力,并使用相同的向量更新两个位置。
  2. 如果它们相距甚远,请单独更新它们。
  3. 和以前一样。

祝你好运!