摘要:在「度量兼容」与「无挠」两条自然约束下,黎曼流形上的联络被度量唯一确定,即列维-奇维塔联络;其坐标系数就是克氏符号,可由度量分量及其一阶偏导直接算出。本节推导克氏符号公式,对球面度量完成全部非零分量的手算,并用 SymPy 复核,最后澄清「联络非零不等于空间弯曲」的判据问题。
文献里常见一个吓人的名词——克氏符号(Christoffel symbols)\Gamma^k_{ij}。拆开看它一点不神秘:上一节已经定义过,它就是「基向量 \partial_j 沿 \partial_i 方向搬运时,在 \partial_k 分量上的修正系数」。三 个指标各司其职:下标 i 是搬运方向,下标 j 是被搬的基,上标 k 是记账分量。它不是张量——换卡时多出一项二阶导修正——所以叫「符号」而不叫「张量」,这个细节第三节会给出变换式的完整交代。
克氏符号的取值取决于联络的选法。上一节留了一个悬案:满足三条公理的联络有无穷多,选哪个?本节的全部内容就是回答:加上两条物理上无可辩驳的约束后,选择余地为零。
约束一:度量兼容。 平行移动不得改变向量的长度与内积——否则「保持方向不变」的搬运会让尺子自己变长,测量学直接破产。写成方程:\nabla g = 0,即度量的协变导数为零。等价的操作表述是:对任意平行移动的向量场 V, W 沿同一路径,g(V, W) 恒定。
约束二:无挠。 联络不该自带「拧劲儿」。挠率张量 T(X, Y) = \nabla_X Y - \nabla_Y X - [X, Y](其中 [X,Y] 是李括号)度量这种拧劲:先沿 X 后沿 Y 走一个无穷小回路,与反序走的终点偏差即由挠率给出。要求 T = 0,等于要求这两种走法在二阶意义上不可区分——平直直觉的自然延伸。
命题(列维-奇维塔唯一性):满足度量兼容与无挠的联络存在且唯一。推导骨架值得亲手走一遍。把度量兼容写成三点形式(对指标 i, j, k 轮换三次):
两式相加减第三式,无挠条件 \Gamma^l_{ij} = \Gamma^l_{ji} 使交叉项成对出现,整理得
其中 g^{kl} 是度量矩阵的逆矩阵元素。公式的记忆口诀:「半逆矩阵,轮流求导,负对角项」。几何上它说的是:基向量的变化率中,「由度量变化引起」的部分被完整补偿——度量兼容的方程组恰好把 \Gamma 解出来,无挠保证了解唯一。

以第一章成果 ds^2 = d\theta^2 + \sin^2\theta\, d\varphi^2 为输入,执行五步作业。
度量矩阵与逆:g = \mathrm{diag}(1, \sin^2\theta),g^{-1} = \mathrm{diag}(1, \tfrac{1}{\sin^2\theta})。
一阶偏导:g_{\theta\theta} = 1 与 g_{\varphi\varphi} = \sin^2\theta 中,前者是常数导数为零,后者只依赖 \theta:
组合求和。分量 \Gamma^\theta_{\varphi\varphi}(i = j = \varphi,k = \theta):
分量 \Gamma^\varphi_{\theta\varphi} = \Gamma^\varphi_{\varphi\theta}(无挠保证下标对称):
其余分量全为零:\Gamma^\theta_{\theta\theta} = \Gamma^\theta_{\theta\varphi} = \Gamma^\varphi_{\theta\theta} = \Gamma^\varphi_{\varphi\varphi} = 0(常数块与零交叉项不贡献)。最终台账只有两类非零项:
物理读法:\Gamma^\theta_{\varphi\varphi} = -\sin\theta\cos\theta 是「沿纬线走时基向量 \partial_\varphi 往极点方向倒」的补偿(纬线圈越走越弯向极点);\Gamma^\varphi_{\theta\varphi} = \cot\theta 是「换纬度时单位经度对应的实际弧长在变」的补偿。两个符号都在描述经纬网的变形,而不是空间在「弯」——判别弯曲要等第三章的曲率。
from sympy import symbols, sin, cos, Matrix, simplify, eye th, ph = symbols('theta varphi', positive=True) g = Matrix([[1, 0], [0, sin(th)**2]]) # 球面度量矩阵 ginv = g.inv() coords = [th, ph] Gamma = {} for k in range(2): for i in range(2): for j in range(2): expr = 0 for l in range(2): expr += ginv[k, l] * ( g[l, i].diff(coords[j]) + g[l, j].diff(coords[i]) - g[i, j].diff(coords[l]) ) / 2 e = simplify(expr) if e != 0: Gamma[(k, i, j)] = e print(Gamma) # 输出: {(0,1,1): -sin(theta)*cos(theta), (1,0,1): cos(theta)/sin(theta), (1,1,0): cos(theta)/sin(theta)}
输出与手算逐项一致,且机器自动列出了全部非零项——手算漏项在这种复核下无处遁形。
⚠️ 常见坑有三处。坑一:忘乘 \tfrac{1}{2} 或忘乘逆矩阵 g^{kl},符号差一个因子,症状是平行移动实验的偏转角对不上角盈。坑二:把克氏符号当张量做指标升降——它不服从张量变换律,升降运算只对真张量合法(第三节给出完整规则)。坑三:用克氏符号非零判断空间弯曲。平面极坐标同样有非零符号,弯曲的严格判据是曲率张量(第三章),其值才与坐标选择无关。