
我第一次真正被“逆变”和“协变”这两个词击穿是在读广义相对论教材的时候。当时我已经自认为很懂线性代数和微积分了但看到一个矢量在坐标变换下还要区分上标下标、分成两种变换规则整个人都是懵的。后来花了不少时间才想明白这件事的起点其实特别朴素坐标系一旦改变同一个物理量的分量会以两种不同的规则变化一种叫逆变一种叫协变。这篇笔记就是想把这条逻辑链完整走一遍从直观例子出发给出严格定义再用一个可以手算的极坐标算例把两者彻底算明白最后聊聊它到底用在哪。适合谁看呢正在学张量分析、微分几何、广义相对论或连续介质力学的学生以及那些学完公式却总觉得缺一块直觉的工程师。你不用先掌握什么高深知识只要会用链式法则、知道坐标变换是什么就足够跟着算下去了。1. 先从最直观的例子说起速度与梯度1.1 速度分量坐标一拉数值跟着涨假设你在二维平面上用两套坐标描述同一个运动。一套是标准直角坐标 ((x, y))另一套是把 (x) 方向“拉伸”之后的坐标 (\xi 2x,\ \eta y)。同一个点原来 (x1) 的位置在新的坐标里 (\xi2)。现在看一个速度向量。在直角坐标里物体以 (\mathbf{v}(1,0)) 沿 (x) 方向运动意思是单位时间走 1 个单位的 (x) 坐标。换到新坐标单位时间走多少个 (\xi)因为 (\xi2x)所以单位时间走 2 个单位的 (\xi)也就是 (\mathbf{v}(2,0))。注意这里发生了什么坐标刻度变密了同一个物理长度对应的坐标数值从 1 变成 2速度分量的数值也跟着从 1 变成 2。再换一个方向做同样的实验结果也是一样向量的分量变化方向和坐标数值的变化方向保持一致。坐标拉得越狠速度分量涨得越猛。这种“跟着坐标一起变”的变换规则就叫逆变contravariant。1.2 梯度分量坐标一拉数值反而跌接下来看一个最简单的标量场 (\phi x)它的梯度 (\partial \phi / \partial x 1)。如果我们同样换成 (\xi 2x) 的坐标函数要写成 (\phi \xi / 2)对 (\xi) 求导就变成了 (1/2)。看到了吗坐标一拉伸梯度分量的数值反而缩小。也就是说梯度的分量变化方向和坐标数值的变化方向恰好相反。这种变换规则就叫协变covariant。为什么偏偏是梯度这么“拧巴”从数学上看非常本质梯度是通过对坐标求偏导定义的。(\phi) 是一个标量它本身不随坐标系变化那么 (\phi) 作为新坐标 (\xi) 的函数必然通过复合函数链式法则和 (\xi) 反着来。分母里的坐标一变导数的数值就被“稀释”了。换句话说偏导数天生就是按“逆着坐标变化”的方式变化的。1.3 为什么会有两种“性格”从上面两个例子能提炼出一个粗糙但好用的判断标准一个带方向的量如果它描述的是“沿坐标方向走多远”比如位移、速度、加速度那它倾向于逆变如果它描述的是“对坐标变化有多敏感”比如梯度、力那它倾向于协变。这里有个特别容易让人醍醐灌顶的例子——力。做功的表达式是 (W \mathbf{F} \cdot d\mathbf{x})其中 (d\mathbf{x}) 是位移按逆变规则变化。功是标量不随坐标系变那么为了让 (F_i , dx^i) 这个缩并在任何坐标下都等于同一个数力 (F_i) 的分量就必须按协变规则变化。所以你在分析力学里看到的广义力天然是带下标的这就是协变分量在物理世界里的真实存在感。2. 严格定义与数学符号把直觉写成公式2.1 坐标变换与雅可比矩阵设我们有两套坐标 ({x^i}) 和 ({x^a})它们之间有光滑的变换关系比如 (x r\cos\theta,\ y r\sin\theta) 这种。坐标变换在某一点附近可以近似看成线性的这个线性近似的核心就是雅可比矩阵[ J^{a}_{\ i} \frac{\partial x^a}{\partial x^i} ]坐标微元 (dx^i) 在变换下变成[ dx^a J^{a}_{\ i} , dx^i ]注意坐标微元是一个逆变矢量的典型代表。为什么因为它直接来自坐标值的微分坐标怎么变它就怎么变。2.2 逆变矢量的变换规则一个对象 (V^i)如果在坐标变换下按[ V^a J^{a}_{\ i} V^i ]变化就称为逆变矢量。这个规则和坐标微元的变换规则完全一致所以速度 (v^i dx^i / dt) 就是最典型的逆变矢量。你要把 (V J V) 当作逆变分量的身份证看到这个形式的变换规则就知道它属于逆变阵营。从几何上看(V^i) 是切向量tangent vector的分量。它生活在流形的切空间里描述的是“沿着某条曲线前进”的方向和快慢。注意这里的“逆”字是指它相对于基矢的变化方向是反的我后面还会专门讲这个容易栽跟头的地方。2.3 协变矢量的变换规则另一个对象 (\omega_i)如果在坐标变换下按[ \omega{a} (J^{-1})^{i}{\ a} , \omega_i \frac{\partial x^i}{\partial x^a} , \omega_i ]变化就称为协变矢量。典型例子是梯度设 (\phi) 是标量场那么在 (x) 坐标下求梯度根据链式法则[ \frac{\partial \phi}{\partial x^a} \frac{\partial x^i}{\partial x^a} \frac{\partial \phi}{\partial x^i} ]这里 (J^{-1}) 是雅可比矩阵的逆矩阵。所以逆变和协变的差别本质上是变换时用的是 (J) 还是 (J^{-1})。协变矢量又叫余向量covector、对偶向量它生活在余切空间里是一个把切向量映射成标量的线性函数。2.4 上下指标、求和约定与自然基符号上有个约定俗成的规则上标表示逆变分量写成 (V^i)下标表示协变分量写成 (\omega_i)。如果你看到重复的上下指标出现在乘积里比如 (F_i , dx^i)那么默认要对这个指标从 1 加到 (n)这就是爱因斯坦求和约定。这个约定不是偷懒它保证了“只有上下指标配对才能缩并出一个不变量”。把矢量展开时我们用的是自然基[ \mathbf{V} V^i , \mathbf{e}_i, \qquad \mathbf{e}_i \frac{\partial}{\partial x^i} ]基矢 (\mathbf{e}_i) 在坐标变换下按 (J^{-1}) 变化正好和 (V^i) 的变化抵消所以整体 (\mathbf{V}) 不随坐标系变。余向量则展开为[ \omega \omega_i , dx^i ]对偶基 (dx^i) 按 (J) 变化同样和 (\omega_i) 抵消。你看逆变分量必须配按 (J^{-1}) 变的基协变分量必须配按 (J) 变的基这样才能保证“一个量本身不随坐标系变”。指标的位置不是装饰品它记录了分量应该怎么在坐标变换下“接电话”。3. 手把手的完整算例极坐标里的逆变与协变3.1 准备阶段直角坐标对象、极坐标偏导数这一节是整篇笔记里最“吃得饱”的部分我会把每一步都摊开算。设直角坐标 ((x,y)) 与极坐标 ((r,\theta)) 的变换关系[ x r\cos\theta, \qquad y r\sin\theta ]考察点 (P(1,1))对应着 (r\sqrt{2},\ \theta\pi/4)。我们准备两个对象一个切向量[ \mathbf{V} \partial_x 2,\partial_y ]在 (P) 点的直角坐标分量为 (V^x1,\ V^y2)以及一个余向量[ \omega dx 2,dy ]直角坐标分量 (\omega_x1,\ \omega_y2)。先把需要用到的偏导数统统列出来在 (P) 点的数值是[ \frac{\partial x}{\partial r} \cos\theta \frac{1}{\sqrt2}, \quad \frac{\partial x}{\partial \theta} -r\sin\theta -1 ][ \frac{\partial y}{\partial r} \sin\theta \frac{1}{\sqrt2}, \quad \frac{\partial y}{\partial \theta} r\cos\theta 1 ]以及逆变换的偏导数[ \frac{\partial r}{\partial x} \frac{x}{r} \frac{1}{\sqrt2}, \quad \frac{\partial r}{\partial y} \frac{y}{r} \frac{1}{\sqrt2} ][ \frac{\partial \theta}{\partial x} -\frac{y}{r^2} -\frac12, \quad \frac{\partial \theta}{\partial y} \frac{x}{r^2} \frac12 ]顺便把坐标微元的关系也写出来后面验证要用[ dx \frac{1}{\sqrt2}dr - d\theta, \qquad dy \frac{1}{\sqrt2}dr d\theta ][ dr \frac{1}{\sqrt2}dx \frac{1}{\sqrt2}dy, \qquad d\theta -\frac12 dx \frac12 dy ]3.2 逆变分量的计算与验证速度、位移这类逆变分量变换规则是直接用雅可比矩阵。把 (\mathbf{V}) 的分量变换到极坐标[ V^r \frac{\partial r}{\partial x}V^x \frac{\partial r}{\partial y}V^y \frac{1}{\sqrt2}\times 1 \frac{1}{\sqrt2}\times 2 \frac{3}{\sqrt2} ][ V^\theta \frac{\partial \theta}{\partial x}V^x \frac{\partial \theta}{\partial y}V^y \left(-\frac12\right)\times 1 \frac12\times 2 \frac12 ]也就是说同一个切向量在极坐标下写成分量形式是[ \mathbf{V} \frac{3}{\sqrt2},\partial_r \frac12,\partial_\theta ]这个结果对不对可以展开验证。在 (P) 点自然基 (\partial_r (\cos\theta, \sin\theta) (1/\sqrt2, 1/\sqrt2))而 (\partial_\theta (-r\sin\theta, r\cos\theta) (-1, 1))。注意 (\partial_\theta) 的长度是 (\sqrt{1^21^2}\sqrt2)它并不是单位向量。展开[ \frac{3}{\sqrt2}\partial_r \frac12\partial_\theta \frac{3}{\sqrt2}\left(\frac{1}{\sqrt2},\frac{1}{\sqrt2}\right)\frac12(-1,1) \left(\frac32,\frac32\right) \left(-\frac12,\frac12\right) (1,2) ]与直角坐标分量完全一致。这里最值钱的细节是展开式直接用的 (\partial_\theta)而不是单位向量 (\hat{\theta})。如果你习惯性地把 (\partial_\theta) 换成单位向量反而会在某个地方多出或者少一个 (r) 因子。3.3 协变分量的计算与验证余向量 (\omega dx 2dy) 在极坐标下的协变分量按逆雅可比矩阵变换[ \omega_r \frac{\partial x}{\partial r}\omega_x \frac{\partial y}{\partial r}\omega_y \frac{1}{\sqrt2}\times 1 \frac{1}{\sqrt2}\times 2 \frac{3}{\sqrt2} ][ \omega_\theta \frac{\partial x}{\partial \theta}\omega_x \frac{\partial y}{\partial \theta}\omega_y (-1)\times 1 1\times 2 1 ]验证一步用 (dr) 和 (d\theta) 的直角坐标表达式反推回去[ \omega \frac{3}{\sqrt2}dr d\theta ][ \frac{3}{\sqrt2}\left(\frac{1}{\sqrt2}dx \frac{1}{\sqrt2}dy\right)\left(-\frac12 dx \frac12 dy\right) ][ \left(\frac32 - \frac12\right)dx \left(\frac32 \frac12\right)dy dx 2dy ]完美还原。这说明变换规则没有用反协变分量确实应该这样算。3.4 结果对比为什么不能混着用现在把四个关键数值摆在一起看对象(r) 方向分量(\theta) 方向分量逆变分量 (V^r, V^\theta)(3/\sqrt2 \approx 2.121)(0.5)协变分量 (\omega_r, \omega_\theta)(3/\sqrt2 \approx 2.121)(1)你会发现一个有意思的现象(V^r) 和 (\omega_r) 数值相同但 (V^\theta) 和 (\omega_\theta) 不同。这种“部分相同、部分不同”的情况最具有迷惑性。如果把速度的逆变分量和梯度的协变分量混为一谈在 (P) 点这个特殊的 45 度角度下(r) 方向碰巧相等可一旦换一个点或者只看 (\theta) 方向就立刻对不上了。这个算例告诉你一个硬道理逆变和协变是两种不同的数学对象分量不能随便套用。只有在直角坐标这种度规为单位阵的特殊情况下它们才数值相等。4. 度规张量连接逆变与协变的关键4.1 从弧长元认识度规在二维极坐标中两点之间弧长的平方是[ ds^2 dr^2 r^2 d\theta^2 ]写成通用形式[ ds^2 g_{ij}, dx^i dx^j ]对极坐标而言非零分量就是[ g_{rr} 1, \qquad g_{\theta\theta} r^2 ]这个 (g_{ij}) 就是度规张量。它是一个二阶协变张量因为它要和两个协变矢量 (dx^i, dx^j) 缩并才能得到标量 (ds^2)。从直观上讲度规就是告诉你每个坐标方向的“尺子刻度”是多少。在极坐标里(r) 方向的尺子是正常的但 (\theta) 方向的尺子会随着 (r) 放大离原点越远同样的 (d\theta) 对应的实际弧长越长。4.2 用度规升降指标度规最重要的作用是建立逆变与协变之间的桥梁。给定一个协变矢量 (\omega_i)用 (g^{ij})——也就是 (g_{ij}) 的逆矩阵——可以把指标“升”上去得到一个逆变矢量[ V^i g^{ij}, \omega_j ]在极坐标中(g^{rr}1)(g^{\theta\theta}1/r^2)非对角元为 0。沿用刚才的例子把 (\omega) 的协变分量 (\omega_r 3/\sqrt2,\ \omega_\theta 1) 升指标[ V^r g^{rr}\omega_r g^{r\theta}\omega_\theta 1 \times \frac{3}{\sqrt2} \frac{3}{\sqrt2} ][ V^\theta g^{\theta\theta}\omega_\theta \frac{1}{r^2} \times 1 \frac{1}{2} ]这个结果和前面切向量 (\mathbf{V}) 的极坐标逆变分量一模一样。这不是巧合。(dx2dy) 在欧氏度规下对应的向量本来就应该是 (\partial_x 2\partial_y)。度规就像一座桥把“对偶世界”里的余向量和“原始世界”里的切向量一一对应起来。4.3 单位向量不等于坐标基一个经典的坑很多学工程的同学习惯用单位向量 (\hat{r}, \hat{\theta}) 展开矢量但张量分析里的自然基是 (\partial_r, \partial_\theta)。两者的关系是[ \partial_r \hat{r}, \qquad \partial_\theta r,\hat{\theta} ]也就是说(\partial_r) 已经是一个单位向量但 (\partial_\theta) 的长度是 (r)。如果你坚持用单位向量展开同一个矢量那么 (V^{\hat\theta}) 和 (V^\theta) 之间就差一个因子[ V^{\hat\theta} r, V^\theta ]在 (r) 很小或者很大的地方这两个分量的数值会相差悬殊。做工程问题比如柱坐标下的弹性力学、流体力学时如果本构方程用的是物理分量公式里会多出一堆 (r) 的因子用坐标基时这些几何信息全部被指标自动消化掉了。没有谁比谁更高明关键是你必须知道自己手里拿的是哪一套尺子。5. 这些东西到底用在哪三个经典场景5.1 广义相对论度规就是时空的形状在广义相对论里度规张量 (g_{\mu\nu}) 本身就是描述时空弯曲的动力学变量时空线元写成[ ds^2 g_{\mu\nu}, dx^\mu dx^\nu ]引力不再是“力”而是时空几何的弯曲粒子沿测地线运动。理解逆变与协变是读懂 Christoffel 符号、黎曼曲率张量和爱因斯坦场方程的前提。在广相里指标升降是日常操作比如能量动量张量 (T^{\mu\nu}) 可以升降成 (T^{\mu}{\ \nu}) 或者 (T{\mu\nu})它们的物理含义并不完全相同。如果没建立“指标位置有含义”的直觉读广相会非常痛苦因为你会发现自己连“同一个量”都认不出来。5.2 连续介质力学本构方程里的指标在弹性力学里线弹性本构关系写成[ \sigma_{ij} C_{ijkl}, \varepsilon_{kl} ]在直角坐标系中下标和上标不敏感很多教材会把应力直接写成 (\sigma)反正数值都一样。但到了曲线坐标比如分析球壳、圆柱壳的时候你就必须判断手里的是 (\sigma^{ij})、(\sigma_i^{\ j}) 还是 (\sigma_{ij})。这三者的数值不同和应变张量的缩并方式也不同。很多有限元教材会反复提醒你区分“工程应变”和“数学应变”本质上就是度规张量在捣鬼。5.3 流体力学与曲线坐标公式无论是球坐标下的连续性方程还是 Navier-Stokes 方程公式里那一堆 (r^2)、(\sin\theta) 因子全是从度规来的。比如梯度算符在曲线坐标里给出的是协变分量 (\partial_i \phi)而散度算符对逆变分量的作用却要写成[ \nabla_i v^i \frac{1}{\sqrt{g}} \frac{\partial}{\partial x^i}\left(\sqrt{g}, v^i\right) ]其中 (\sqrt{g}) 是度规行列式的平方根。如果你理解了度规和逆变/协变这些公式就不是背下来的而是能一步步推出来的。我当年学流体力学的时候光记这些公式就花了大量时间后来补了张量分析才明白所有公式都是同一个框架在不同坐标下的展开一下省力不少。5.4 顺带澄清机器学习里的“张量”因为 PyTorch、TensorFlow 的关系现在很多读者是因为《PyTorch 张量基础》或者《张量的形状变换》搜到“张量”这个词的。我这里必须澄清一下PyTorch 里的 Tensor 本质上是多维数组和微分几何里的张量是两个完全不同的概念只是共享了一个名字。不过张量网络比如 MPS、PEPS里的“指标收缩”确实和爱因斯坦求和约定有相似之处都是“配对指标才能求和”。如果你把张量分析里“上下指标配对”的观念迁移过去对你理解 tensor contraction 会有很大帮助。6. 学习与实战中踩过的坑经验总结与自测题6.1 坑一把“逆变”理解成“反向变化”很多人看到“逆变”就以为分量的变化方向和坐标变化方向相反然后拿这当直觉结果做题时老是反着写。我自己的记忆方法是这样的“协变”等于“分量和基矢一起变”“逆变”等于“分量和基矢反着变”。坐标拉伸时基矢其实是缩短的同样一个物理方向在更密的刻度里“看起来”更短所以逆变分量增大协变分量减小。“逆变”的英文是 contravariant词根 contra 就是“相反”指的是和基矢方向相反协变是 co-意思是与基矢共同变化。记住这一条能避开一半以上的低级错误。6.2 坑二直角坐标导致的指标麻痹在平面直角坐标系中度规是单位矩阵逆变分量和协变分量的数值完全一样所以很多教材在讲向量分析时压根不区分“向量”和“对偶向量”。这让我一开始养成了非常坏的习惯——看到一个分量不先问它该放上标还是下标。一旦转入极坐标、球坐标或者光滑流形上这种麻痹立刻就会咬人。我给自己定了一个自检流程每写出一个分量先问自己三个问题——它是什么几何对象它该是逆变还是协变它的变换规则该用 (J) 还是 (J^{-1})如果答不出来就说明我还没真正理解这个量。这个习惯帮我拦下了无数错误。6.3 坑三普通偏导不够用为什么还要协变导数你可能会想既然梯度是协变矢量那么对逆变分量 (V^i) 再求一次偏导 (\partial_j V^i)得到的不也是张量吗但你把变换规则写出来就会发现求导之后会多出二阶导数的交叉项结果不再满足张量变换规则。也就是说普通偏导在曲线坐标下“毁掉”了张量性。微分几何里的协变导数就是为修复这个问题而生的[ \nabla_j V^i \partial_j V^i \Gamma^i_{jk} V^k ]这里 (\Gamma^i_{jk}) 就是 Christoffel 符号它像是在补偿坐标弯曲带来的“额外变化量”。很多人学广相时被 Christoffel 符号劝退根子往往就是没吃透协变到底是什么意思。想清楚“偏导可以很自然但不一定协变”这一点你对张量语言的理解会上一个台阶。6.4 自测题速查表这五道题建议你自己动手算一遍再对答案都是我平时用来检验自己是否理解到位的小题在 3D 直角坐标中取向量 (\mathbf{V}(0,1,0))它的逆变分量和协变分量分别是多少在二维极坐标中给定余向量 (\omega dr r^2 d\theta)用度规把它提升为逆变向量求 (V^r, V^\theta)。判断正误在平面直角坐标系中任意向量的逆变表示和协变表示数值相同所以它们本质上是同一个东西。力为什么是协变矢量试从做功 (W \mathbf{F}\cdot d\mathbf{x}) 的坐标不变性解释。在球坐标中已知拉梅系数 (h_r1,\ h_\thetar,\ h_\varphir\sin\theta)怎么写出弧长元 (ds^2)度规张量的非零分量是什么参考答案都是 ((0,1,0))。(\omega_r1, \omega_\thetar^2)用 (g^{rr}1, g^{\theta\theta}1/r^2) 升降得到 (V^r1, V^\theta1)。错误。数值相等只是在直角坐标这种平直正交坐标里的巧合它们本身是不同的几何对象到极坐标下数值就分道扬镳了。因为 (dx^i) 是逆变矢量而 (W) 是标量不随坐标变所以 (F_i dx^i) 要成为不变量(F_i) 必须按 (F_i (\partial x^j / \partial x^i) F_j) 变换这正是协变规则。(ds^2 dr^2 r^2 d\theta^2 r^2\sin^2\theta, d\varphi^2)因此 (g_{rr}1,\ g_{\theta\theta}r^2,\ g_{\varphi\varphi}r^2\sin^2\theta)非对角元全部为 0。我个人学下来最大的感受是逆变和协变不是张量分析的门槛反而是一把钥匙。只要把“坐标变化时分量怎么变”这个直觉建立起来后面再去看 Christoffel 符号、黎曼曲率、或者流体力学和弹性力学里的曲线坐标公式都会觉得顺理成章。如果你正在学这个别急着背公式先动手把我上面那个极坐标算例自己算一遍把 (V^i) 和 (\omega_i) 抄在纸上对比一下很多困惑会在那一刻消失。最后再分享一个小技巧我算这类问题的习惯是永远先写出坐标变换关系再写出基和对偶基最后才套变换公式。这样做看似多了一步实际能避免一半以上的符号错误。希望这篇笔记能帮你少走一点我当年走过的弯路。