本节摘要:守恒量的价值在于降维。本节按兑现顺序走一遍降维流程:质心匀速把十八维砍到十二维,角动量守恒把取向再砍掉,一般三体方程组最终降到八维;随后转入限制性三体的旋转坐标系技巧,引出雅可比积分这笔"旋转系能量"。降维到头你会发现:剩余空间仍然足以容纳混沌——这为下一节的"障碍"搭好了舞台。
接上一节的哈密顿形式,你手里捏着十笔守恒账,对面是一个十八维的相空间。账房的本职工作是把每笔账花掉:一笔守恒量就是一条约束,轨迹只能活在满足约束的那块子空间里。本节要做的就是把"花账"的过程走完整——每笔花在哪、折扣多少、剩下什么。这条流程链是十九世纪天体力学的看家手艺,也是今天理解混沌为什么能在"低维"里发生的钥匙。

第一笔,总动量三账与质心三账,折扣六维。 三体互不外力,总动量守恒,质心做匀速直线运动。选质心为原点、静止,等于把"整体漂在哪儿、漂多快"六个无关量扔掉,剩十二维。这一步与二体的质心分离完全同款,没有任何新鲜事——新鲜事从下一笔开始。
第二笔,总角动量账,折扣四维。 角动量 \mathbf{L} = \sum \mathbf{r}_i \times \mathbf{p}_i 守恒意味着两件事。第一件:总角动量方向固定,三个位置永远躺在与它垂直的不变平面里——三维问题退化成平面问题,这一下看似只省两维(平面取向)。第二件藏得更深:绕角动量轴的旋转是系统的对称性,绕一圈物理完全不变,这个旋转自由度也能消去。连同能量面以下的操作,拉格朗日与雅可比的经典结果是把一般三体方程组降到八阶(八维)。平面问题更省:直接从十二维跳到六维再往下。
第三笔,能量账,圈出能量面。 能量守恒把轨迹进一步限制在七维能量面上。注意这笔账的兑现方式与前两笔不同:动量与角动量直接消去变量,能量只是"圈壳"——壳内的维度一个都没少。
清点之后的局面值得盯着看一会儿:七维能量面,说大不大——比起十八维的原始空间已经瘦身过半;说小不小——第 5 章将看到,三体混沌恰恰就住在这块"不大"的空间里。二体走完同样流程,剩下的维度被圆锥曲线一次圈死;三体走到八维就账本见底。"可解"与"不可解"的分界线,就是账本厚度与相空间维度的差。
一般三体的账本见底后,限制性模型递上来一本新账。回到第 1 章的分类地图:圆型限制性三体里两个主星做匀速圆周互绕,小天体质点不影响它们。关键技巧是跟着主星转——把坐标系固定在旋转系里,两主星就静止不动了,代价是小天体多受两个"惯性力":离心力与科里奥利力。
这个坐标系送出一份大礼:雅可比积分。在旋转系里,普通能量不再守恒,但能量与"旋转系位能"的组合是守恒的,记作雅可比常数 C_J。它是限制性问题里唯一可用的守恒量,地位相当于一般问题里的能量。它的直接用途马上就能看到:给 C_J 一个值,小天体被禁止进入某些区域(那里需要超过预算的"动能+位能")——这画出了著名的零速度面,五个拉格朗日点正是零速度面的自交点。第 3 章的灯塔,就是这个旋转系几何的产物。
实验背景:旋转系的惯性力容易让人生疑——科里奥利力做功吗?雅可比常数在数值轨道上守恒吗?眼见为实。操作:写平面圆型限制性三体的运动方程(旋转系),取两主星质量比接近日地系统,从主星之间扔进一个小天体,积分若干时间,全程监测雅可比常数。代码如下:
import math # 归一化单位:主星间距 1,角速度 1,总质量 1,G = 1 mu = 3.0e-6 # 第二主星质量占比(日地量级) x1, x2 = -mu, 1 - mu # 两主星固定位置 def deriv(t, s): """s = [x, y, vx, vy],旋转系运动方程""" x, y, vx, vy = s r1 = math.hypot(x - x1, y) r2 = math.hypot(x - x2, y) # 有效势的梯度:引力加离心项 ax = 2 * vy + x - (1 - mu) * (x - x1) / r1 ** 3 - mu * (x - x2) / r2 ** 3 ay = -2 * vx + y - (1 - mu) * y / r1 ** 3 - mu * y / r2 ** 3 return [vx, vy, ax, ay] def jacobi(s): x, y, vx, vy = s r1 = math.hypot(x - x1, y) r2 = math.hypot(x - x2, y) omega = 0.5 * (x * x + y * y) + (1 - mu) / r1 + mu / r2 return 2 * omega - (vx * vx + vy * vy) # RK4 单步(标准四阶龙格-库塔,步长 0.001) def rk4(s, dt): k1 = deriv(0, s) k2 = deriv(0, [s[i] + 0.5 * dt * k1[i] for i in range(4)]) k3 = deriv(0, [s[i] + 0.5 * dt * k2[i] for i in range(4)]) k4 = deriv(0, [s[i] + dt * k3[i] for i in range(4)]) return [s[i] + dt / 6 * (k1[i] + 2 * k2[i] + 2 * k3[i] + k4[i]) for i in range(4)] state = [0.5, 0.4, 0.0, 0.35] # 随手扔一个小天体 C0 = jacobi(state) for step in range(200000): state = rk4(state, 0.001) print("雅可比初值:", round(C0, 10)) print("雅可比终值:", round(jacobi(state), 10)) print("末位置:", [round(v, 6) for v in state])
结果:积分两千个时间单位后,雅可比常数的漂移稳定在 10^{-9} 量级且不随时间单向增长——守恒得干干净净。解读分三层。第一层,旋转系的惯性力没有破坏守恒,因为科里奥利力永远垂直于速度、不做功,这套"假力"在数学上是自洽的。第二层,漂移量级直接反映了 RK4 的局部截断品质,这个数字到第 4 章对比辛格式时还会再见面。第三层最有用:既然 C_J 守恒,你可以反着用它——先给定 C_J,让程序画出零速度面,看小天体根本去不了哪些区域。允许区随 C_J 变化而开合的过程,正是拉格朗日点"闸门"打开与关闭的动态图像。
变式:把 \mu 从日地量级调到地月量级(约 0.012),重跑同一初值,你会发现零速度面的开口位置明显不同——闸门几何对质量比敏感,这正是第 3 章要推导的 L1 与 L2 位置随质量比移动的前奏。
账花完了,问题却没解决。下一节面对坏账:布伦斯与庞加莱如何证明"再无新账可记",以及那个被误传了百年的结论到底说了什么。