Answer for HW6

前三题的解析是鞠国兴解读的教材原内容。注意,它采用了一个奇怪的记号,即用 M 来表示角动量。

1 T1~T3:有心力场

1.1 前情提要

如果作用在质点上的力的方向总是沿着质点的径矢,这样的力称为有心力。如果该力的大小仅仅与质点到固定点的距离有关,则有

F=U(r)rer=dUdrer

在有心力场中,质点的运动位于一个固定平面内,该平面垂直于角动量 M。采用平面极坐标,有拉格朗日函数

L=m2(r˙2+r2φ˙2)U(r)

φ 是循环坐标,且 L 不显含时间,有两个运动积分,即角动量守恒和机械能守恒

pφ=M=mr2φ˙=constE=12m(r˙2+r2φ˙2)+U(r)=12mr˙2+12mr2(Mmr2)2+U(r)=12mr˙2+M22mr2+U(r)

坐标 r 与时间 t 的关系为

(1)t=dr2m[EU(r)]M2m2r2+const

运动的轨道方程为

(2)φ=(M/r2)dr2m[EU(r)]M2/r2+const=(M/r2)dr2m[EUeff]+const

其中

Ueff=U(r)+M22mr2;

称为有效势能,而 M2/(2mr2) 称为离心势能。

r˙=0 或者满足条件 Ueff=E 的点是运动轨道的转折点,即所谓的转折点方程为

U(r)+M22mr2=E.

根据转折点以及质点的运动范围, 可以分为有界运动和无界运动。有界运动通常有两个转折点。

对于 rmin<r<rmax (这里 rmin,rmax 是两个转折点与力心的距离) 的有界运动, 轨道可以是封闭的或开口的。轨道封闭的条件为

(3)Δφ=2rminrmax(M/r2)dr2m(EU(r))M2r2

等于 2π 的有理数倍, 即 Δφ=2πpq, 其中 pq 是整数。仅对势能与 1r 或者 r2 成正比的两种有心力场, 其中有界运动的轨道是封闭的。这通常称为 Bertrand 定理。

质点可以坠落至场中心, 即 r 可能趋于零的条件是

[r2U(r)]|r0<M22m.

1.2 T1

T1

质点在场 U=α/r 内沿着抛物线运动,能量 E=0,试求质点坐标对时间的依赖关系。

解:本题要求抛物线轨道相应的参数方程。由式 (1) 代入 E=0,得

t=rdr2αmrM2m2

作变量代换 r=12p(1+η2), p=M2mα2, 则有 dr=pηdη, 于是上式可变为

t=12mp3α(1+η2)dη=mp3α12η(1+13η2).

其实也可以直接利用积分公式 xdxaxb=23a(2ba+x)axb 进行求解,这样就可以得到

t=m3α(M2mα+r)2αmrM2m2.

作前述的变量变换可得与前面相同的结果。因为 x=rcosφ,利用轨道方程 p/r=1+cosφ,则有

x=rcosφ=pr=p12p(1+η2)=12p(1η2).

利用关系 x2+y2=r2,有

y=r2x2=[12p(1+η2)]2[12p(1η2)]2=pη.

注意,因为 r 的取值范围是 [0,),则有 <η<.

1.3 T2

T2

质点在有心力场 U=α/r2(α>0) 内运动, 试求积分形式运动方程。

解:将函数代入式 (1), 得

t=dr2m(EUM22mr2)=m2drE+αr2M22mr2=m2rdrEr2+(αM22m)=m21EEr2+αM22m.

这给出了 r 与时间 t 的关系 r=r(t),

r=2Emt2αE+M22mE

为求 φ 与时间 t 的关系 φ=φ(t), 先求 r=r(φ)。由式 (2), 适当选取 φ 的起始线可以使得其中的 const=0, 则有

φ=Mdr/r22m(E+αr2M22mr2)=Mdu2m[E+(αM22m)u2]

积分的结果取决于参数的取不同值, 可以分为几种情况.

a)E>0, M22mα=β>0 时, 则上式变为

φ=M2mβduEβu2=M2mβarccosuE/β,

1r=u=Eβcos(2mβMφ)=2mEM22mαcos(φ12mαM2).

φ=0 时, r 有极小值

(i)rmin=M22mα2mE,

φ=0 所在位置是近心点与力心的连线。因为 r>0, 则 φ 的取值受到限制. 当 cos(φ12mαM2)=0, 即 φ=±π2/12mαM2 时, r, 故 φ 的取值范围为

π2/12mαM2<φ<π2/12mαM2.

这种情况下的典型轨道是螺线, 常称为 Cotes 螺线。图例:

r = \sec(0.05 \theta + 1)|0<\theta< 10

zz_figure/Pasted image 20251026135622.png

b)E>0, αM22m=β>0 时, 则有

φ=M2mβduEβ+u2=M2mβarsinhuE/β,

1r=u=Eβsinh(2mβMφ)=2mE2mαM2sinh(φ2mαM21).

同样 φ 的取值也受到限制以保证 r>0, 这里 φ<0 即可.

c)E<0, αM22m=β>0 时, 则有

φ=M2mβduu2|E|β=M2mβarccoshu|E|/β,

即有

1r=u=2m|E|2mαM2cosh(φ2mαM21).

φ=0 时, r 有极大值

rmax=2mαM22m|E|,

φ=0 所在位置是远心点与力心的连线。

需要说明的是:

本问题中质点的运动特征也可以通过有效势能进行分析. 有效势能为

Ueff=αr+M22mr2=(αM22m1r)1r.

αM22m=β>0 时, 有效势能为负, 表现为吸引力. 因此, 质点将冲向力心运动并最终“坠落”到力心; 当 αM22m<0 时, 有效势能为正, 表现为相斥力, 此时有一个转折点, 可由 E=Ueff=(αM22m)1rmin2 确定, 即有

rmin=M22mαE=M22mα2mE.

这与式 (i) 一致, 而且显然要求 E>0.

1.4 T3

T3

在势能 U=α/r 上增加一个小的修正 δU, 有限运动的轨道不再封闭, 并且每运动一圈轨道的近心点都有很小的角度改变量 δφ。在下面的情况下求 δφ: a) δU=β/r2, b) δU=γ/r3.

解:根据公式 (4), 当 rrmin 变到 rmax 再变到 rmin 时, 角变量 φ 的变化量 Δφ, 也即相邻近心点对力心的夹角为

(ii)Δφ=2rminrmax(M/r2)dr2m[EU(r)]M2/r2=2Mrminrmax2m[EU(r)]M2r2dr.

U=α/r+δU 代入上式, 注意到 δU 为小量, 可以对上式中的被积函数作 Taylor 展开, 并保留到 δU 的一阶项, 有

2m[EU(r)]M2r2=2m(E+αrδU)M2r22m(E+αr)M2r2mδU2m(E+αr)M2r2.

由此式 (ii) 变为

Δφ=2Mrminrmax2m(E+αr)M2r2dr+Mrminrmax2mδUdr2m(E+αr)M2r2.

其中第一项对应于在势能为 α/r 的场中质点运动轨道的相邻近心点对力心的夹角, 它等于 2π。上式中的第二项是势场修正引起的角变量的变化, 记为 δφ, 即

(iii)δφ=Mrminrmax2mδUdr2m(E+αr)M2r2.

利用力场未受修正时 rφ 之间的关系 (参见式 (2))

dr=r2M2m(EUM22mr2)dφ=r2M2m(E+αrM22mr2)dφ,

则式 (iii) 可以改写为

(iv)δφ=M(2mM0πr2δUdφ)

a)δU=β/r2 时, 则有

0πr2δUdφ=0πr2βr2dφ=β0πdφ=πβ,

于是由式 (iv) 可得

(v)δφ=M(2mMπβ)=2mπβM2=2πβpα.

对于这种情况, 势能实际上为

U=αr+βr2;

另外,质点在该力场中的运动是可以解析求解的。为此我们采用 Binet 公式 d2u(φ)dφ2+u=mM2 dU(u)du 求解, 用 u=1/r 表示时, 有

U=αu+βu2.d2udφ2+u=mM2(α+2βu),

d2udφ2+(1+2mβM2)u=mαM2.

这个方程的解为齐次方程的通解和非齐次方程的特解之和, 即

u=Acos(φ1+2mβM2)+mαM2+2mβ,

其中 A 为积分常数, 这里选取合适的初始条件使得初位相为零, 由上式, 可得

(vi)r=1Acos(φ1+2mβM2)+mαM2+2mβ=p1+ecos(φ1+2mβM2),

其中

p=M2+2mβmα,e=A(M2+2mβ)mα.

由式 (vi) 可知, 轨道是有限的, 但是, 当 φ0 变到 2π 时, r 从其极小值 rmin=p1+e 变到 r|φ=2πr|φ=0=rmin; 不回到初始的位置, 即轨道不封闭.

从式 (vi) 可知, 相邻两个近心点 (或远心点) 之间的夹角 Δφ 满足关系

Δφ1+2mβM2=2π,

Δφ=2π1+2mβM2.

当对力场没有修正,即 β=0 时,这个夹角应为 2π。可见为力势的变化导致近心角的改变为

δφ=Δφ2π=2π[11+2mβM21]2πmβM2.

其中最后一个等号是假定 β 为小量的结果, 这与式 (v) 是相同的。

b)δU=γ/r3 时, 有

0πr2δUdφ=0πr2γr3dφ=γ0π1rdφ=γp0π(1+ecosφ)dφ=γπp=γπmαM2,

其中 p=M2mα, e=1+2EM2mα2, 将其代入式 (iv) 可得

δφ=M(2mMγπmαM2)=6m2αγπM4=6γπp2α.

在这种情况下, 势能为

U=αr+γr3,

相应地, 有心力为

F=dUdr=αr2+3γr4,

其中第二项可以视为广义相对论对万有引力 (第一项) 的修正, 由此可以解释水星近日点的进动问题。在经典力学中该力场相关轨道的求解以及运动性质的讨论可参考有关文献。

2 T4

(1)Q=L×A=L×(p×Lμkr^)=const

其中

L×(p×L)=p(LL)L(Lp)=pL2=L2μv

代入(1)式可得到:

v=QmL2+kL2(L×r^)

右侧第一项是常矢量,且由于 Lr^,右侧第二项的模长恒为 kL。显然,第一项就是原点偏离圆心的大小,第二项就是速度图的半径大小。

3 T5: 选做题

3.1 (a)

选取坐标参数如下:
zz_figure/Pasted image 20251026155032.png

m3 在静止系中的速度是

v=v+ω×r=(x˙,y˙)+ω×(x,y)

于是拉氏量是

L=12m3|v+ω×r|2V,V=Gm1m3r13Gm2m3r23=12m3v2+m3v(ω×r)Veff,Veff=V12m3|ω×r|2=12m3(x˙2+y˙2)+m3ω(xy˙yx˙)

代入拉格朗日方程得到 m3 的运动方程:

m3x¨2m3ωy˙=Veffxm3y¨+2m3ωx˙=Veffy

显然上式第二项就是科里奥利力。对于平衡点,要求 r˙=r¨=0,即上式左侧为 0,即

(1)0=1m3veffx=Gm1x+aμ/m1r133+Gm2xaμ/m2r233ω2x(2)0=1m3Veffy=Gm1yr133+Gm2yr233ω2y.

i)y0,(2)就意味着:

Gm1r133+Gm2r233=ω2

代入(1)消去 r13r23 就得到:

ω2=G(m1+m2)r133=G(m1+m2)r233

ω2=G(m1+m2)a3 对比可知

r13=r23=a

也就是 m1,m2,m3 构成等边三角形,对应的解就是下图的 L4L5
zz_figure/Pasted image 20251026154032.jpg
ii)y=0,(1)式就简化为

Gm1x+aμ/m1|xaμ/m1|3+Gm2xaμ/m2|xaμ/m2|3ω2x=0

该方程没有解析解,只能用数值方法去逼近,它有三个解,对应于上图的 L1,L2,L3。当然,在限制性三体问题中 (m3m2m1),上式有近似解,就比如常见的日-地-月三者,就构成一个这样的限制性三体系统。

3.2 (b)

这道题没有给定参数的具体值,所以同学们可以任取(比如 m1=m2=m3=1)。这里就以地-月-卫星系统为例,因为它是限制性三体系统,所以

{xL1=RR(m2m2+3m1)1/30.84R3.2×105kmxL2=R+R(m2m2+3m1)1/31.16R4.5×105kmxL3=R+R(7m25m2+12m1)0.99R3.85×105kmrL4,rL5=(12R, ±32R)(1.96,±3.39)×105km

对应的绘图如下:
zz_figure/Pasted image 20250507090227.png
至于题目中的等势面,描述的其实就是相对于旋转系的速度为 0 的零速度面,我们一般称之为 Hill 曲面。它对应的表达式是(这里还是采用和第一问一样的,以质心为原点,而不是题目中以 m1 为原点):

1m3Veff=12ω2(x2+y2)Gm1r13Gm2r23C

绘制这个图对 C 的精度要求比较高,画出来是
zz_figure/Pasted image 20250507092214.png

Appendix 代码 %

上面两幅图用 python 绘制,代码是

# 绘制拉格朗日点
import numpy as np
import matplotlib.pyplot as plt

# 相对质量
earth_mass = 1.0
moon_mass = 7.342e22/(5.972e24)
R = 1.0   # 地月距离(归一化)

earth_position = np.array([0.0, 0.0])
moon_position = np.array([R, 0.0])
lagrange_points = [
    {"name": "L1", "position": np.array([0.84, 0.0])},
    {"name": "L2", "position": np.array([1.16, 0.0])},
    {"name": "L3", "position": np.array([-1.0, 0.0])},
    {"name": "L4", "position": np.array([0.5, np.sqrt(3)/2])},
    {"name": "L5", "position": np.array([0.5, -np.sqrt(3)/2])},
]

plt.figure(figsize=(8, 8))
plt.scatter(earth_position[0], earth_position[1], color='blue', s=100, label='Earth')
plt.scatter(moon_position[0], moon_position[1], color='gray', s=30, label='Moon')

for point in lagrange_points:
    plt.scatter(point["position"][0], point["position"][1], color='red', marker='x', s=50)
    plt.text(point["position"][0], point["position"][1], point["name"], fontsize=12, ha='right')
# 绘制月球轨道
theta = np.linspace(0, 2*np.pi, 100)
r = R * np.ones_like(theta)
plt.plot(r * np.cos(theta), r * np.sin(theta), color='gray', linestyle='-', label='Moon Orbit') # ecc=0.055忽略

plt.title('Lagrange Points', fontsize=16)
plt.xlabel('X (Normalized)', fontsize=12)
plt.ylabel('Y (Normalized)', fontsize=12)
plt.legend()
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5, linestyle='--')
plt.axvline(0, color='black', linewidth=0.5, linestyle='--')
plt.xlim(-1.5, 1.5)
plt.ylim(-1.5, 1.5)
plt.show()
# 绘制希尔曲线族
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D

G = 6.6743e-11  # m^3 kg^-1 s^-2
M = 5.972e24     # kg
m = 7.342e22     # kg
mu_1 = 398600   # km^3/s^2
mu_2 = 4903.02  # km^3/s^2
R = 3.844e5      # km
omega = np.sqrt((mu_1 + mu_2) / (R**3))  # 月球绕地球的角速度

# 网格
x = np.linspace(-6e5, 6e5, 20000)
y = np.linspace(-6e5, 6e5, 20000)
z = np.array([0])
x, y, z = np.meshgrid(x, y, z, indexing='ij')

earth_x = (m / (M + m)) * R # 假设地月质心在原点
moon_x = -(M / (M + m)) * R

# spacecraft 到地球和月球的距离
r_e = np.sqrt((x - earth_x)**2 + (y)**2 + (z)**2)
r_m = np.sqrt((x - moon_x)**2 + (y)**2 + (z)**2)
C_jacobi = 2 * mu_1 / r_e + 2 * mu_2 / r_m + omega**2 * (x**2 + y**2)  # 计算势能

def plot(C, ax):
    # 绘制希尔曲面
    mask = (C_jacobi < C) & (C_jacobi > C-0.001)
    print(f"num of points: {np.sum(mask)}")
    ax.scatter(x[mask], y[mask], marker='.', s=10, alpha=1, label=f"C={C}")

    # 设置坐标轴标签等
    ax.set_xlabel('X(km)')
    ax.set_ylabel('Y(km)')
    ax.ticklabel_format(style='sci', scilimits=(0,0), axis='both')

fig, ax = plt.subplots(figsize=(12, 12))
for i, C in enumerate([3.500, 3.343, 3.338, 3.326, 3.300, 3.159, 3.150, 3.135]):
    print(f"C={C}")
    plot(C, ax=ax)
    
plt.legend()
# plt.tight_layout()
plt.show()