07.1 張量是什麼#
本節目標#
- 理解張量的核心定義:依座標系以確定方式變換的多重線性物件。
- 認識最熟悉的張量——度量張量 \(g_{ij}\) ,並確認它是 2 階協變張量。
- 掌握座標變換法則 \(\tilde{g}_{kl} = \dfrac{\partial x^j}{\partial \tilde{x}^k}\dfrac{\partial x^l}{\partial \tilde{x}^l} g_{jl}\) ,並用 SymPy 完整驗證。
- 區分反變指標(上標)與協變指標(下標)的幾何意義,用極座標看向量場分量的變化。
- 建立「座標會變、幾何不變」的觀點,這是第 7 章一切理論的出發點。
直覺:換座標,東西跟著怎麼變?#
在第一章我們量過曲線長度,在第二章我們用第一基本形式 \(E,\ F,\ G\) 量曲面上的長度。這些量都有一個共同特徵:它們描述的幾何事實不因座標選擇而改變,但它們的「數字表示」隨座標而變。張量正是把「怎麼變」寫成明確公式的數學物件。
一個直覺的比方:同一支箭在房間裡指向北方,你換個站姿從另一邊看它,它在你眼中的「左右分量、前後分量」都變了,但箭本身沒動。分量變換、物件不變——這就是張量的精神。
形式上,如果一個「東西」在每個座標系都有一組分量,且兩個座標系的分量之間滿足一條固定的變換公式,它就是張量。變換公式由兩種基本類型組合而成:
- 協變(下標):像度量 \(g_{ij}\) 、或函數的梯度分量 \(\partial_i f\) ,隨「基底向量」一起變。
- 反變(上標):像向量的分量 \(v^i\) ,與基底「反向相消」地變,使向量 \(\mathbf{v} = v^i \mathbf{e}_i\) 本身不變。
度量是最重要的 2 階張量#
回顧第二章:曲面上第一基本形式在座標 \((u^1, u^2)\) 下寫成
其中 \(\mathbf{r}_i = \partial \mathbf{r}/\partial u^i\) 是座標切向量。現在換座標 \(\tilde{x}^k \mapsto x^j\) (舊座標是新座標的函數),新的座標切向量由鏈鎖法則給出:
於是新度量是
這正是協變張量的變換法則:每個下標都乘一個「舊對新」的雅可比因子。注意這條公式不是我們憑空規定的——它是「度量等於切向量內積」這個幾何定義的直接推論。張量定義之所以長那個樣子,是為了把這類計算的結果公式化。
反變與協變:極座標下的向量場#
\(g_{ij}\) 有兩個下標,是 \((0, 2)\) 型張量。向量分量 \(v^i\) 有上標,是 \((1, 0)\) 型。為了看出差別,考量平面上的極座標:
切向量是 \(\mathbf{e}_r = (\cos\theta, \sin\theta)\) 、 \(\mathbf{e}_\theta = (-r\sin\theta, r\cos\theta)\) 。注意 \(\|\mathbf{e}_\theta\| = r\) :極座標的基底向量長度隨位置變化!同一個實際向量,在原點附近的 \(\theta\) -分量數值會被放大,這就是「分量座標相依」最直接的展示。
度量矩陣也應了這一點:
\(g_{\theta\theta} = r^2\) 正是 \(\mathbf{e}_\theta\) 長度的平方。把一個物理向量(例如流速場 \(\mathbf{v} = (1, 0)\) ,即處處向東的均勻流)分別寫成直角座標與極座標分量,會看到極座標分量 \(v^r,\ v^\theta\) 隨位置劇烈變化——雖然流場本身處處相同。
SymPy 驗證:度量的座標變換#
我們用兩個例子驗證變換法則。第一個:極座標 ⇄ 直角座標應得到 \(\mathrm{diag}(1, r^2)\) 。第二個:球面度量在兩種參數化下的變換。
例 1:平面直角 → 極座標#
import sympy as sp
r, th = sp.symbols('r theta', real=True, positive=True)
x, y = sp.symbols('x y', real=True)
# 座標變換:舊(直角)是新(極)的函數
x_of = r*sp.cos(th)
y_of = r*sp.sin(th)
# 直角座標下的度量:Euclid 度量
g_xy = sp.Matrix([[1, 0], [0, 1]])
# 雅可比:dx^j / d x~^k
J = sp.Matrix([
[sp.diff(x_of, r), sp.diff(x_of, th)],
[sp.diff(y_of, r), sp.diff(y_of, th)]
])
# 變換法則: g~ = J^T g J
g_rth = sp.simplify(J.T * g_xy * J)
print(g_rth)
# Matrix([[1, 0], [0, r**2]]) ✓
中間那步 \(g_{\tilde{x}^k \tilde{x}^l} = \sum_{j,m} J_{kj} J_{lm} g_{jm}\) 用矩陣正是 \(J^\mathsf{T} g\, J\) ——把兩個下標各配一個雅可比因子。
例 2:同度量,兩種參數化(自建矩陣做法)#
再驗證一次「分配律」式的張量行為:把直角座標再轉一個角度(旋轉 \(\alpha\) ),度量應完全不變(因為旋轉保持內積)。
a = sp.symbols('alpha', real=True)
# 旋轉變換:舊座標 = R 新座標
X = sp.Matrix([[sp.cos(a), -sp.sin(a)], [sp.sin(a), sp.cos(a)]])
g_new = X.T * g_xy * X
print(sp.simplify(g_new)) # 仍為 identity:度量在旋轉下不變
例 3:球面度量的座標變換#
球面半徑 1,兩種參數化:(a) 球面座標,(b) 修正參數化 \(\tilde{\phi} = \phi/2\) (放大壓縮經度方向)。第 5 章曾把這當成 Insight 練習,這裡用張量變換一次到位。
ph, tp = sp.symbols('phi tphi', real=True)
# (a) 球面座標下的度量(theta ∈ [0, pi], phi ∈ [0, 2pi))
E, G = 1, sp.sin(ph)**2
g_sph = sp.diag(E, G)
# (b) 換經度參數:新座標 (theta, tphi),舊座標 = (theta, 2*tphi)
# 新座標 (ttheta, tphi),舊座標為其函數:theta = ttheta, phi = 2*tphi
tt = sp.Symbol('ttheta', real=True)
ph_of = 2*tp
J3 = sp.Matrix([[1, 0], [0, 2]]) # 第一列: d(theta)/d(ttheta)=1, 其餘 0;第二列: d(phi)/d(tphi)=2
g2 = sp.simplify(J3.T * g_sph * J3)
print(g2)
# Matrix([[1, 0], [0, 4*sin(2*tphi)**2]])
print(sp.simplify(g2[1,1] - 4*sp.sin(2*tp)**2)) # 0 ✓
關鍵檢查:新舊表示算出的線元素必須相同:
代入 \(\phi = 2\tilde\phi\) 立即相符。長度是幾何量——不變; \(g\) 的分量——變了。
動手實驗#
實驗 1:向量場分量的座標相依
# 均勻流 v = (1, 0):直角座標下處處相同
# 極座標分量:v^r = v·e_r/|e_r|^2 ... 直接用內積投影
vr = sp.simplify(x_of*1 + y_of*0) # v 在 e_r 方向的投影 Cos(theta)
vth_len = sp.sqrt(x_of**2 + y_of**2) # |e_theta| = r
print("v^r =", vr, "= cos(theta)") # = cos θ
print("v·eθ =", -r*sp.sin(th)*sp.cos(th)*1 + r*sp.cos(th)*sp.sin(th)*0,
"-> 極座標 θ 分量 = -sin(theta)/r")
觀察:流場明明均勻, \(\theta\) 分量卻是 \(-\sin\theta / r\) ——在越接近原點處分量越大。這就是「向量本體不變、分量隨座標系(含基底長度)而變」。
實驗 2:破壞不變量才知道什麼是不變量
把例 3 的變換故意做錯:只用一個雅可比因子( \(\tilde g = J g\) 而非 \(J^\mathsf{T} g J\) ),檢查線元素是否改變。你會發現結果不再對稱、也不再把 \(ds^2\) 保持一致——錯誤的變換法則沒有幾何意義。
實驗 3:量一組座標變換下的 \(g\) 的行列式
對極座標變換計算 \(\det \tilde g\) ,應得 \(r^2\) 。回憶多重積分的 Jacobian 體積因子 \(\sqrt{\det g} = r\,dr\,d\theta\) ——面積元的縮放正是由度量的行列式給出。試再做球面參數 \(\sqrt{\det g} = \sin\theta\) 。
實驗 4(挑戰):雙曲座標
令 \(x = a\cosh u \cos v,\ y = a\sinh u \sin v\) ,用 J.T * g * J 算出新度量,確認它是對角的,並說明 \(x^2/a^2 - y^2/a^2 = \cosh^2 u - \sinh^2 u = 1\) 與曲線族的對應關係。
小結與練習#
本節重點
- 張量的定義核心:分量依固定法則隨座標系變換,幾何本體不變。
- 度量 \(g_{ij} = \mathbf{r}_i\cdot\mathbf{r}_j\) 是 \((0,2)\) 型協變張量,變換法則 \(\tilde g = J^\mathsf{T} g\, J\) 。
- 上標(反變)與下標(協變)的差別在於它們「相消」的方向不同。
- 極座標例子顯示基底向量長度可以隨位置變化,這是分量座標相依的直接來源。
- 一切不變量(線元素 \(ds^2\) 、弧長、面積)都可由 \(g\) 重構——度量攜帶了全部幾何資訊。
練習
- 用 SymPy 推導並驗證:平面上拋物座標 \(x = uv,\ y = \tfrac12(v^2 - u^2)\) 的度量,並求 \(\sqrt{\det g}\) 。
- 證明(以 SymPy 符號驗證兩次隨機變換串接的分量): \(g\) 經 \(\tilde x \to \bar x\) 再變換的結果,等於直接從 \(x\) 變換到 \(\bar x\) 。這是張量定義中「一致性」的要求。
- 在極座標下計算圓 \(r = R\) ( \(\theta \in [0, 2\pi]\) )的弧長,確認得到 \(2\pi R\) ,並解釋 \(g_{\theta\theta} = R^2\) 在其中扮演的角色。
- 把例 3 換成緯度參數 \(\tilde\theta = \theta/2\) ,用
J.T*g*J求新度量,並檢查線元素不變。 - (挑戰)若把度量想成「量長度的機器」,說明為什麼 \(g_{ij}\) 需要兩個下標、而 \(g^ {ij}\) (其反矩陣)需要兩個上標,並用 SymPy 驗證 \(g\) 與 \(g^{-1}\) 在座標變換下分別以什麼法則變換。