您基本上可以找到答案-不需要0.5的因数。
本质上,您具有一维ODE的二维系统:
其中所有内容都是时间的函数(大概除外),点表示时间导数。如果对它们进行简单的前欧拉式一阶差分,则会发现
或
这里我用索引时间步长。mx n + 1 -xn
X˙v˙= v= F米,
米XÑ+1Xn + 1− xñΔ Ťvn + 1− vñΔ Ť= vñ= Fñ米,
ñXn + 1vn + 1= xñ+ Δ 吨⋅ vñ= vñ+ Δ 吨˚Fñ米。
ñ
但是,前向欧拉天生就不稳定。幸运的是,附近有一种辛的方法。(该链接的文章更像是存根,但其中可能包含一些有用的链接。)关键是要使用速度将位置从推进到。也就是说,假设您给每个粒子和。那么您可以使用
以及时整合。这称为跳越法吨Ñ + 1吨Ñ + 1 / 2 X 0 v 1 / 2 X Ñ + 1ŤñŤn + 1ŤÑ + 1 / 2X0v1 / 2
Xn + 1vÑ + 1 / 2= xñ+ Δ 吨⋅ vÑ + 1 / 2= vñ - 1 / 2+ Δ 吨˚Fñ米
。这样,您的系统就可以节省某种能量,并且由于舍入误差的指数增长,轨道不太可能飞向无穷大或诸如此类的东西。
唯一要注意的是如何获取,因为大概是从开始的。在这里,您应该只使用尽可能精确的方案,而四阶Runge-Kutta是一个受欢迎的选择。这可能是长期不稳定的,但是您会在半个时间步中引入太多错误,并且该错误将在以后通过跳越方案保持较小。 v 0v1 / 2v0
最后,这个答案适用于任何一般的牛顿重力模拟。如您在问题中提到的那样,如果您真的想要完美的圆,那么您将无法获得理想的圆,除非在理想的系统中,行星之间不会相互作用,并且初始条件选择正确。如果是这种情况,那么您根本就不需要积分,因为这样的物体的角速度(每单位时间的弧度)就是
其中是中心物体的质量,是轨道半径。这可以用来测试模拟的准确性。中号ř
ω = G M[R3----√,
中号[R