ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Kronecker delta与Levi-Civita符号:张量运算的核心工具解析

2026/9/21 1:09:09 拓冰建站 浏览量
Kronecker delta与Levi-Civita符号:张量运算的核心工具解析 1. 为什么这两个符号值得单独拎出来聊但凡在物理系或者机械、土木、电磁场方向的课题组待过一阵子你大概率会在某次组会或者推导里撞见两个长得像外星文字的符号一个是 (\delta_{ij})一个是 (\varepsilon_{ijk})。第一次见它们的人脑子里通常只有一句话——这玩意儿到底在干嘛明明可以用文字说清楚的事情为什么非要搞两个符号出来我当年学电动力学的时候也有同样的困惑。教材上写“(\delta_{ij}) 当 (ij) 时为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})你每次写正交基的点积都得附一句“当 (ij) 时等于1否则等于0”推导稍微长一点这种文字说明就会把公式切割得支离破碎。有了 (\delta_{ij})它就是一个普通的代数对象可以参与乘法、求和、换元推导过程一气呵成。更关键的是它的筛选性质。考虑求和 (\sum_j a_j \delta_{ij})展开来看当 (j \neq i) 时 (\delta_{ij}0)这些项全部消失当 (ji) 时 (\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_{i1}^{3} a_i b_i)就是点积。(A_{ij} x_j) 实际是 (\sum_{j1}^{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 里可以用 NumPyimport 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) 的公式用具体数值代进去验算一个特例。比如取 (i1, j2, k3)看看等式两边是否相等。这个习惯帮我抓出了无数次指标错误尤其是在长推导的中间步骤。