可積分系 — トーラス上の運動
可積分系 — トーラス上の運動
個の互いに可換な保存量があれば、運動は次元トーラス上に閉じ込められる — ケプラー軌道が閉じた楕円になる理由。
はじめに
ハミルトン形式の魅力の一つは、「運動を解く」ことが「十分な数の保存量を見つける」ことに帰着する点にある。十分な数とは具体的にいくつなのか、そしてそれらの保存量が満たすべき代数的条件は何か — その問いに完全な答えを与えたのが リウヴィル–アーノルドの定理(Liouville–Arnold theorem) である。本章を終えると読者は、「可積分」という言葉が漠然とした表現ではなく、位相空間がトーラスに細かく分割されるという幾何学的命題であることを理解し、ケプラー軌道が閉じる理由がラプラス–ルンゲ–レンツベクトルという隠れた保存量にあると一行で説明できるようになる。
本論 1 — リウヴィル–アーノルドの定理
自由度のハミルトン系の位相空間は次元である。座標を、 と書こう。位相空間上の二つの関数 に対して ポアソン括弧(Poisson bracket) を
と定義する。二つの関数が可換(involution)であるとは、 ということだ。
ここで定義を述べる。次元位相空間上のハミルトン系が リウヴィル可積分(Liouville-integrable) であるとは、滑らかで関数的に独立な個の関数 が存在して、すべての に対して であり、そのうち一つがハミルトニアン 自身であるときをいう。
リウヴィル–アーノルドの定理の結論は二行に要約できる。共通レベル集合 がコンパクトかつ連結であるならば、その集合は次元トーラス と微分同相(diffeomorphic)である。そしてその上に適切な座標系 — 作用–角変数(action–angle variables) — を取れば、ハミルトン方程式は次のように自明になる:
各トーラスごとに固有の振動数ベクトル があり、運動はそのトーラスを等速で巻く直線になる。振動数の比が有理数なら軌跡は閉じ、無理数なら同じトーラスを稠密に埋め尽くす。
本論 2 — 可積分系はなぜ稀なのか
位相空間のあらゆる場所で個の可換な保存量を見つけられるという条件は、実は非常に強い条件である。一般的(generic)なハミルトニアンは、 自身以外の保存量を持たない。したがって可積分性は 非一般的(non-generic)な性質 であり、任意の小さな摂動でも壊れうる。
それでも物理でしばしば現れるモデルのうち可積分なものの一覧は短いが強力だ:自由粒子、任意自由度の調和振動子、ケプラー問題、剛体のオイラーの自由回転、そして一次元多体モデルであるカロジェロ–モーザー(Calogero–Moser)モデルなど。この一覧が短いという事実そのものが一つのメッセージを伝える — 解析的に解けるモデルは位相空間全体から見れば測度ゼロの例外なのだ。
第4章で扱う KAM(コルモゴロフ–アーノルド–モーザー)理論は、この可積分性がいかに脆いかを定量化する。あるトーラスは生き残り、あるトーラスは消える。その境界は振動数比の数論的性質が決定する — それが予告編である。
本論 3 — ケプラーの隠れた対称性
3次元ケプラー問題のハミルトニアンは
で、、 である。明白な保存量はエネルギー 、角運動量の大きさの二乗 、そしてその 成分 の三つ — 自由度3なのでこれだけでリウヴィル可積分の条件を満たしている。
ところがケプラー問題は さらに もう一つ持っている。ラプラス–ルンゲ–レンツベクトル(Laplace–Runge–Lenz vector)
はすべてのケプラー軌道に沿って保存される。このベクトルの方向は楕円軌道の長軸、すなわち近日点を向く。一般的な中心力 — たとえば 以外のべき — ではこの量は保存されず、惑星軌道は一周しても閉じずに 歳差(precession) する。ケプラー軌道が正確に閉じた楕円であること、つまりすべての惑星が ごとに同じ位置に戻ってくることは、この隠れた対称性の直接の帰結である。証明は省略し、次節で数値的に確認する。
Pythonで確かめる
# 2次元ケプラー:m=k=1、手書きRK4で閉じた楕円を描く。
import numpy as np
import matplotlib.pyplot as plt
m, k = 1.0, 1.0
def accel(r):
# 重力加速度: -k * r / |r|^3
return -k * r / np.linalg.norm(r)**3
def rhs(state):
r, v = state[:2], state[2:]
return np.concatenate([v, accel(r) / m])
def rk4_step(s, dt):
k1 = rhs(s)
k2 = rhs(s + 0.5*dt*k1)
k3 = rhs(s + 0.5*dt*k2)
k4 = rhs(s + dt*k3)
return s + (dt/6.0) * (k1 + 2*k2 + 2*k3 + k4)
dt, T = 0.005, 30.0
N = int(T / dt)
s = np.array([1.0, 0.0, 0.0, 0.8]) # r0=(1,0), v0=(0,0.8)
traj = np.empty((N+1, 4)); traj[0] = s
for i in range(N):
s = rk4_step(s, dt); traj[i+1] = s
def E_L_A(s):
r, v = s[:2], s[2:]
rn = np.linalg.norm(r)
p = m * v
E = 0.5*m*np.dot(v, v) - k/rn
Lz = r[0]*v[1] - r[1]*v[0] # 2D角運動量のz成分
A = np.array([p[1]*Lz, -p[0]*Lz]) - m*k*r/rn # LRLベクトル
return E, Lz, A
E0, L0, A0 = E_L_A(traj[0])
E1, L1, A1 = E_L_A(traj[-1])
print(f"E: {E0:+.8f} -> {E1:+.8f}")
print(f"Lz: {L0:+.8f} -> {L1:+.8f}")
print(f"A: {A0} -> {A1}")
plt.plot(traj[:,0], traj[:,1]); plt.axis('equal')
plt.xlabel('x'); plt.ylabel('y'); plt.title('Kepler orbit')
plt.show()
と が 以下の誤差で保存され、 の二成分もほぼ変化しなければ、ラプラス–ルンゲ–レンツベクトルの保存性を手で触れたことになる。軌道の図はちょうど一周した後、同じ位置に戻る閉じた楕円になるはずだ。
次章へ
第4章:摂動論では、可積分性が壊れるときにトーラスがどのように崩れていくかを見る。小さな摂動を加えたとき、どの振動数比のトーラスが生き残り、どれがカオスの海に沈むのか — これがKAMの定理の本論であり、可積分という理想化が実際に我々に何を教えるかという問いへの答えでもある。