06.1 什麼是流形#
本節目標#
- 用直覺理解「流形」(manifold):一個局部看起來像 \(\mathbb{R}^n\) 的空間。
- 認識一維與二維流形的典型例子:圓、球面、環面、莫比烏斯帶。
- 區分內在座標與外在(嵌入)座標。
- 用 SymPy 的
diffgeom模組寫出球面的參數化。
直覺:地球表面是最好的老師#
你每天走路上學,腳下的地面感覺是平的:向前一步、向右一步,就像在平面座標系走動。太陽比你大多了,當你站在真正的大地上而不只是街區裡,你覺得還是平的。但搭上飛機、從太空看地球,它是球形的。
這就是流形的核心思想:
流形是一個整體上可能彎曲、但每一小塊局部都像 \(\mathbb{R}^n\) 的空間。
「局部像 \(\mathbb{R}^n\) 」是什麼意思?意思是:在每一點附近,你都能找到一小塊鄰域,並在這塊鄰域上定義座標(幾個實數),使得這幾個實數唯一描繪這鄰域裡的點,而且鄰域的幾何在小尺度下與平坦空間幾乎沒有差別。
- 地球表面:局部像 \(\mathbb{R}^2\) ,所以是 2 維流形。
- 圓周:局部像一小段直線( \(\mathbb{R}^1\) ),所以是 1 維流形。
- \(\mathbb{R}^n\) 本身:最平凡的流形(一張圖就蓋住全部)。
注意流形不需要有一個「看得見」的彎曲藏在哪裡——只要你規定局部可用 \(n\) 個數描述,流形本身只知道維度與局部結構。彎不彎、長什麼樣,那是「嵌入」的事,稍後再談。
一維流形:圓為什麼學會了壞脾氣#
最簡單的非平凡一維流形是圓 \(S^1\) 。我們想用一個參數描述它。
失敗的嘗試:一個參數的陷阱#
直覺上,圓上每點可以用角度 \(\theta\) 描述。但 \(\theta\) 有個麻煩:
角度從 \(0\) 沿著圓走到 \(2\pi\) 時,你回到起點。一個參數在一個開區間上連續地描述整個圓做不到——圓是「閉合」的,你會在某一點撞到重複或斷裂。
數學上這件事的陳述是:沒有任何一個連續雙射能把整個圓映到 \(\mathbb{R}^1\) 的開區間。這其實就是拓樸的差異:圓在拓樸上和直線不同。
正確的做法:兩個座標卡#
解決辦法(下一節詳述)是:放棄一張圖,改用兩張。例如圓的東半可以用 \(y\) 當座標(因為 \(y\) 在東半是單值),西半可以用 \(-y\) 當座標。每一點至少落在一張圖裡,而兩張圖交疊的地方可以互相換算。
所以一維流形的定義就是:每點附近都有一段小鄰域,可被某個參數單值地描述。圓符合——只要你不堅持用同一個參數一張圖蓋住全部。
二維流形:球面、環面、莫比烏斯帶#
二維流形的經典例子:
球面 \(S^2\)#
局部像一小片平面,整體閉合。用經緯度 \((\theta, \phi)\) 描述,但北極點附近 \((\theta, \phi)\) 會失效(下一節細談),所以需要兩張以上的座標卡。
環面 \(T^2\)#
甜甜圈的表面: \(T^2 = S^1 \times S^1\) 。需要 \((u, v)\) 兩個角度參數,每個都像 \(S^1\) 一樣有重複問題。
莫比烏斯帶#
拿一條紙帶,扭半圈後黏合兩端。局部仍是平面,但整體「不可定向」:你沿著中央線走一圈回來,發現自己的左右互換了。這提醒我們:流形可以根據可否定向再分類。
mermaid 分類圖#
graph TD
A[流形 Manifold<br>局部像 R^n] --> B[1 維流形<br>局部像一段線]
A --> C[2 維流形<br>局部像一小片平面]
A --> D[n 維流形<br>局部像一坨 R^n]
B --> B1[圓 S^1]
B --> B2[線段、拋物線的一部分]
C --> C1[球面 S^2 可定向]
C --> C2[環面 T^2 可定向]
C --> C3[莫比烏斯帶 不可定向]
C1 --> C1a[嵌入 R^3]
C2 --> C2a[嵌入 R^3]
A --> E[嵌入 embeddings<br>內在 vs 外在]維度與嵌入:內在 vs 外在座標#
「維度」在流形理論裡是內在的——不是你在外面看到的,而是這個空間本身的自由度。
內在座標#
想像你是地球上的螞蟻,無法跳起來看三次。你只能用腳下的經緯度走動、測量:
這些是內在座標:它們只用流形自己的資訊。
外在座標#
如果你把它放進 \(\mathbb{R}^3\) ,每個點還可以有外在座標:
但外在座標有三個數,不是兩個——因為有多餘約束 \(x^2+y^2+z^2=1\) 。外在座標是嵌入(embedding)的副產品,不是流形的本質。同一個流形可以嵌入不同的環境空間(例如 \(S^2\) 可以嵌 \(\mathbb{R}^3\) ,也可以嵌 \(\mathbb{R}^4\) )。
微分幾何的態度:我們盡量只用內在座標講事情。彎曲程度(曲率)不需要從外面看「你彎得像什麼形狀」,而是用內在量(如度量,見 06.4)直接算出來。這就是為什麼紙帶在字面上沒有「外面」也能彎。
SymPy 實作:球面的參數化#
SymPy 的 sympy.diffgeom 已經內建了一些常見流形。我們先用它取球面,再自己寫一個參數化示範內在座標如何產生外在座標。
from sympy import symbols, sin, cos, pi
from sympy.diffgeom import Manifold, Patch, CoordSystem
from sympy.diffgeom import TensorProduct
# 建立一個 2 維流形與座標卡
m = Manifold('M', 2)
patch = Patch('P', m)
theta, phi = symbols('theta phi', real=True)
cs = CoordSystem('spherical', patch, [theta, phi])
# 用內在座標給出外在座標(嵌入到 R^3)
x = sin(theta)*cos(phi)
y = sin(theta)*sin(phi)
z = cos(theta)
print('嵌入公式:')
print('x =', x)
print('y =', y)
print('z =', z)
# 驗證 x^2+y^2+z^2 = 1(球面上,自動滿足)
from sympy import simplify
expr = simplify(x**2 + y**2 + z**2)
print('x^2 + y^2 + z^2 =', expr) # 應印出 1
輸出:
嵌入公式:
x = sin(theta)*cos(phi)
y = sin(theta)*sin(phi)
z = cos(theta)
x^2 + y^2 + z^2 = 1
這段程式抓到一個關鍵:內在座標只要 2 個參數 \((\theta, \phi)\) ,而外在座標 3 個數要滿足一條方程。差一個約束,正好差一維。
提醒:較新版 sympy 的
diffgeom介面有調整(例如CoordSystem直接接受 symbol 清單)。若你版本不同,跑起來語法有些差異時,看錯誤訊息微調即可,觀念不變。
動手實驗#
實驗 1:參數化球面的局部小片
在北極 \(\theta=0\) 附近,參數 \((\theta, \phi)\) 還沒失效(下一節會看到更精確的失效說明)。寫個小程式,在 \(\theta \in [0, 0.1]\) 、 \(\phi\) 各取值時印出 \((x,y,z)\) ,看看它們是不是像平面上一小塊格子:
import numpy as np
for theta_v in [0.0, 0.05, 0.1]:
for phi_v in [0.0, 0.5, 1.0]:
x = np.sin(theta_v)*np.cos(phi_v)
y = np.sin(theta_v)*np.sin(phi_v)
z = np.cos(theta_v)
print(f'theta={theta_v:.2f}, phi={phi_v:.1f} -> ({x:.4f}, {y:.4f}, {z:.4f})')
你會發現 \(z\) 幾乎都是 1, \(x, y\) 都非常小——局部像平面。
實驗 2:發現圓的一參數失敗
用角度 \(\theta\) 描述圓,試著檢查一個參數的雙射性:
from sympy import Symbol, sin, cos, Eq, simplify
th = Symbol('theta', real=True)
p1 = (cos(th), sin(th))
# 在 theta=0 與 theta=2*pi 時,點一樣嗎?
print('theta=0 :', (cos(0).evalf(), sin(0).evalf()))
print('theta=2*pi :', (cos(2*3.14159265358979).evalf(), sin(2*3.14159265358979).evalf()))
你會看到這兩個角度給出同一個點,證明單一參數無法一對一描述整個圓。
實驗 3:莫比烏斯帶的參數化
莫比烏斯帶參數化(需要 3 個外在座標,2 個內在參數 \(u, v\) ):
請注意 \(u\) 必須走到 \(2\pi\) 且半扭的效果藏在 \(\cos\frac{u}{2}, \sin\frac{u}{2}\) 的 \(\frac{u}{2}\) 。試著讓 \(u\) 從 \(0\) 跑到 \(4\pi\) 才回到自己,比較與一般環面的差別。
小結與練習#
- 流形:局部像 \(\mathbb{R}^n\) 、整體可以彎曲的空間。
- 維度是內在的:地球表面是 2 維,不管它嵌在哪個 \(\mathbb{R}^N\) 。
- 一張圖常常不夠:圓無法單參數描述整體,需要兩座標卡。
- 局部像平面是實驗可以驗證的事:不是比喻而已。
練習:
- 環面 \(T^2 = S^1 \times S^1\) 。請寫出它嵌入 \(\mathbb{R}^3\) 的參數化(用兩個角度 \(u, v\) ),並在 SymPy 中驗證它滿足的方程不是一條式子,而是有兩個獨立參數(提示:外在座標 3 個,內在 2 個,多 1 個關係)。
- 我們說 \(\mathbb{R}^n\) 本身是一個流形。請問 \(\mathbb{R}^3\) 中的單位球 \(S^2\) 是幾維流形?所謂「2 維」和「外在座標有 3 個」如何同時成立?
- 莫比烏斯帶為何不可定向?寫一段話用「沿著中央線走一圈,左右手交換」的比喻來解釋,並想想球面為什麼可以定向(提示:在球面上任何時候「左手邊」的定義都能一致延續)。
- 用 SymPy 驗證:把 \(S^2\) 的參數化代入 \(x^2 + y^2 + z^2\) ,化簡後是否恆為 1?這說明外在座標多了一個什麼樣的約束?