跳轉到

08.2 Ricci 張量與純量曲率#

本節目標#

  • 理解 Ricci 張量 \(R_{jl}\) 的體積偏差意義:它量測「小體積相對於歐氏空間的偏差」。
  • 定義純量曲率 \(R = g^{jl}R_{jl} = R^j{}_j\) ,並驗證球面給出 \(R = 2/r^2\) 。
  • 澄清一個常見誤解: \(R=0\) 不代表空間平坦;Riemann 張量比純量曲率豐富得多。
  • 學會高維的度規收縮技術: \(R_{jl} = g^{ik}R_{ikjl}\) 適用於任意維度。
  • 用 SymPy 計算球面與環面的 Ricci 與 \(R\) ,並整理非零分項表。
  • 動手實驗:視覺化 Ricci 流的直覺—— \(R>0\) 的區域會在流下收縮。

Ricci 的意義:體積偏差#

第 8.1 節把曲率彙整成四階的 Riemann 張量;我們需要更精簡的量。取一點 \(p\) 與單位向量 \(\mathbf{v}\) ,把 Riemann 用 \(\mathbf{v}\) 壓兩次:

\[ \operatorname{Ric}_{jl}v^j v^l \quad\text{(配合正規化常數)} = \frac{\operatorname{Vol}_{彎曲}(小柱體) - \operatorname{Vol}_{平面}}{\operatorname{Vol}_{平面}} \]

更精確的敘述是:沿 \(\mathbf{v}\) 方向切出的細小測地柱體,其體積與歐氏空間中同形柱體體積的相對偏差,由 \(\operatorname{Ric}(\mathbf{v},\mathbf{v})\) 控制。所以:

  • \(\operatorname{Ric}(\mathbf{v},\mathbf{v}) < 0\) :該方向的體積膨脹(如馬鞍面)。
  • \(\operatorname{Ric}(\mathbf{v},\mathbf{v}) > 0\) :該方向的體積收縮(如球面)。
  • 在 2 維: \(\operatorname{Ric}_{jl} = K\,g_{jl}\) ,Ricci 就是 Gauss 曲率乘上度量,沒有新資訊。
  • 在 \(n \geq 3\) :Ricci 是「方向平均後的截面曲率」,已丟失部分 Riemann 資訊。

純量曲率 \(R = R^j{}_j = \frac{2}{r^2}\) (球面)#

把 Ricci 用逆度量再壓一次,得純量曲率:

\[ R = g^{jl}R_{jl} = \operatorname{tr}_g(\operatorname{Ric}) = R^j{}_j \]

以球面為例,該面是 \(2\) 維常曲率空間, \(\operatorname{Ric} = K g = \frac{1}{r^2}g\) ,所以

\[ R_{\text{球面}} = g^{jl}\frac{1}{r^2}g_{jl} = \frac{1}{r^2}\cdot \delta^j_j = \frac{2}{r^2} \]

注意分子是維度 \(n\) :常曲率空間通式為 \(R = n(n-1)K\) 。

畫出 \(R\) 對 \(r\) 的關係(用 Matplotlib),可以直觀看到「球越小越彎」:

import numpy as np
import matplotlib.pyplot as plt

r = np.linspace(0.5, 3, 200)
plt.plot(r, 2/r**2, label=r'$R = 2/r^2$ (sphere)')
plt.axhline(0, color='gray', lw=0.8)
plt.xlabel('radius $r$')
plt.ylabel('scalar curvature $R$')
plt.legend(); plt.title('Scalar curvature of a sphere')
plt.show()

關鍵澄清: \(R = 0\) 不等於平坦#

這是初學者最常踩的坑。純量 \(R\) 是把 \(n^2\) 個 Ricci 分量加總成一個數,把 \(n^2(n^2-1)/12\) 個 Riemann 分量濃縮成一個數——丟失的資訊非常可觀。三個層級的對照:

張量 獨立分量(4 維) 判定平坦?
Riemann \(R_{\mu\nu\rho\sigma}\) \(20\) 若 \(R_{\mu\nu\rho\sigma}\equiv 0\) 才是內蘊平坦
Ricci \(R_{\mu\nu}\) \(10\) \(R_{\mu\nu}\equiv 0\) 仍可能不平坦(真空但非平)
純量 \(R\) \(1\) \(R=0\) 幾乎什麼都没說

分類學上的反例:在 \(4\) 維時空中,Schwarzschild 解的真空區域滿足 \(\operatorname{Ric} \equiv 0\) (因此 \(R\equiv 0\) ),但 Riemann 張量不為零——時空仍然彎曲。這是「純量歸零但張量不歸零」最著名的例子;引力波同理,曲率呈波狀分布而 \(R \equiv 0\) 。更基本的原因:純量 \(R\) 在 2 維恰好等價於全部曲率(因為 \(R = 2K\) ),但這是 \(2\) 維的特權; \(3\) 維以上立刻失效(順帶一提, \(3\) 維成立的是反過來的特權: \(\operatorname{Ric}\) 決定 Riemann)。更進一步,Ricci-flat 但非平坦的 K3 曲面與 Calabi–Yau 流形連 Ricci 都歸零,只有四階的 Riemann 存活。

口訣:Riemann ⊃ Ricci ⊃ R。壓縮方向不可逆;「純量為零」是最弱的平坦聲明。

高維的度規收縮法#

在 \(n\) 維,壓縮一律透過逆度量:

\[ \operatorname{Ric}_{jl} = g^{ik}R_{ikjl}, \qquad R = g^{jl}g^{ik}R_{ikjl} = g^{jl}R^i{}_{jil} \]

注意張量指標的位置約定要一致(我們的 \(R^i{}_{jkl}\) 中, \(i\) 升、其餘降),否則容易出現「壓錯對」的符號錯誤。檢查方法:對已知答案的空間(球面)先跑一遍驗證 pipeline。

SymPy 計算球面與環面的 Ricci 與 \(R\)#

第 8.1 節的 pipeline(metric → Gamma → Riemann → Ricci)可以直接沿用。這裡給出完整的兩案例計算:

案例 A:球面 \(g = \mathrm{diag}(r^2,\ r^2\sin^2\theta)\)

案例 B:平坦環面 \(g = \mathrm{diag}(1,\ 1)\) (參數 \(u,v\in[0,2\pi)\) ;這是內蘊平坦的環面,不是嵌入 \(\mathbb{R}^3\) 的甜甜圈)

import sympy as sp

def full_pipeline(g, coords, name):
    N = len(coords)
    g_inv = g.inv()
    Gamma = {}
    for i in range(N):
        for j in range(N):
            for k in range(N):
                e = sp.simplify(sp.Rational(1,2)*sum(
                    g_inv[i,m]*sp.diff(g[j,k], coords[m]) for m in range(N)))
                if e != 0:
                    Gamma[(i,j,k)] = e
    # Riemann (up-front index i)
    Rup = {}
    for i in range(N):
        for j in range(N):
            for k in range(N):
                for l in range(N):
                    e = sp.simplify(
                        sp.diff(Gamma.get((i,j,l),0), coords[k])
                      - sp.diff(Gamma.get((i,j,k),0), coords[l])
                      + sum(Gamma.get((i,k,m),0)*Gamma.get((m,j,l),0) for m in range(N))
                      - sum(Gamma.get((i,l,m),0)*Gamma.get((m,j,k),0) for m in range(N)))
                    if e != 0:
                        Rup[(i,j,k,l)] = e
    # 降低一個指標: R_{ajkl} = g_{am} R^m_{jkl}
    Rdown = {}
    for (i,j,k,l), v in Rup.items():
        for a in range(N):
            w = sp.simplify(sum(g[a,m]*Rup.get((m,j,k,l),0) for m in range(N)))
            if w != 0:
                Rdown[(a,j,k,l)] = w
    # Ricci: R_{jl} = R^i_{j i l} = g^{im} R_{m j i l}
    Ricci = sp.zeros(N,N)
    for j in range(N):
        for l in range(N):
            Ricci[j,l] = sp.simplify(sum(Rup.get((i,j,i,l),0) for i in range(N)))
    # 純量
    Rsc = sp.simplify(sum(g_inv[j,l]*Ricci[j,l] for j in range(N) for l in range(N)))
    print(f"=== {name} ===")
    print("Ricci =", Ricci)
    print("R =", Rsc)
    print("Riemann 獨立非零分量:", len(Rup))
    return Rup, Ricci, Rsc

th, u, v = sp.symbols('theta u v', real=True)
r = sp.symbols('r', positive=True)

gs  = sp.Matrix([[r**2, 0], [0, r**2*sp.sin(th)**2]])
full_pipeline(gs, (th, sp.Symbol('phi')), "球面")

gt = sp.eye(2)
full_pipeline(gt, (u, v), "平坦環面")

非零分項表

空間 Riemann 獨立分量 Ricci 非零項 \(R\)
球面(半徑 \(r\) ) \(1\) : \(R_{\theta\varphi\theta\varphi}=r^2\sin^2\theta\) \(\operatorname{Ric}_{\theta\theta} = 1\) , \(\operatorname{Ric}_{\varphi\varphi} = \sin^2\theta\) \(\dfrac{2}{r^2}\)
平坦環面 \(0\) 無 \(0\)
標準嵌入環面( \(\mathbb{R}^3\) 甜甜圈) \(1\) 兩個對角項,隨 \(u,v\) 變號 特定區域正、特定區域負

注意標準嵌入環面(甜甜圈)的有趣結論:外圈側 \(K>0\) ,內圈側 \(K<0\) ,因此純量曲率在曲面上是變號函數。

動手實驗:視覺化 Ricci 流的概念#

Ricci 流方程

\[ \frac{\partial g_{jl}}{\partial t} = -2\,\operatorname{Ric}_{jl} \quad\Longleftrightarrow\quad \frac{\partial K}{\partial t} = \Delta K + 2K^2 \ \ (\text{2 維}) \]

的直覺: \(\operatorname{Ric}\) 正比於度量時(常曲率),解是 \(g(t) = (1 - 2Kt)\,g(0)\) ——正曲率的面會收縮,負曲率的面會擴張。Poincaré 猜想的證明核心正是靠這條流把任意閉 3 維流形「修剪」成球。

用純數值視覺化收縮效應:

import numpy as np
import matplotlib.pyplot as plt

# 一維圓環的卡通版: 半徑 a(t) 滿足 da/dt = -2K a = -2*(1/a^2)*a = -2/a^2
t = np.linspace(0, 0.4, 200)
# 解析解: a(t)^3 = a0^3 - 6t
a0 = 1.0
a = (a0**3 - 6*t)**(1/3)

plt.plot(t, a, label=r'$a(t) = (a_0^3 - 6t)^{1/3}$')
plt.axvline(a0**3/6, color='r', ls='--', label='singular time $t=a_0^3/6$')
plt.xlabel('$t$'); plt.ylabel('radius $a(t)$')
plt.legend(); plt.title('Ricci flow shrinks positive curvature')
plt.show()

觀察:半徑在有限時間 \(t = a_0^3/6\) 收縮到零(奇異點),這正是曲面演化中出現「頸縮」與「手術」(surgery)的數學根源。

小結與練習#

本節重點

  1. Ricci \(\operatorname{Ric}_{jl}\) 是 Riemann 的第一道壓縮,量的是方向性體積偏差。
  2. 純量曲率 \(R = g^{jl}\operatorname{Ric}_{jl}\) 是第二道壓縮;常曲率空間 \(R = n(n-1)K\) ,球面 \(R = 2/r^2\) 。
  3. \(R = 0\) 不代表平坦:判平坦必須回到 Riemann 張量本身; \(\operatorname{Ric}=0\) (Ricci-flat)甚至都有非平坦範例(Schwarzschild 真空區、K3、Calabi–Yau)。
  4. 高維壓縮統一用 \(g^{ik}R_{ikjl}\) 與 \(g^{jl}R^i{}_{jil}\) 。
  5. SymPy pipeline 可以直接擴充算 Ricci 與 \(R\) ,球面給 Einstein manifold \(\operatorname{Ric} = \frac{1}{r^2}g\) 。

練習

  1. 用本節 pipeline 計算嵌入甜甜圈 \(X(u,v) = ((a+b\cos u)\cos v, (a+b\cos u)\sin v, b\sin u)\) 的 metric,找出 \(R\) 變號的曲線。
  2. 證明:2 維時 \(\operatorname{Ric}_{jl} = K g_{jl}\) ,因此 \(R = 2K\) 。(提示: \(2\) 維 Riemann 只有一個獨立分量。)
  3. 對 \(g = e^{2\phi(x,y)}(dx^2+dy^2)\) 推導 \(R = -2e^{-2\phi}\Delta\phi\) (保角變換公式),並用 SymPy 驗證 \(\phi = \log\frac{2r}{1+r^2}\) (球極投影)給出 \(R = 2\) 。
  4. 挑戰:構造一個 \(R \equiv 0\) 但 \(\operatorname{Ric} \neq 0\) 的對稱 \(2\times 2\) 跡零矩陣當玩具例(這不是真 metric,只是說明「壓縮丟資訊」的代數遊戲)。