天文学模拟中正确的整合方式是什么?


15

我正在创建一个简单的天文模拟器,该模拟器应使用牛顿物理学来模拟系统(或任何物体)中行星的运动。所有的物体都是在欧几里得平面上的圆,具有诸如位置,速度,质量,半径和合力之类的属性。

我想以较小的时间步长(通常是几毫秒)来更新Universe,但是我不确定如何正确计算位置的变化。

力很简单:fr = sum(G * body.m * bodyi.m / dist(body, bodyi)^2)

但是我怎么从那里继续呢?

我可以这样做:

a = Fr/body.m
v += a*dt
position += v*dt

但这当然是错误的。也许我在位置计算中添加了0.5作为因素?


太有趣了,不予评论:模拟“植物”的运动确实是一个常见的天文问题;-)
Wolfgang Bangerth 2012年

Answers:


17

您基本上可以找到答案-不需要0.5的因数。

本质上,您具有一维ODE的二维系统: 其中所有内容都是时间的函数(大概除外),点表示时间导数。如果对它们进行简单的前欧拉式一阶差分,则会发现 或 这里我用索引时间步长。mx n + 1 -xn

x˙=vv˙=Fm,
mXÑ+1
xn+1xnΔt=vnvn+1vnΔt=Fnm,
ñ
Xñ+1个=Xñ+ΔŤvñvñ+1个=vñ+ΔŤFñ
ñ

但是,前向欧拉天生就不稳定。幸运的是,附近有一种辛的方法。(该链接的文章更像是存根,但其中可能包含一些有用的链接。)关键是要使用速度将位置从推进到。也就是说,假设您给每个粒子和。那么您可以使用 以及时整合。这称为跳越法Ñ + 1Ñ + 1 / 2 X 0 v 1 / 2 X Ñ + 1ŤñŤñ+1个Ťñ+1个/2X0v1个/2

Xñ+1个=Xñ+ΔŤvñ+1个/2vñ+1个/2=vñ-1个/2+ΔŤFñ
。这样,您的系统就可以节省某种能量,并且由于舍入误差的指数增长,轨道不太可能飞向无穷大或诸如此类的东西。

唯一要注意的是如何获取,因为大概是从开始的。在这里,您应该只使用尽可能精确的方案,而四阶Runge-Kutta是一个受欢迎的选择。这可能是长期不稳定的,但是您会在半个时间步中引入太多错误,并且该错误将在以后通过跳越方案保持较小。 v 0v1个/2v0

最后,这个答案适用于任何一般的牛顿重力模拟。如您在问题中提到的那样,如果您真的想要完美的圆,那么您将无法获得理想的圆,除非在理想的系统中,行星之间不会相互作用,并且初始条件选择正确。如果是这种情况,那么您根本就不需要积分,因为这样的物体的角速度(每单位时间的弧度)就是 其中是中心物体的质量,是轨道半径。这可以用来测试模拟的准确性。中号ř

ω=G中号[R3
中号[R

嘿,您能解释一下为什么我不需要这个0.5因素吗?它似乎和n-1/2dt几秒钟前的速度一样,这就是您的建议。
jcora 2012年

仅当的速度为0时,这才是相同的。您想要的是和(您不知道的后者)的均值的一阶估计。和的平均值。v n v n + 1 v n 0ñ-1个vñvñ+1个vñ0
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.