多様体 — 局所的には平坦な空間
多様体 — 局所的には平坦な空間
各点の近傍では のように滑らかに座標が貼れるが、全体としては曲がっていることもある空間 — チャートとアトラスで多様体を定義し、 の立体射影で一度に触れてみる。
はじめに
第1章で一度だけ顔を出した言葉 — 配位空間 は多様体である — がこの章の主題だ。多様体の正式な定義は二文で終わるが、その二文を受け入れるにはまずチャート(chart)とアトラス(atlas)という二つの道具が要る。この章を終えると、読者は単位球面 上のすべての点に座標を与える立体射影の二枚を自分で書き下せるようになり、単振り子・二重振り子・剛体の配位空間がなぜ ではなく 、、 なのかを一文で説明できるようになる。
本論 1 — 二文で終わる定義
次元多様体 とは、局所的に のように見える空間のことである。正式には、 の任意の点 に対して、 を含む開近傍 と同相写像 の対 — これをチャート(chart) と呼ぶ — が存在する。さらに、二つのチャート 、 の定義域が重なる場所 で、遷移写像(transition map) が滑らかであれば、 を滑らかな多様体(smooth manifold) と呼ぶ。
チャートは語彙としては地図一枚に相当する。一枚の地図では地球全体を覆えないから、複数枚を束ねる必要がある — その束がアトラス(atlas) だ。二枚の地図が重なるところで緯度・経度の座標が滑らかに変換されるなら、このアトラスは滑らかな構造を定める。
具体例を四つ書き留めておく。
- : たった一枚のチャート で終わる。1次元なら直線、2次元なら平面。
- (1次元の円): 上半円と下半円の二枚で覆われる。
- (2次元の球面): 北極からの立体射影と南極からの立体射影の二枚で覆われる。
- ( 次元トーラス): 各 ごとに二枚、合計 枚の積チャートで覆われる。
この四つが、解析力学で出会う配位空間のほぼすべてである。
本論 2 — の立体射影
最も手に取りやすい例が の立体射影(stereographic projection)だ。 の中に単位球面 を置く。北極 から 上の点 を通る直線が平面 と交わる点 を、その点の座標とする。相似比を解くと
この写像が である。分母 が 0 になるのは正確に の一点だけだから、チャートの定義域からは だけが抜ける。同様に南極 から射影すれば
この第二のチャート が 以外すべてを覆う。二つを合わせれば、 の任意の点は少なくとも一枚のチャートの中に入る。
重なる領域 上で遷移写像はどんな形になるか。 の逆写像で を 上の点に戻し、もう一度 で射影すると、直接計算で次の綺麗な形に落ちる。
これは 上で滑らかだ — 分母が 0 になる原点は北極 に対応し、すでに定義域から抜けている。したがって二つの立体射影は滑らかなアトラスを構成し、 は滑らかな2次元多様体である。
本論 3 — 配位空間が多様体でなければならない理由
ここで第1章の約束を回収しよう。平面単振り子の一般化座標 を の上に住むと書くと困る — と は同じ物理状態だからだ。つまり単振り子の配位空間は ではなく である。 と書いて解いても運動方程式の解は得られるが、周期性・角度の剰余演算を手作業で持ち回らなければならない。
二重振り子は二つの角 の組で、それぞれが独立に 上に住むので配位空間は となる。平面 ではない。両者の違いは可視化で最も鮮明に出る — トーラス上の軌道は二つの方向にいずれも「巻き付いて」戻ってくるが、 の図はその巻き付きを表せない。
剛体の回転姿勢はどうか。3次元回転群 は 9 個の行列成分で書かれるが、直交性・行列式 1 という 6 個の拘束を満たし、自由度は 3 となる。 は 3 次元の滑らかな多様体であり — 同時に群なのでリー群(Lie group) と呼ばれる — ベクトル空間ではない。オイラー角をそのまま の座標であるかのように扱うと、ジンバルロック(gimbal lock)のような座標特異点が現れる。これは を一枚のチャートで覆おうとした帰結であって、物理の病ではない。
要するに、一般化座標が住んでいる空間を多様体として受け入れると、座標依存の人工物(周期性・ジンバルロック・拘束力)を式の外に置くことができる。チャートは計算のための道具で、多様体そのものは座標に先立って存在する — この視点が第5章で扱うベクトル場へとつながる。
Pythonで確かめる
# S^2 上に一様に1000点を取り、北極立体射影で平面に下ろす。
# 赤道は単位円に、南極は原点に射影される。
import numpy as np
import matplotlib.pyplot as plt
rng = np.random.default_rng(0)
target = 1000
xs, ys, zs = [], [], []
while len(xs) < target:
# マルサリア法: (u,v) ~ U(-1,1), u^2+v^2 <= 1 のみ採用
u = rng.uniform(-1.0, 1.0, size=2000)
v = rng.uniform(-1.0, 1.0, size=2000)
s = u*u + v*v
keep = s <= 1.0
u, v, s = u[keep], v[keep], s[keep]
root = np.sqrt(1.0 - s)
xs.extend((2 * u * root).tolist())
ys.extend((2 * v * root).tolist())
zs.extend((1.0 - 2.0 * s).tolist())
x = np.array(xs[:target]); y = np.array(ys[:target]); z = np.array(zs[:target])
# 北極 (0,0,1) からの立体射影
mask = z < 1.0 - 1e-6
U = x[mask] / (1.0 - z[mask])
V = y[mask] / (1.0 - z[mask])
plt.figure(figsize=(5, 5))
plt.scatter(U, V, s=4, alpha=0.5)
plt.gca().set_aspect("equal")
plt.xlim(-4, 4); plt.ylim(-4, 4)
plt.xlabel("u"); plt.ylabel("v")
plt.title("Stereographic projection of $S^2$ from N")
plt.show()
赤道()の点は正確に単位円の上に落ち、南極近傍の点は原点近傍に集まる。北極に近づくほど射影された点は無限に飛んでいき、チャートの定義域から外れた一点が何であるかを図そのものが教えてくれる。
次章へ
5章: ベクトル場と流れでは、多様体上の「向き」が座標を介さずにどう定義されるかを扱う。各点に接ベクトルを一つずつ貼り付けたものがベクトル場、それに沿って動かす1パラメータ変換群が流れ(flow)である。この章で触れたチャートと遷移写像は、その際に接空間(tangent space)が座標系の間でどう変換されるかを決めるヤコビとして再び姿を見せる。