1890 - Peano 曲線(一條線填滿整個正方形)#
案件摘要#
1890 年,Giuseppe Peano(1858–1932) 在《數學年刊》發表 Sur une courbe, qui remplit toute une aire plane,展示了一個讓數學界震驚的怪物:
一維的線,可以「填滿」二維的面——維數的直覺崩潰了!
這是維數論(dimension theory)的起點—— 「什麼是維數」從此成為一個需要嚴格定義的問題。
前因 -- 為什麼會有這個案子#
- Cantor 的集合論(1874–1884): Cantor(1874)證明實數與 \(\mathbb{R}^2\) 等基數(同樣多):
Cantor 自己也震驚:
「我看到了,但我不相信!」 這是「一維與二維同樣多個點」的集合論證明—— 但 Cantor 的對射不連續。 - 自然的問題(1878–1890):
- Peano 的回答(1890): 可以!Peano 用三進位展開構造了一個連續的滿射(surjection):
注意:是滿射而非對射—— Netto(1879)已證明連續對射不可能(維數障礙)。
- Hilbert 的接力(1891): Hilbert 在 1891 年給出了更直觀的幾何版本(Hilbert 曲線)—— 用「U 形折疊」的疊代構造,一條線反覆折疊,填滿整個正方形。
線索與推理 -- 數學式、程式、理論#
第一條線索:Peano 曲線的構造(三進位)#
Peano 的構造:把 \(t \in [0,1]\) 寫成三進位:
定義映射:
(奇數位給 \(x\) ,偶數位給 \(y\) ,中間經過一個「翻轉」變換)。 性質: - 連續:三進位展開的映射連續(可證明); - 滿射:每個 \((x,y)\) 都被某個 \(t\) 映到。
第二條線索:Hilbert 曲線(1891,幾何版本)#
Hilbert 的疊代構造: 1. 第 0 步:一個點; 2. 第 1 步:一個 U 形(經過 4 個小正方形的中心); 3. 第 n 步:把每個 U 形縮小 2 倍,旋轉並連接——
極限: \(\lim_{n\to\infty} H_n = H\) 是連續滿射 \([0,1] \to [0,1]^2\) 。 收斂的證明:Hilbert 曲線序列在一致收斂拓樸下收斂—— 一致極限的連續性(Weierstrass M-判別法)保證極限連續。
第三條線索:維數的嚴格定義(Peano 曲線的後果)#
Peano 曲線證明「點的個數」不能定義維數—— 維數需要新的定義: 1. 拓樸維數(Brouwer, 1913;Urysohn, 1922;Menger, 1923):
- 點 = 維數 0;
- 線 = 維數 1(切一點,剩兩段,邊界是點);
- 面 = 維數 2(切一線,邊界是線)。
- Hausdorff 維數(1918):
- Peano 曲線的 Hausdorff 維數 = 2(雖然拓樸維數 = 1)!
- 分形(fractal,Mandelbrot 1975):Hausdorff 維數非整數的集合—— Peano 曲線是第一個「維數異常」的例子。
Python:Hilbert 曲線的疊代構造#
import numpy as np
# 1) Hilbert 曲線的疊代構造
def hilbert_curve(order):
"""產生 Hilbert 曲線的第 order 次疊代(座標序列)"""
def hilbert(x, y, xi, xj, yi, yj, n):
"""遞迴:從 (x,y) 出發,方向 (xi,xj) 與 (yi,yj),n 階"""
if n <= 0:
pts.append((x + (xi + yi)/2, y + (xj + yj)/2))
else:
hilbert(x, y, yi/2, yj/2, xi/2, xj/2, n-1)
hilbert(x + xi/2, y + xj/2, xi/2, xj/2, yi/2, yj/2, n-1)
hilbert(x + xi/2 + yi/2, y + xj/2 + yj/2, xi/2, xj/2, yi/2, yj/2, n-1)
hilbert(x + xi/2 + yi, y + xj/2 + yj, -yi/2, -yj/2, -xi/2, -xj/2, n-1)
pts = []
hilbert(0, 0, 1, 0, 0, 1, order)
return np.array(pts)
print("Hilbert 曲線的疊代:")
for order in [1, 2, 3, 4]:
pts = hilbert_curve(order)
n_squares = 4**order
total_len = np.sum(np.linalg.norm(np.diff(pts, axis=0), axis=1))
print(f" order={order}: 經過 {n_squares} 個小正方形,曲線長度 = {total_len:.4f}")
print(" → 長度隨 order 指數增長(2^order);極限長度 = ∞\n")
# 2) 驗證曲線的「覆蓋性」:order=3 的曲線經過 8×8 網格的每個中心
pts3 = hilbert_curve(3)
# 8×8 網格的中心:(i+0.5)/8, (j+0.5)/8
grid_centers = {(round((i+0.5)/8, 4), round((j+0.5)/8, 4))
for i in range(8) for j in range(8)}
curve_pts = {(round(x, 4), round(y, 4)) for x, y in pts3}
covered = grid_centers & curve_pts
print(f"覆蓋性驗證(order=3):")
print(f" 網格中心數 = {len(grid_centers)}")
print(f" 曲線經過的中心數 = {len(covered)}")
print(f" 覆蓋率 = {len(covered)/len(grid_centers):.1%}")
print(" → 極限情況下覆蓋率 = 100%(Peano 曲線的性質)\n")
# 3) Hausdorff 維數:Peano/Hilbert 曲線 = 2
print("Hausdorff 維數(覆蓋的指數):")
for order in [1, 2, 3, 4]:
# 每個「小正方形」邊長 = 1/2^order,需要 4^order 個
eps = 1/2**order
N = 4**order
dim = np.log(N)/np.log(1/eps)
print(f" order={order}: ε = {eps:.4f}, N(ε) = {N}, dim_H = {dim:.4f}")
print(" → dim_H → 2(Peano 曲線的 Hausdorff 維數 = 2)")
print(" → 拓樸維數 = 1,但 Hausdorff 維數 = 2(維數異常!)\n")
# 4) Cantor 集的對照:維數 = ln2/ln3 ≈ 0.631
print("Cantor 集的 Hausdorff 維數:")
dim_cantor = np.log(2)/np.log(3)
print(f" dim_H = ln2/ln3 = {dim_cantor:.6f}(非整數 → 分形)")
Hilbert 曲線的疊代:
order=1: 經過 4 個小正方形,曲線長度 = 1.5000
order=2: 經過 16 個小正方形,曲線長度 = 3.7500
order=3: 經過 64 個小正方形,曲線長度 = 7.8750
order=4: 經過 256 個小正方形,曲線長度 = 15.9375
→ 長度隨 order 指數增長(2^order);極限長度 = ∞
覆蓋性驗證(order=3):
網格中心數 = 64
曲線經過的中心數 = 64
覆蓋率 = 100.0%
→ 極限情況下覆蓋率 = 100%(Peano 曲線的性質)
Hausdorff 維數(覆蓋的指數):
order=1: ε = 0.5000, N(ε) = 4, dim_H = 2.0000
order=2: ε = 0.2500, N(ε) = 16, dim_H = 2.0000
order=3: ε = 0.1250, N(ε) = 64, dim_H = 2.0000
order=4: ε = 0.0625, N(ε) = 256, dim_H = 2.0000
→ dim_H → 2(Peano 曲線的 Hausdorff 維數 = 2)
→ 拓樸維數 = 1,但 Hausdorff 維數 = 2(維數異常!)
Cantor 集的 Hausdorff 維數:
dim_H = ln2/ln3 = 0.630930(非整數 → 分形)
結案 -- 後果與影響#
- 維數論的誕生(1890–1923):
- Brouwer(1913):維數的歸納定義(維數不變量定理:同胚保持維數);
- Urysohn–Menger(1922–1923):小歸納維數的公理化;
- Hurewicz–Wallman(1941):Dimension Theory——維數論的教科書。
- 分形幾何的先聲(1918–1975):
- Hausdorff 維數(1918):非整數維數的測量;
- Koch 曲線(1904)、Sierpinski 三角(1915)、Cantor 集(1883): 一系列「維數異常」的怪物;
- Mandelbrot(1975):Fractals——把這些怪物統一為「分形」:
- 空間填充曲線的應用(1990s–):
- 資料庫索引(Hilbert 曲線索引):把二維(地圖、影像)映射到一維索引—— MySQL、PostgreSQL 的空間索引用 Hilbert 曲線;
- 影像處理:Hilbert 掃描比逐行掃描保留更多局部性(image compression);
- 並行計算:Hilbert 曲線用於任務分配(負載平衡)。
- 數學基礎的危機(1890–1930): Peano 曲線與 Cantor 集合論一起,引發了數學基礎的危機:
- 直覺主義(Brouwer, 1908):反對「無限集合」的實在論;
- 形式主義(Hilbert, 1899):數學 = 形式系統;
- 邏輯主義(Russell, 1903):數學 = 邏輯。
- 現代應用(2000s–):
- 機器學習:空間填充曲線用於降維(PCA、t-SNE 的對照);
- 神經網路:Hilbert 曲線用於權重排序(記憶體局部性);
- 分形天線(1990s–):手機天線用分形形狀(多頻段的緊湊設計)。
- 歷史定位:Peano 曲線是「直覺的崩潰」與「嚴格化的開始」—— 它告訴我們:數學的直覺必須被嚴格定義檢驗。
關鍵人物與文獻#
- G. Peano:Sur une courbe, qui remplit toute une aire plane(1890);Peano 公理(1889)。
- D. Hilbert:Über die stetige Abbildung einer Linie auf ein Flächenstück(1891)——Hilbert 曲線。
- L. E. J. Brouwer:Über den natürlichen Dimensionsbegriff(1913)——維數不變量。
- F. Hausdorff:Dimension und äusseres Maß(1918)——Hausdorff 維數。
- B. Mandelbrot:Les objets fractals(1975);The Fractal Geometry of Nature(1982)。
- 相關案件:
1858-莫比烏斯帶.md、1752-歐拉多面體公式.md、1956-異質球面.md。