数学的準備 — 多様体力学のための道具箱

ニュートンの法則を平面の外へ持ち出すには新しい語彙が要る — 基底、行列指数、そして接ベクトルへ至る最短経路。

はじめに

本書はラグランジュ・ハミルトン力学を多様体(manifold)の言葉で書き直す学習ノートである。その作業は第1章から始まるが、その前に読者の手元に揃えておきたい道具がいくつかある。この章を終えれば、読者は「基底の取り換え」をインデックス一行で書けるようになり、行列指数 etAe^{tA} がなぜフロー(flow)の最初の実例なのかを一文で言えるようになる。第4章の接空間、第5章のベクトル場が突然出てくる抽象ではなく、ここで見た絵の形式化だと見抜けるようになるはずだ。

本論 1 — なぜ道具箱が必要なのか

ニュートンが手渡した F=mx¨\mathbf{F} = m\ddot{\mathbf{x}} は、位置ベクトルが R3\mathbb{R}^3 に住んでいるという暗黙の仮定の上で動く。教科書の単振り子、惑星運動、衝突問題までならこの仮定で十分だ。しかし二重振り子(double pendulum)を考えてみよう。二本の棒の角度 (θ1,θ2)(\theta_1, \theta_2) が座標になるが、この座標空間は平面ではなくトーラス(torus) T2=S1×S1T^2 = S^1 \times S^1 である。座標 θ1=0\theta_1 = 0θ1=2π\theta_1 = 2\pi は同じ点なのに、平面の微積分はそれを認めない。

同じく剛体の姿勢は回転群 SO(3)SO(3) という曲面の上に住み、球面上の質点は S2S^2 の上に住む。こうした空間をまとめて呼ぶ名前が多様体 — 局所的には Rn\mathbb{R}^n のように見えるが大域的にはそうでない空間である。正式な定義は第4章に回すが、本書の前提は単純だ:配位空間が平面でない場合を扱うには、微積分の語彙を座標に依存しない形で書き直さなければならない。 その代償として、線形代数の語彙をもう一段磨くことになる。

本論 2 — 線形代数の復習

ベクトル空間 VV 上の基底(basis)とは、線形独立かつ VV 全体を張るベクトルの集合である。基底 {e1,,en}\{e_1, \dots, e_n\} を選べば任意のベクトル vVv \in V は一意な成分 (v1,,vn)(v^1, \dots, v^n) で書ける。本書ではアインシュタインの総和規約を採用する — 同じインデックスが上下に繰り返したら和をとる、という約束だ。だから

v=vieii=1nvieiv = v^i e_i \equiv \sum_{i=1}^{n} v^i e_i

これだけ書けば十分。上付きが成分(反変)、下付きが基底(共変)を表す。新しい基底 {ei}\{e_i'\}ei=A ijeje_i' = A^j_{\ i} e_j で与えられれば、同じベクトル vv の新しい成分 viv'^i は逆行列 (A1) ji(A^{-1})^i_{\ j} を掛けた形になる — これが座標変換(change of basis)であり、テンソル概念の出発点である。

次の道具は固有値と固有ベクトルだ。n×nn \times n 行列 AA に対して Av=λvA v = \lambda v を満たす零でない vv があるとき、λC\lambda \in \mathbb{C} を固有値という。固有値は行列を回転・伸縮に分解する座標を教えてくれる。

そしてこの章の主役が登場する — 行列指数(matrix exponential)である。スカラーの指数関数 ex=1+x+x2/2!+e^x = 1 + x + x^2/2! + \cdots をそのまま行列に移したものだ。AAn×nn \times n 行列のとき

etA=I+tA+(tA)22!+(tA)33!+e^{tA} = I + tA + \frac{(tA)^2}{2!} + \frac{(tA)^3}{3!} + \cdots

この級数は任意の AA に対し絶対収束する。線形ODE x˙=Ax\dot x = Ax の解は — 証明はひとまず事実として受け入れよう — x(t)=etAx0x(t) = e^{tA} x_0 と書ける。ここで強調したい:tt を変えながら etAe^{tA}x0x_0 に作用させること、すなわち時間 tt の間だけシステムを流す行為こそ、これからフロー(flow)と呼ぶ対象の最初の実例である。etAe^{tA}R\mathbb{R} で媒介された線形写像の一径数族であり、第5章で一般化される絵の最も素朴な見本だ。

本論 3 — 接ベクトルの直観

平面上のベクトルはどこに持っていっても同じベクトルである。平行移動は自由だ。しかし球面 S2S^2 上ではそうはいかない。赤道のある点で東を指す矢印を北極まで平行移動したとき、その矢印がどこを向けばよいかは自明ではない。

解決策は点ごとに自分専用のベクトル空間を持たせることだ。点 pp の上の接ベクトル(tangent vector)とは、直観的には「点 pp で曲面が許す速度」のことである。点 pp における接ベクトル全体がつくるベクトル空間を接空間 TpMT_p M と呼ぶ。球面の北極における接空間 TNS2T_{\text{N}} S^2 は、北極で球面に接する水平面 — 直観そのままだ。

もう少し形式的に見よう。点 pp を通る曲線 γ:(ε,ε)M\gamma : (-\varepsilon, \varepsilon) \to M, γ(0)=p\gamma(0) = p をとる。その曲線の時刻0における速度 γ˙(0)\dot\gamma(0) が一つの接ベクトルである。座標 (x1,,xn)(x^1, \dots, x^n) をとれば γ˙(0)=γ˙i(0)ip\dot\gamma(0) = \dot\gamma^i(0)\, \partial_i \big|_p と書け、基底 {ip}\{\partial_i|_p\}TpMT_p M の基底の役目を果たす。この式が本論 2 の v=vieiv = v^i e_i と完全に同じ形式であることだけ覚えておけばよい。

この章では絵と語彙を押さえれば十分だ。正式な定義・同値性・基底の取り換えは第4章に譲る。しかし一つだけ釘を刺しておこう:ベクトル場とは「空間の各点に接ベクトルを一つずつ」滑らかに敷いたものであり、それに沿って点を流した結果がフローである。etAe^{tA} はそのすべての絵の平面板にすぎない。

Pythonで確かめる

# 行列指数が本当に回転を生み出すかを確かめる。
# A = [[0,-1],[1,0]] は平面回転の生成子で、
# その指数 e^{tA} を x0 = (1,0) に作用させると単位円になるはず。
import numpy as np
import matplotlib.pyplot as plt

A = np.array([[0.0, -1.0], [1.0, 0.0]])
x0 = np.array([1.0, 0.0])

def expm_series(M, terms=20):
    # 打ち切りテイラー級数:小さい ||M|| で十分高精度
    n = M.shape[0]
    result = np.eye(n)
    term = np.eye(n)
    for k in range(1, terms):
        term = term @ M / k
        result = result + term
    return result

ts = np.linspace(0.0, 2 * np.pi, 200)
xs = np.array([expm_series(t * A) @ x0 for t in ts])

# 閉じた形 cos t, sin t と比較
closed = np.array([[np.cos(t), np.sin(t)] for t in ts])
err = np.max(np.abs(xs - closed))
print(f"級数解と閉形式の最大誤差 = {err:.2e}")

plt.plot(xs[:, 0], xs[:, 1])
plt.gca().set_aspect("equal")
plt.title(r"$e^{tA} x_0$ が描くフロー")
plt.show()

誤差が 101010^{-10} オーダーに落ち、図が単位円を描けば、「etAe^{tA} とは初期ベクトルに時間 tt だけ作用するフローだ」という定義が手につかめたといってよい。

次章へ

第1章: 運動方程式では、ニュートンの F=mx¨\mathbf{F} = m\ddot{\mathbf{x}} を一般座標 qiq^i の言葉で書き直し、そこからラグランジアンが自然に浮かび上がる過程を追う。本章で揃えたインデックス記法とフローの絵が、その作業の基本語彙として働く。