Kronecker delta与Levi-Civita符号:张量运算的核心工具解析
2026/9/21 1:08:38 网站建设 项目流程

1. 为什么这两个符号值得单独拎出来聊

但凡在物理系或者机械、土木、电磁场方向的课题组待过一阵子,你大概率会在某次组会或者推导里撞见两个长得像外星文字的符号:一个是 (\delta_{ij}),一个是 (\varepsilon_{ijk})。第一次见它们的人,脑子里通常只有一句话——这玩意儿到底在干嘛?明明可以用文字说清楚的事情,为什么非要搞两个符号出来?

我当年学电动力学的时候也有同样的困惑。教材上写“(\delta_{ij}) 当 (i=j) 时为1,否则为0”,我心想这不就是单位矩阵吗,有什么好单独定义一个符号的。直到后来自己动手推刚体转动惯量张量、推麦克斯韦应力张量、推各向异性介质的本构关系,才发现这两个符号根本不是“为了显得高级”才被发明出来的,它们是把大量重复到令人崩溃的求和项压缩成一行公式的工程化工具

这篇文章想做的事情很直接:把 Kronecker delta 和 Levi-Civita 符号这两个物理与工程里的“黑话”拆开讲透。它们各自简化了什么、为什么能简化、在哪些场景下用它们最划算、用的时候容易踩什么坑。适合正在学理论力学、电动力学、连续介质力学、张量分析,或者工作中需要处理各向异性材料、电磁场、流体涡量的读者。不管你是刚接触张量记号的大二学生,还是已经工作几年但一直对这两个符号“会用但说不清”的工程师,下面这些内容应该都能帮你把这块知识补扎实。

2. 两个符号的本质:它们到底在替代什么

2.1 Kronecker delta:把“条件判断”塞进公式里

先说 (\delta_{ij})。它的定义简单到不能再简单:

[ \delta_{ij} = \begin{cases} 1, & i = j \ 0, & i \neq j \end{cases} ]

很多人第一反应是“这不就是单位矩阵 (I) 的元素吗”。没错,但它的价值远不止表示单位矩阵。它真正的作用是把“如果下标相同就取1,否则取0”这个条件判断,变成一个可以参与代数运算的符号

举个最直观的例子。两个正交基向量 (\mathbf{e}_i) 和 (\mathbf{e}_j) 的点积,用文字说是“同方向为1,不同方向为0”,写成公式就是:

[ \mathbf{e}_i \cdot \mathbf{e}j = \delta{ij} ]

如果没有 (\delta_{ij}),你每次写正交基的点积都得附一句“当 (i=j) 时等于1,否则等于0”,推导稍微长一点,这种文字说明就会把公式切割得支离破碎。有了 (\delta_{ij}),它就是一个普通的代数对象,可以参与乘法、求和、换元,推导过程一气呵成。

更关键的是它的筛选性质。考虑求和 (\sum_j a_j \delta_{ij}),展开来看:当 (j \neq i) 时 (\delta_{ij}=0),这些项全部消失;当 (j=i) 时 (\delta_{ij}=1),只剩 (a_i)。所以:

[ \sum_j a_j \delta_{ij} = a_i ]

这个性质叫“指标替换”或“筛选”。它的工程意义在于:一个求和式里只要出现 (\delta_{ij}),就可以直接把被求和的下标 (j) 替换成 (i),求和号自动消失。在推导应力应变关系、转动惯量张量、各向同性材料的弹性张量时,这个操作能省掉大量展开和合并同类项的机械劳动。

我个人的体会是,(\delta_{ij}) 本质上是一个离散版的狄拉克δ函数。狄拉克δ函数在连续域上做筛选,(\delta_{ij}) 在离散指标上做筛选。理解了这一层,你就不会觉得它只是一个“单位矩阵的记号”了。

2.2 Levi-Civita 符号:把“叉乘和行列式”编码成指标运算

再说 (\varepsilon_{ijk}),也叫排列符号或反对称符号。它的定义稍微绕一点:

[ \varepsilon_{ijk} = \begin{cases} +1, & (i,j,k) \text{ 是 } (1,2,3) \text{ 的偶排列} \ -1, & (i,j,k) \text{ 是 } (1,2,3) \text{ 的奇排列} \ 0, & \text{有任意两个指标相同} \end{cases} ]

翻译成人话:((1,2,3))、((2,3,1))、((3,1,2)) 这三种循环排列取 (+1);((1,3,2))、((3,2,1))、((2,1,3)) 这三种逆循环排列取 (-1);只要有两个下标一样,比如 ((1,1,2)),就取 (0)。

它最经典的用途是表示叉乘。两个向量 (\mathbf{a}) 和 (\mathbf{b}) 的叉乘 (\mathbf{c} = \mathbf{a} \times \mathbf{b}),分量形式是:

[ c_i = \sum_{j,k} \varepsilon_{ijk} a_j b_k ]

用爱因斯坦求和约定(同一项中重复出现的指标自动求和)可以简写成:

[ c_i = \varepsilon_{ijk} a_j b_k ]

对比一下用行列式写叉乘的方式:

[ \mathbf{a} \times \mathbf{b} = \begin{vmatrix} \mathbf{e}_1 & \mathbf{e}_2 & \mathbf{e}_3 \ a_1 & a_2 & a_3 \ b_1 & b_2 & b_3 \end{vmatrix} ]

行列式写法直观,但一旦叉乘嵌套在更复杂的张量运算里,行列式就没法继续参与指标运算了。而 (\varepsilon_{ijk}) 写法可以继续和 (\delta_{ij}) 配合,做指标收缩、换元、化简。这就是它真正的威力所在——它把叉乘这个几何操作,翻译成了纯代数的指标运算

同样地,三阶行列式也可以用它表示:

[ \det(A) = \varepsilon_{ijk} A_{1i} A_{2j} A_{3k} ]

这个形式在证明行列式性质、推导坐标变换的雅可比行列式时非常顺手。

2.3 两者配合:(\varepsilon)-(\delta) 恒等式才是重头戏

单独看这两个符号,威力还只是一半。它们真正的杀手锏是下面这个恒等式:

[ \varepsilon_{ijk} \varepsilon_{ilm} = \delta_{jl} \delta_{km} - \delta_{jm} \delta_{kl} ]

这个式子叫 (\varepsilon)-(\delta) 恒等式,是张量代数里使用频率最高的公式之一。它的作用是:把两个排列符号的乘积,转化成 Kronecker delta 的组合,从而让原本无法继续化简的表达式变成可以收缩的代数式。

举个物理里最常见的例子:证明 (\mathbf{a} \times (\mathbf{b} \times \mathbf{c}) = \mathbf{b}(\mathbf{a} \cdot \mathbf{c}) - \mathbf{c}(\mathbf{a} \cdot \mathbf{b}))。用 (\varepsilon)-(\delta) 恒等式,三行就能证完;不用它,你得设分量、展开、合并,写满大半页纸还容易出错。

我在带本科生做理论力学作业时发现,凡是能熟练使用这个恒等式的学生,推刚体动力学和电磁场辐射的公式时速度明显快一截,而且出错率低。原因很简单:指标运算是有规则可循的机械操作,而分量展开依赖人的注意力和耐心,后者在长推导中必然出错

3. 核心细节解析:用之前必须搞清楚的规则

3.1 爱因斯坦求和约定:不搞懂这个,符号白学

(\delta_{ij}) 和 (\varepsilon_{ijk}) 的简洁写法,全部建立在爱因斯坦求和约定之上。规则本身不复杂:在一个单项式里,某个指标重复出现两次,就自动对该指标从1到3求和

比如 (a_i b_i) 实际是 (\sum_{i=1}^{3} a_i b_i),就是点积。(A_{ij} x_j) 实际是 (\sum_{j=1}^{3} A_{ij} x_j),就是矩阵乘向量。

但有几个细节新手特别容易搞错:

  • 重复出现两次才求和,出现一次不求和,出现三次以上是错误写法。比如 (a_i b_i c_i) 就是无意义的,因为 (i) 出现了三次。
  • 求和指标可以任意换名,但不能和其他自由指标冲突。(\varepsilon_{ijk} a_j b_k) 里的 (j)、(k) 是求和指标,换成 (m)、(n) 完全等价,但换成 (i) 就错了,因为 (i) 已经是自由指标。
  • 自由指标在等式两边必须一致。左边是 (c_i),右边也必须只剩自由指标 (i),不能多也不能少。

注意:很多教材默认读者已经掌握求和约定,直接上公式。如果你在看推导时觉得“这个求和号怎么突然没了”,大概率就是求和约定在起作用。建议先把这一节彻底搞明白,再往下看。

3.2 指标替换的三种典型场景

(\delta_{ij}) 的筛选性质在实际推导中有三种高频用法,我分别说一下。

第一种:直接替换求和指标。比如 (\delta_{ij} T_{jk}),因为 (\delta_{ij}) 对 (j) 求和,结果是 (T_{ik})。操作口诀是“delta 把重复指标替换成另一个指标,求和号消失”。

第二种:收缩矩阵的迹。(\delta_{ij} A_{ij} = A_{ii}),就是矩阵的迹。在各向同性弹性力学里,应力张量的第一不变量 (\sigma_{ii}) 就是体积应力,用 (\delta_{ij}) 写出来非常干净。

第三种:构造各向同性张量。各向同性材料的四阶弹性张量可以写成:

[ C_{ijkl} = \lambda \delta_{ij} \delta_{kl} + \mu (\delta_{ik} \delta_{jl} + \delta_{il} \delta_{jk}) ]

这个形式比写成 (6 \times 6) 矩阵要紧凑得多,而且一眼就能看出各向同性的对称结构。我在做复合材料建模时,经常需要从各向异性张量退化到各向同性张量做验证,用 (\delta_{ij}) 写出来的形式对照起来特别方便。

3.3 Levi-Civita 符号的奇偶性判断技巧

(\varepsilon_{ijk}) 的取值依赖排列的奇偶性,新手最容易在这里卡壳。我分享一个自己常用的判断方法:把下标写成一排,看需要交换多少次才能变成 ((1,2,3))。交换偶数次取 (+1),奇数次取 (-1)

比如 ((2,3,1)):交换第1和第3个位置得 ((1,3,2)),再交换第2和第3个位置得 ((1,2,3)),共2次,偶数,取 (+1)。再比如 ((3,1,2)):交换第1和第3个位置得 ((2,1,3)),再交换第1和第2个位置得 ((1,2,3)),共2次,取 (+1)。而 ((1,3,2)) 只需交换一次,取 (-1)。

还有一个更快的口诀:顺时针循环取正,逆时针循环取负。把1、2、3按顺时针排成三角形,顺时针读就是正排列,逆时针读就是负排列。这个方法在考试和快速推导时特别管用。

提示:(\varepsilon_{ijk}) 对任意两个指标交换都变号,这是它“反对称”的核心含义。很多恒等式的证明都依赖这个性质,比如 (\varepsilon_{ijk} = -\varepsilon_{jik} = -\varepsilon_{ikj})。

3.4 两个符号的维度差异与使用边界

这里要提醒一个容易被忽略的点:(\delta_{ij}) 的指标数可以是任意维度的,二维、三维、四维都能定义。但 (\varepsilon_{ijk}) 在三维空间里是三个指标,到了四维时空(比如相对论电动力学)就变成四指标的 (\varepsilon_{\mu\nu\rho\sigma}),取值规则也相应扩展。

在工程里,绝大多数场景是三维的,所以 (\varepsilon_{ijk}) 足够用。但如果你做板壳理论,有时候会把问题降到二维,这时候二维的排列符号只有 (\varepsilon_{ij}),取值规则是 (\varepsilon_{12}=1)、(\varepsilon_{21}=-1)、其余为0。二维情况下没有 (\varepsilon)-(\delta) 恒等式那种漂亮形式,需要单独处理。

我在做薄板弯曲问题时踩过一次坑:直接把三维的 (\varepsilon)-(\delta) 恒等式套到二维化简里,结果多出来一堆本该为零的项。后来才反应过来,二维排列符号的代数结构和三维不一样。这个教训是:用符号之前,先确认你的空间维度

4. 实操过程:从零推导几个经典结果

4.1 用 (\varepsilon)-(\delta) 恒等式证明向量三重叉乘

这是最经典的练习,也是检验你是否真正掌握这两个符号的试金石。目标是证明:

[ \mathbf{a} \times (\mathbf{b} \times \mathbf{c}) = \mathbf{b}(\mathbf{a} \cdot \mathbf{c}) - \mathbf{c}(\mathbf{a} \cdot \mathbf{b}) ]

第一步,把左边写成指标形式。设 (\mathbf{d} = \mathbf{b} \times \mathbf{c}),则 (d_k = \varepsilon_{klm} b_l c_m)。再设 (\mathbf{e} = \mathbf{a} \times \mathbf{d}),则:

[ e_i = \varepsilon_{ijk} a_j d_k = \varepsilon_{ijk} a_j \varepsilon_{klm} b_l c_m ]

第二步,把两个 (\varepsilon) 的乘积整理。注意 (\varepsilon_{ijk} \varepsilon_{klm}) 中 (k) 是重复指标,但两个 (\varepsilon) 的 (k) 位置不同。利用 (\varepsilon_{ijk} = \varepsilon_{kij})(循环置换不变号),把第一个 (\varepsilon) 写成 (\varepsilon_{kij}),于是:

[ \varepsilon_{kij} \varepsilon_{klm} = \delta_{il} \delta_{jm} - \delta_{im} \delta_{jl} ]

第三步,代回并收缩:

[ e_i = (\delta_{il} \delta_{jm} - \delta_{im} \delta_{jl}) a_j b_l c_m = a_j b_i c_j - a_j b_j c_i ]

第四步,换回向量形式。(a_j c_j = \mathbf{a} \cdot \mathbf{c}),(a_j b_j = \mathbf{a} \cdot \mathbf{b}),所以:

[ e_i = b_i (\mathbf{a} \cdot \mathbf{c}) - c_i (\mathbf{a} \cdot \mathbf{b}) ]

即 (\mathbf{a} \times (\mathbf{b} \times \mathbf{c}) = \mathbf{b}(\mathbf{a} \cdot \mathbf{c}) - \mathbf{c}(\mathbf{a} \cdot \mathbf{b})),证毕。

整个过程没有任何分量展开,全是机械的指标操作。我第一次独立推完这个证明时,才真正理解为什么物理教材偏爱这套记号——它把几何直觉转化成了可以“无脑执行”的代数流程

4.2 推导刚体转动惯量张量

刚体动力学里,角动量 (\mathbf{L}) 和角速度 (\boldsymbol{\omega}) 的关系是 (L_i = I_{ij} \omega_j),其中 (I_{ij}) 是转动惯量张量。对于离散质点系:

[ I_{ij} = \sum_\alpha m_\alpha (r_\alpha^2 \delta_{ij} - x_{\alpha i} x_{\alpha j}) ]

这个式子怎么来的?从角动量定义出发:(\mathbf{L} = \sum_\alpha m_\alpha \mathbf{r}\alpha \times (\boldsymbol{\omega} \times \mathbf{r}\alpha))。用 (\varepsilon)-(\delta) 恒等式展开:

[ L_i = \sum_\alpha m_\alpha \varepsilon_{ijk} x_{\alpha j} \varepsilon_{klm} \omega_l x_{\alpha m} ]

整理后得到:

[ L_i = \sum_\alpha m_\alpha (x_{\alpha}^2 \delta_{il} - x_{\alpha i} x_{\alpha l}) \omega_l ]

对比 (L_i = I_{ij} \omega_j),立刻读出 (I_{ij}) 的表达式。这个推导如果不用 (\varepsilon)-(\delta) 恒等式,需要分别计算 (L_1)、(L_2)、(L_3) 三个分量,每个分量展开九项,总共二十七项再合并。用符号运算,五行搞定。

我在做卫星姿态动力学仿真时,转动惯量张量的推导是基础中的基础。每次给学生讲这块,我都会强调:不要背公式,要会推。推导过程本身就是对 (\varepsilon)-(\delta) 恒等式最好的练习

4.3 各向同性张量的构造与验证

在连续介质力学里,各向同性材料的四阶弹性张量必须具有形式:

[ C_{ijkl} = \lambda \delta_{ij} \delta_{kl} + \mu (\delta_{ik} \delta_{jl} + \delta_{il} \delta_{jk}) ]

怎么验证它确实是各向同性的?一个必要条件是它对指标交换具有对称性:(C_{ijkl} = C_{jikl} = C_{ijlk} = C_{klij})。用 (\delta) 的性质逐条验证:

  • (C_{jikl} = \lambda \delta_{ji} \delta_{kl} + \mu (\delta_{jk} \delta_{il} + \delta_{jl} \delta_{ik})),因为 (\delta_{ij}=\delta_{ji}),所以等于 (C_{ijkl})。
  • (C_{ijlk} = \lambda \delta_{ij} \delta_{lk} + \mu (\delta_{il} \delta_{jk} + \delta_{ik} \delta_{jl})),同样等于 (C_{ijkl})。
  • (C_{klij}) 的验证稍微多一步,但利用 (\delta) 的对称性也能直接看出。

这种验证如果写成 (6 \times 6) 矩阵形式,需要逐项对照,非常繁琐。用 (\delta) 写出来,对称性一目了然。我在做复合材料均匀化时,经常需要验证数值计算得到的等效弹性张量是否满足各向同性对称性,用 (\delta) 形式写个脚本自动检查,比人工对照矩阵快得多。

4.4 电磁场中的应力张量推导

麦克斯韦应力张量的分量形式是:

[ T_{ij} = \epsilon_0 \left( E_i E_j - \frac{1}{2} \delta_{ij} E^2 \right) + \frac{1}{\mu_0} \left( B_i B_j - \frac{1}{2} \delta_{ij} B^2 \right) ]

这个式子里 (\delta_{ij}) 的作用是构造“各向同性部分”。电场和磁场对角的贡献是 (E_i E_j),但为了满足迹的物理意义(能量密度),需要减去一个 (\frac{1}{2}\delta_{ij} E^2)。如果没有 (\delta_{ij}),这个“只在 diagonal 项减去”的操作就没法用统一的公式表达。

我当年学电动力学时,对这个式子的记忆一直很模糊,直到自己用 (\delta_{ij}) 重新推了一遍动量守恒的积分形式,才彻底记住。(\delta_{ij}) 在这里的角色是“各向同性投影算子”,它把张量的各向同性部分和偏斜部分分离开。这个思想在流体力学里分解应力张量时同样适用。

5. 常见问题与排查技巧实录

5.1 指标重复次数搞错导致公式失效

这是最高频的错误。求和约定要求重复指标恰好出现两次,但手写推导时很容易多写一个或少写一个。比如把 (\varepsilon_{ijk} a_j b_k) 误写成 (\varepsilon_{ijk} a_i b_k),这时候 (i) 出现了两次,但一个是自由指标一个是求和指标,语义就乱了。

排查方法:写完一个公式后,逐个检查每个指标的出現次数。自由指标在等式两边各出现一次,求和指标在单项式内出现两次。养成这个习惯后,错误率会大幅下降。

5.2 (\varepsilon)-(\delta) 恒等式用错指标位置

(\varepsilon)-(\delta) 恒等式有好几种等价形式,取决于两个 (\varepsilon) 的指标排列方式。最常见的是:

[ \varepsilon_{ijk} \varepsilon_{ilm} = \delta_{jl} \delta_{km} - \delta_{jm} \delta_{kl} ]

但如果写成 (\varepsilon_{ijk} \varepsilon_{lmi}),就需要先把第二个 (\varepsilon) 循环置换,把公共指标 (i) 移到相同位置,再用恒等式。我见过不少学生直接套公式,结果符号搞反。

排查方法:用之前先把两个 (\varepsilon) 的公共指标对齐到同一位置。公共指标对齐后,剩下的四个指标按“前前配对、后后配对”和“前后交叉配对”写出两个 (\delta) 乘积,符号是“正减负”。

5.3 二维和三维混用

前面提过,二维排列符号只有两个指标,代数结构不同。如果你在做板壳、薄膜或者二维材料的问题,直接把三维公式套过来,会多出很多本应为零的项。

排查方法:先确认问题的空间维度。如果是二维问题,要么把三维公式中所有与第三方向相关的项手动置零,要么直接使用二维排列符号重新推导。后者更干净,但需要重新熟悉二维的恒等式。

5.4 数值计算中的符号处理

在写代码做数值计算时,(\delta_{ij}) 和 (\varepsilon_{ijk}) 通常直接用单位矩阵和排列数组实现。Python 里可以用 NumPy:

import numpy as np # Kronecker delta 三维 delta = np.eye(3) # Levi-Civita 符号三维 def levi_civita_3d(): eps = np.zeros((3, 3, 3)) eps[0, 1, 2] = eps[1, 2, 0] = eps[2, 0, 1] = 1 eps[0, 2, 1] = eps[2, 1, 0] = eps[1, 0, 2] = -1 return eps eps = levi_civita_3d()

用的时候注意:NumPy 的索引从0开始,而物理公式里的指标从1开始,转换时容易差一位。我一般会在代码里统一用0-based索引,然后在注释里标明对应的物理指标。

注意:数值计算里不要用循环去判断排列奇偶性,直接预定义数组查表最快。三维只有27个元素,查表比任何算法都快。

5.5 常见问题速查表

问题现象可能原因排查方法
公式化简后多出不该有的项指标重复次数错误逐个检查每个指标的出現次数
(\varepsilon)-(\delta) 恒等式结果符号反了公共指标未对齐先把两个 (\varepsilon) 的公共指标移到相同位置
二维问题出现第三方向分量混用了三维公式确认维度,手动置零或重新推导
数值结果与理论不符索引基准不一致统一用0-based或1-based,注释标明
求和号该消失却没消失未识别 (\delta) 的筛选性质看到 (\delta_{ij}) 就尝试替换重复指标

6. 我个人的使用心得与建议

6.1 不要死记硬背,要动手推

这两个符号的定义和恒等式,看一遍是记不住的。我的建议是:找一张白纸,把 (\varepsilon)-(\delta) 恒等式的证明、三重叉乘的证明、转动惯量张量的推导,各手推三遍。推到第三遍的时候,你会发现手指比脑子先动,公式自然就流出来了。这种肌肉记忆在考试和实际推导中比任何背诵都可靠。

6.2 从简单例子建立直觉

如果你刚开始学,不要一上来就啃连续介质力学里那些四阶张量。先从向量代数开始:点积、叉乘、三重积,用 (\delta) 和 (\varepsilon) 重新写一遍。然后过渡到矩阵的迹、行列式。再然后才是应力张量、弹性张量。每一步都确保自己能独立推导,再往下走。

6.3 工程软件里的符号运算

如果你用 MATLAB 的 Symbolic Math Toolbox 或者 Python 的 SymPy,可以直接定义符号指标做张量运算。但要注意,这些工具的化简规则和人工推导不完全一样,有时候需要手动指定用哪个恒等式。我一般用 SymPy 做验证,人工推导做理解,两者结合效率最高。

6.4 教学中的一点体会

我带过几届学生的理论力学和电动力学,发现一个规律:凡是能熟练使用 (\delta) 和 (\varepsilon) 的学生,后续学量子力学、固体物理、流体力学时明显更轻松。因为这套记号是张量分析的通用语言,早掌握早受益。反过来,如果一直回避这两个符号,靠分量展开硬推,到了高阶课程会非常吃力。

最后分享一个小技巧:每次写完一个用 (\delta) 或 (\varepsilon) 的公式,用具体数值代进去验算一个特例。比如取 (i=1, j=2, k=3),看看等式两边是否相等。这个习惯帮我抓出了无数次指标错误,尤其是在长推导的中间步骤。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询