首先三体问题无解是指没有解析解,或者说不存在一劳永逸的一个简单的函数可以随便预测任何一个时间点的天体位置,这个叫做无解。
但是二体问题,例如俩质点围着转圈圈,这个我们可以得到一个函数,这个函数只要把时间代进去,你愿意算那一年的就可以算出哪一年的。
所以不管多少体的问题,只要你有足够的计算资源,你慢慢的一点点的从这个时间往后面推,做最笨的事情,你是可以预测后面的走势的。但是三体问题不仅仅是无解,而且是个混沌系统,这个才是最麻烦的地方,混沌系统的意思是,如果你的初始值偏差了一点点,那么这个误差会一直放大不会收敛。这就带来了三体问题的更麻烦的事情,因为一开始我们不可能精确的测量出天体的准确位置,然后这点儿误差会在计算过程中不断地放大,最终导致我们越往后推算就误差就越大,最终导致我们不可能预测太久之后的天体位置。
但是很显然的,虽然误差不会收敛,但是误差放大的速度不是无限的。所以,我们的确无法计算所有天体在任何时间点的精确的位置。但是,这不代表我们不能算出在限定时间范围内他们的大致位置。
这不止是因为遥远的天体的影响弱。题目中的所谓“三体运动无解”是误解。
三体问题是指三个质点仅在引力作用下的运动问题,庞加莱证明了三体问题不能用守恒量得到解析解,但那并不等于无解。1913 年,Sundman[1]已经证明三体问题存在级数解,且在大多数情况下收敛——当然,收敛的速度很慢,但实际的天体系统根本不需要你给出遥远未来的预测。1990 年,Wang Qiudong[2]将上述结论推广到多体问题。
“可数多个天体相互作用”只要给出质量、初始位置和速度,就是用 Verlet intergration[3]进行计算的问题了,算得有多快取决于你有多少计算力,电子计算机就可以进行。你要算的天体多的话可以看看 @作大死的风子君 的回答:
历史上规划航天器在太阳系内的轨道、利用引力弹弓时,使用的计算机比你拿来看这个的计算设备还要慢:
现实中的半人马座阿尔法三星压根不存在什么三体问题。比邻星距离半人马座阿尔法 A 星和 B 星太远、质量也太小,对那两个恒星没有值得一提的影响,而那两个恒星的质量也不够让比邻星乱走。宇宙中真实存在的三恒星系统要么是三体问题的特解状态,要么随着时间将一个恒星扔出系统之外而变成单纯双星。比邻星现在就处于飞离该系统的轨道上。
讨论的系统规模越庞大,距离遥远的天体之间的作用就越微弱,天体的低速运动能带来的变化也需要越长的时间。银河盘的运动可以用简单的电磁场中旋转的等离子体来再现,没有必要列出千亿个星体之间的引力作用。
可观测宇宙中星体的数量是有限的,且绝大部分星体之间的影响都可以忽略,整个系统的运动规律在暗能量支配之下表现为宇宙的加速膨胀。
前排的 @赵泠 @作大死的风子君 都已经说得很好了。我想推荐一个让题主自己就可以试试上手预测太阳系(乃至任意的引力系统,只要你算力足够...)未来某一时刻中质点的轨道参数的软件包:
除了考虑可以优化计算速度,减少计算质点间相互作用的次数的算法之外,我们还需要考虑具体的数值解方程时的用的数值算法的精度。这里我们需要考虑我们正在考察的引力系统的性质:如果是一个行星系统的话,那行星们是否都大致呆在椭圆轨道上?如果是的话,那么每个行星的能量应该是大致守恒的(一般而言,比二体问题更复杂的三体问题乃至N体问题中,单个质点的能量并不是守恒的),我们可以考虑一种辛(symplectic)积分法[1],例如REBOUND中提供的WHFast[2],以尽量减少长期数值计算中的能量误差。
现在我们可以考虑另一种情况:行星们并不总是安分地呆在开普勒轨道上,行星系统可能是混沌的,以至于有发生行星碰撞的可能。如果我们的数值方法采用固定的步长(time-step),那么可能会出现的一个问题是:在我们的模拟中,由于时间是离散化的,上一帧两个行星还保持着一定距离,而下一帧它们已经互相“穿过去”了。而在连续时间的现实中,可能两颗行星已经撞在了一起。这时我们可以使用REBOUND中的IAS15[3]积分法,它提供了所谓的自适应步长(adaptive time-step),可以根据行星之间的距离自己决定计算时采用的时间步长。当两颗行星非常接近时,例如一颗行星进入了另一颗行星的希尔球[4](Hill sphere,在这个球里行星的引力影响占主导,而非是行星围绕的恒星引力占主导)时,IAS15就会自动缩短时间步长以避免我们上面提到的“穿过去”的现象发生。
我来补充一下 @赵泠 的回答吧,正好最近计算物理课期末作业在做一个相关的课题,不想看公式的可以直接跳过。
解多体问题的关键是解牛顿运动方程:
(1)
这一看就是个二阶微分方程,那咱们写成微分形式:
(2)
其中,加速度可以套万有引力加速度公式 (3)。
考虑到在N体系统中每一个物体都会受到N-1个物体共同的引力作用,加速度项就是上面等式(3)代入所有N-1个物体的质量和相对位置一个一个加起来。比方说某系统里面有 个天体,那么这就是其中物体 受到的引力加速度:
(4)
其中 这个项略掉,因为自己不可能跟自己相互作用。
公式部分完。
泠姐提到的Verlet Integration是一种针对牛顿运动方程快速求积分的算法,虽然稳定性和对计算资源的高效利用好过欧拉法,但只解决了计算等式(1)和(2)两个微分方程的问题。当系统内物体数量极其庞大时,即使演算时间很短,等式(4)还是会吃掉比(1)和(2)多得多的资源,因为这时等式4的计算量与物体总数的关系是 。如果是演算半人马座的三体系统,等式(4)要重复 遍,可是一百体系统呢?一千体?显然,光靠天文学家们收到的那亿点点经费去买更好的电脑来暴力解多体问题是不现实的,即使用电磁场内的等离子体来模拟,也许能做一些质性研究,但肯定做不到“只要给出质量、初始位置和速度”就能给出关于某个星系的量化结果。
那,要怎样才能把这 的计算量降下来呢?
首先,Barnes-Hut Simulation 表示,可以把这多体系统所在的空间不停地细分,立体的多体模拟咱就分成八份,平面的模拟就分成四份,像这样(空白方框略):
直到每个方格里的物体数量小于等于事先规定的数量,而且每个方格里物体和方格重心相对目标的夹角不大于事先规定的角度。如果有方格违反了这两条规则,就继续四分它,分到不违反了为止。到这步,整个多体系统就被你近似成了一个个大小不一的单元格,计算万有引力作用的时候把整个单元格近似成一个大质量物体,总计算量和物体总数的关系就变成了 ,当N数值暴涨的时候O的增量会远远小于暴力排列组合。
数一数上图有多少根绿线,就可以清楚看到BH模拟强大的减负效果。每个目标点对应 个(近似)引力源,N个目标就需要 次运算,这就是BH模拟的点-格相互作用。
基于这个算法改进出的快速多极算法(Fast Multipole Method, FMM)甚至实现了 的运算量,也就是说模拟多体系统内万有引力作用所需的步骤跟物体总数呈线性增长,这种特性也是它名字里面“快速”的来源。因为FMM不在乎目标和引力源是点还是单元格,它可以把BH模拟的点-格相互作用变成了点-点、点-格、格-格三种相互作用的灵活结合:当一片区域集中了大量的点时,把这片区域近似成单元格;当一片区域只有一个点时,这片区域的重心就是那个点本身。快速多极算法曾被评为“20世纪十大算法”之一,从80年代被开发到现在,已经衍生出很多变种,都在天体物理学界发挥着非常重要的作用。
泠姐的回答稍微简化了一点,虽然在天体物理方面解广义上的三体问题确实没有什么用场,但解限制性三体问题是现在航天器任务规划很重要的一部分,尤其是像鹊桥、詹姆斯韦伯、火星探索这些任务,它们的轨道规划本身就是求限制性三体问题特解。格局再打开,研究球状星团的动力学问题、探究宇宙中大尺度纤维状结构和超星系团的成因,都需要模拟天文数字的星体之间的相互作用,在这种情况下,一种可以极大地减少计算资源和时间资源消耗的方法就显得尤其重要了。
三体运动,也就是三个质点的问题很早就可以解的。不过庞加莱证明了三体问题不能用守恒量得到解析解。怎么证明我也不懂,但是结果懂。
三个质点的运动,通常是用近似解。
这个方法经常运用到分子模型中,比如扯蛋模型。
计算这类用的积分法很烦。
Verlet积分法是一种用于积分牛顿方程的数值方法。在分子动力学模拟和视频中经常用于计算粒子的运动轨迹,在游戏的粒子系统中经常用到。跟欧拉方法相比,Verlet积分法提供了更健壮的计算方式,这在物理中很重要,比如积分面积保持特性等。
用欧拉积分简单地计算轨迹是很常见的。然而欧拉积分中有很多问题,这就不展开细讲。
Verlet法是用到了Størmer的计算粒子在磁场中运动的轨迹的方式(因此这个方法又叫Störmer的方法),在1967年,法国物理学家Loup Verlet将这个方法运用到到分子动力计算中,后来有人以此运用到宇宙中的类似计算。
好上面的哔哔完了,下面开始扯蛋。
上面是真的扯蛋模型。别看着扯蛋好玩,但是上瘾。
比如模拟一个臭氧
输入 O1OO1 然后回车
然后出现臭氧的样子。
当然上面的演示由于在屏幕中心加了一个很强大的重力。上面的是无法模仿三体的方式。而且只能单点扯。
但是大体的意思是一样的。只要扯动了一边可以看到三者的运动。
另外别把三体太当真。
有计算机后,处理这种积分并不难,尤其有很多简化计算。
另外计算化学里有几个是得了诺奖的。就是运用了牛顿模型与量子模型之间的综合。