符号约定

本节,我们引入爱因斯坦求和约定(Einstein Notation),它会极大的简化张量运算的复杂程度。核心规则只有两条:

  1. 哑指标(Dummy Index):在同一项内成对出现的上标和下标,被称为哑指标,它表示对该指标的所有取值求和,并省略求和号 Σ\Sigma 。例如

    aibi:=i=1naibia_ib^i:=\sum_{i=1}^na_ib^i

    • 哑标可替换为任意未占用的字母,因为它们最终会被缩并掉,如 aibi=akbka_ib^i=a_kb^k
    • 同一项内同一指标不得大于2次,如 aibicia_ib_ic_i 无定义;
    • 和仅作用于同一项内,如 ai+bia_i+b_iii 是自由指标,不触发求和;
  2. 自由指标(Free Index):同一项中只出现一次、不参与求和的指标,称为自由指标,它可以自由取值。实际上自由指标可以用一个式子代替整个方程组。例如

    ai+bi=cia^i+b^i=c^i

    • 等式左右两侧的自由指标数量、上下位置必须完全一致;
    • 自由指标可以自由取值,每个取值对应一个独立的分量方程;

注意:严格张量分析中哑标需一上一下,笛卡尔坐标系可放宽为全下标

以下是求和约定在矩阵运算中的应用(便以理解):记 viv^i 表示列向量 v\boldsymbol v 的第 ii 个分量,AijA^i{}_j 表示矩阵 AA 的第 ii 行第 jj 列的分量,后面我们就会看到这种上下标的写法会有更多好处。

  1. 矩阵乘列向量:Aijxj=biA^i{}_jx^j=b^i 等价于 Ax=bA\boldsymbol{x}=\boldsymbol{b}
    (哑标 jj 对应行乘列求和,自由指标 ii 对应结果的行)
  2. 矩阵乘行向量:xiAij=bjx_iA^i{}_j=b_j 等价于 xA=b\boldsymbol{x}^{\top}A=\boldsymbol{b}^{\top}
  3. 矩阵乘矩阵:AikBkj=CijA^i{}_kB^k{}_j=C^i{}_j 等价于 AB=CAB=C
  4. 向量点乘:aibia_ib^i 等价于 ab\boldsymbol{a}\cdot\boldsymbol{b}
  5. 向量外积(并矢):aibja^ib_j 等价于 ab\boldsymbol{ab}^{\top}
  6. 矩阵的迹:AiiA^i{}_i 等价于 tr(A)\text{tr}(A)
  7. 分配律:Aij(xj+yj)=Aijxj+AijyjA^i{}_j(x^j+y^j)=A^i{}_jx^j+A^i{}_jy^j 等价于 A(x+y)=Ax+AyA(\boldsymbol x+\boldsymbol y)=A\boldsymbol x+A\boldsymbol y
  8. 交换律:Aijxiyj=AijyjxiA^i{}_jx_iy^j=A^i{}_jy^jx_i 等价于 (xA)y=x(Ay)(\boldsymbol{x}^{\top}A)\boldsymbol{y}=\boldsymbol{x}^{\top}(A\boldsymbol{y})

已知向量等式 ai=bia^i=b^i ,两边同乘 cic_i 得到等式 ciai=cibic_ia^i=c_ib^i 仍然成立。这是由于等式对每个自由指标分量都成立,对其做任意线性组合(求和)后依然相等。等价于 a=b\boldsymbol a=\boldsymbol b 变为 ca=cb\boldsymbol c\cdot\boldsymbol a=\boldsymbol c\cdot\boldsymbol b

已知矩阵方程 Aijxj=biA^i{}_jx^j=b^i 两边同乘 BkiB^k{}_i 得到 BkiAijxj=BkibiB^k{}_iA^i{}_jx^j=B^k{}_ib^i 仍然成立。等价于由 Ax=bA\boldsymbol x=\boldsymbol b 变为 BAx=BbBA\boldsymbol x=B\boldsymbol b

对于矩阵互逆 A1A=IA^{-1}A=I,写成求和形式就是:

(A1)ikAkj=δji(A^{-1})^i{}_kA^k{}_j=\delta^i_j

上式右边的形式经常出现,称为 kroneker 符号

δji={1,if i=j0,if ij\delta^i_j=\begin{cases}1, &\text{if }i=j\\ 0, &\text{if }i\neq j\end{cases}

kroneker δ\delta 有许多有用的性质:

  1. 单位矩阵:δji\delta^i_j 等价于单位矩阵 II
  2. 与向量:δjivj=vi\delta^i_jv^j=v^i 等价于 Iv=vI\boldsymbol v=\boldsymbol v
  3. 与矩阵:δkiAkj=Aij\delta^i_kA^k{}_j=A^i{}_j 等价于 IA=AIA=A
  4. 自缩并:δii=tr(I)\delta^i_i=\text{tr}(I)
  5. 连缩并:δkiδjk=δji\delta^i_k\delta^k_j=\delta^i_j 等价于 II=III=I

张量

张量分析的核心思想可以概括为一句话:张量是坐标变换下的不变量——张量本身不随坐标系改变,但其「分量」会随坐标变换按确定的规则变化。理解这一思想的关键,在于厘清基变换、坐标变换以及「逆变」与「协变」这对概念的深层联系。

张量的定义其实还有有很多,这是最通俗易懂的一个。

基变换

我们已经知道,给定向量空间的一组基,就可以用它们的线性组合表示向量空间中任意向量。那么给定两组基,这两组基之间也可以互相线性表示。

考虑 VV 中的两组基 {e1,e2}\{\boldsymbol e_1,\boldsymbol e_2\}{e1~,e2~}\{\widetilde{\boldsymbol e_1},\widetilde{\boldsymbol e_2}\},为了后面方便描述,我们称前一组为「旧基」,后一组为「新基」。

由于二者都是 VV 的基,新基中的每个向量都可以用旧基线性表示:

{e1~=2e1+e2e2~=0.5e1+0.25e2\begin{cases} \widetilde{\boldsymbol e_1}=2\boldsymbol e_1+\boldsymbol e_2 \\ \widetilde{\boldsymbol e_2}=-0.5\boldsymbol e_1+0.25\boldsymbol e_2 \end{cases}

写成矩阵的乘法

[e1~e2~]=[e1e2][20.510.25]\begin{bmatrix}\widetilde{\boldsymbol e_1}&\widetilde{\boldsymbol e_2}\end{bmatrix}= \begin{bmatrix}\boldsymbol e_1&\boldsymbol e_2\end{bmatrix} \begin{bmatrix}2&-0.5\\1&0.25\end{bmatrix}

右边的矩阵称为旧基到新基的过渡矩阵。本文我们称为前向变换矩阵(forward transformation)

F=[20.510.25]F=\begin{bmatrix}2&-0.5\\1&0.25\end{bmatrix}

由于基都是线性无关的,因此矩阵 FF 可逆。

反之,旧基也可用新基表示

[e1e2]=[e1~e2~]F1\begin{bmatrix}\boldsymbol e_1&\boldsymbol e_2\end{bmatrix}= \begin{bmatrix}\widetilde{\boldsymbol e_1}&\widetilde{\boldsymbol e_2}\end{bmatrix}F^{-1}

显然 B=F1B=F^{-1} ,即 BikAkj=δjiB^i{}_k A^k{}_j=\delta^i_j。矩阵 BB 称为逆向变换(backward transformation)。

一般地,在向量空间 VV 中,假设旧基 {ei}\{\boldsymbol e_i\} 和新基 {ei~}\{\widetilde{\boldsymbol e_i}\} 间的线性关系为

{e1~=F11e1+F21e2++Fn1ene2~=F12e1+F22e2++Fn2enen~=F1ne1+F2ne2++Fnnen\begin{cases} \widetilde{\boldsymbol e_1}=F^1{}_1\boldsymbol e_1+F^2{}_1\boldsymbol e_2+\cdots+F^n{}_1\boldsymbol e_n \\ \widetilde{\boldsymbol e_2}=F^1{}_2\boldsymbol e_1+F^2{}_2\boldsymbol e_2+\cdots+F^n{}_2\boldsymbol e_n \\ \cdots \\ \widetilde{\boldsymbol e_n}=F^1{}_n\boldsymbol e_1+F^2{}_n\boldsymbol e_2+\cdots+F^n{}_n\boldsymbol e_n \\ \end{cases}

则对应的前向变换矩阵为

F=[F11F12F1nF21F22F2nFn1Fn2Fnn]F=\begin{bmatrix}F^1{}_1&F^1{}_2&\cdots&F^1{}_n\\ F^2{}_1&F^2{}_2&\cdots&F^2{}_n \\ \vdots&\vdots&\ddots&\vdots \\ F^n{}_1&F^n{}_2&\cdots&F^n{}_n\end{bmatrix}

张量分析中一般写成元素间的关系

ej~=i=1nFijei,ej=i=1nBijei~\widetilde{\boldsymbol e_j}=\sum_{i=1}^nF^i{}_j\boldsymbol e_i,\quad \boldsymbol e_j=\sum_{i=1}^nB^i{}_j\widetilde{\boldsymbol e_i}

应用Einstein求和约定,基变换公式简写为

ej~=Fijei,ej=Bijei~\widetilde{\boldsymbol e_j}=F^i{}_j\boldsymbol e_i,\quad \boldsymbol e_j=B^i{}_j\widetilde{\boldsymbol e_i}

至此我们简要介绍了基向量的变换,并得到了变换矩阵 FFBB。接下来,我们要讨论向量在不同基下的表示。

向量

给定一个向量,它一定是「不变」的,因为它就是向量空间中的一个元素而已。只是我们为了要「表示」这个向量,我们需要提供两个内容:一组基和这组基下该向量对应的坐标。

接着使用上节的坐标系,假设我们给定一个向量 v\boldsymbol v,其在旧基下的表示是

v=1e1+1.5e2=[e1e2][11.5]\boldsymbol v=1\boldsymbol e_1+1.5\boldsymbol e_2= \begin{bmatrix}\boldsymbol e_1&\boldsymbol e_2\end{bmatrix} \begin{bmatrix}1\\ 1.5\end{bmatrix}

带入基变换公式,便得到在新基下的表示

v=[e1~e2~][20.510.25]1[11.5]=[e1~e2~][12]\boldsymbol v=\begin{bmatrix}\widetilde{\boldsymbol e_1}&\widetilde{\boldsymbol e_2}\end{bmatrix} \begin{bmatrix}2&-0.5\\1&0.25\end{bmatrix}^{-1} \begin{bmatrix}1\\ 1.5\end{bmatrix}= \begin{bmatrix}\widetilde{\boldsymbol e_1}&\widetilde{\boldsymbol e_2}\end{bmatrix} \begin{bmatrix}1\\ 2\end{bmatrix}

一般地,假设向量 vV\boldsymbol v\in V 在旧基 {ei}\{\boldsymbol e_i\} 和新基 {ei~}\{\widetilde{\boldsymbol e_i}\} 下的表示为

v=viei=vi~ei~\boldsymbol{v}=v^i\boldsymbol e_i=\widetilde{v^i}\widetilde{\boldsymbol e_i}

利用基变换公式,我们便可得到

vi~=Bjivj,vi=Fjivj~\widetilde{v^i}=B^i_jv^j,\quad v^i=F^i_j\widetilde{v^j}

从上式我们看出,向量坐标分量的变换与基变换是互逆的。因此,我们称向量是逆变的(contravariant)。同样的,坐标基则被称为协变的(covariant)。

一般情况下,协变的分量使用「下标」,而逆变的分量使用「上标」。在张量分析中,指数极少会出现,所以不必担心这个上标和指数表达存在混淆。

线性变换

给定向量空间 VV,若映射 L:VV\mathcal L:V\to V 满足以下条件:

  1. 可加性:L(v+w)=L(v)+L(w)\mathcal L(\boldsymbol v+\boldsymbol w)=\mathcal L(\boldsymbol v)+\mathcal L(\boldsymbol w)
  2. 伸缩性:L(cv)=cL(v)\mathcal L(c\boldsymbol v)=c\mathcal L(\boldsymbol v)

那么称 L\mathcal L 为线性变换。

接下来我们在二维空间中讨论下线性变换的一些性质。

给定 VV 中一组基 {e1,e2}\{\boldsymbol e_1,\boldsymbol e_2\} , 将 L\mathcal L 作用于任意向量 v=v1e1+v2e2\boldsymbol v=v^1\boldsymbol e_1+v^2\boldsymbol e_2,就有

L(v)=L(v1e1+v2e2)=v1L(e1)+v2L(e2)\mathcal L(\boldsymbol v)=\mathcal L(v^1\boldsymbol e_1+v^2\boldsymbol e_2)=v^1\mathcal L(\boldsymbol e_1)+v^2\mathcal L(\boldsymbol e_2)

上式表明,如果我们知道线性变换作用于基向量的结果 L(e1), L(e2)\mathcal L(\boldsymbol e_1),\ \mathcal L(\boldsymbol e_2) ,就可以计算 L\mathcal L 对任意向量的作用。令

L(e1)=A11e1+A21e2L(e2)=A12e1+A22e2\mathcal L(\boldsymbol e_1)=A^1{}_1\boldsymbol e_1+A^2{}_1\boldsymbol e_2\\ \mathcal L(\boldsymbol e_2)=A^1{}_2\boldsymbol e_1+A^2{}_2\boldsymbol e_2

改写为矩阵乘法的形式

L(v)=[L(e1)L(e2)][v1v2]=[e1e2][A11A12A21A21][v1v2]\mathcal L(\boldsymbol v)=\begin{bmatrix}\mathcal L(\boldsymbol e_1)&\mathcal L(\boldsymbol e_2)\end{bmatrix} \begin{bmatrix}v^1 \\ v^2\end{bmatrix}= \begin{bmatrix}\boldsymbol e_1&\boldsymbol e_2\end{bmatrix} \begin{bmatrix}A^1{}_1 & A^1{}_2 \\ A^2{}_1 & A^2{}_1\end{bmatrix} \begin{bmatrix}v^1 \\ v^2\end{bmatrix}

L(v)=w=w1e1+w2e2\mathcal L(\boldsymbol v)=\boldsymbol w=w^1\boldsymbol e_1+w^2\boldsymbol e_2

于是就有

[w1w2]=[A11A12A21A21][v1v2]\begin{bmatrix}w^1 \\ w^2\end{bmatrix}= \begin{bmatrix}A^1{}_1 & A^1{}_2 \\ A^2{}_1 & A^2{}_1\end{bmatrix} \begin{bmatrix}v^1 \\ v^2\end{bmatrix}

由此可见,线性映射在基 {e1,e2}\{\boldsymbol e_1,\boldsymbol e_2\} 下等价于矩阵

A=[A11A12A21A21]A=\begin{bmatrix}A^1{}_1 & A^1{}_2 \\ A^2{}_1 & A^2{}_1\end{bmatrix}

这里 AA 的第 jj 列是基向量 ej\boldsymbol e_j 变换后的坐标。

接下来讨论同一个线性映射在不同基下的矩阵表示。

给定另一组基 {e1~,e2~}\{\widetilde{\boldsymbol e_1},\widetilde{\boldsymbol e_2}\} ,令 L\mathcal L 对应的矩阵为

A~=[A~11A~12A~21A~21]\widetilde A=\begin{bmatrix}\widetilde A^1{}_1 & \widetilde A^1{}_2 \\ \widetilde A^2{}_1 & \widetilde A^2{}_1\end{bmatrix}

在新基下同样有

[w1~w2~]=[A~11A~12A~21A~21][v1~v2~]\begin{bmatrix}\widetilde{w^1} \\ \widetilde{w^2}\end{bmatrix}= \begin{bmatrix}\widetilde A^1{}_1 & \widetilde A^1{}_2 \\ \widetilde A^2{}_1 & \widetilde A^2{}_1\end{bmatrix} \begin{bmatrix}\widetilde{v^1} \\ \widetilde{v^2}\end{bmatrix}

接下来,我们可以通过矩阵的相似变换得到 A~\widetilde AAA 间的变换关系。设旧基到新基的前向变换矩阵为 FF

  1. 先将 v\boldsymbol v 转换为旧基下的坐标,即 F[v1~v2~]F\begin{bmatrix}\widetilde{v^1} \\ \widetilde{v^2}\end{bmatrix}
  2. 将旧基下的线性映射矩阵 AA 作用于这个结果,将得到线性映射后在旧基下的坐标,即 AF[v1~v2~]AF\begin{bmatrix}\widetilde{v^1} \\ \widetilde{v^2}\end{bmatrix}
  3. 我们再把这个结果转换到新基下,也就是 BAF[v1~v2~]BAF\begin{bmatrix}\widetilde{v^1} \\ \widetilde{v^2}\end{bmatrix}

所以就有

A~[v1~v2~]=BAF[v1~v2~]\widetilde A\begin{bmatrix}\widetilde{v^1} \\ \widetilde{v^2}\end{bmatrix}= BAF\begin{bmatrix}\widetilde{v^1} \\ \widetilde{v^2}\end{bmatrix}

因此

A~=BAF\widetilde A=BAF

接下来,我们将使用张量的语言将这一结论推广到一般的向量空间。

假设线性映射 L\mathcal L 在旧基 {ei}\{\boldsymbol e_i\} 下的矩阵为 AA (分量 AijA^i{}_j),满足

L(ej)=eiAij\mathcal L(\boldsymbol e_j)=\boldsymbol e_iA^i{}_j

给定另一组新基 {ei~}\{\widetilde{\boldsymbol e_i}\} ,同一变换在新基下的矩阵为 A~\widetilde A (分量 A~ij\widetilde A^i{}_j) 。同样有

L(ej~)=ei~A~ij(1)\mathcal L(\widetilde{\boldsymbol e_j})=\widetilde{\boldsymbol e_i}\widetilde A^i{}_j\tag{1}

将基变换公式 ej~=ekFkj\widetilde{\boldsymbol e_j}=\boldsymbol e_kF^k{}_j 带入(1)式左侧,并利用线性性

L(ej~)=L(ekFkj)=L(ek)Fkj=elAlkFkj(2)\mathcal L(\widetilde{\boldsymbol e_j})=\mathcal L(\boldsymbol e_kF^k{}_j)=\mathcal L(\boldsymbol e_k)F^k{}_j=\boldsymbol e_lA^l{}_kF^k{}_j\tag{2}

同样使用基变换公式 ei~=elFli\widetilde{\boldsymbol e_i}=\boldsymbol e_lF^l{}_i,带入(1)式右侧得到

L(ej~)=elFliA~ij(3)\mathcal L(\widetilde{\boldsymbol e_j})=\boldsymbol e_lF^l{}_i\widetilde A^i{}_j\tag{3}

由于旧基 {ei}\{\boldsymbol e_i\} 线性无关,比较 (2) 式和 (3) 式中 el\boldsymbol e_l 前的系数,得到核心张量方程:

AlkFkj=FliA~ijA^l{}_kF^k{}_j=F^l{}_i\widetilde A^i{}_j

在等式两边左乘逆向变换 BmlB^m{}_l 进行张量缩并

BmlAlkFkj=BmlFliA~ij=δmiA~ij=A~mj\begin{aligned} B^m{}_lA^l{}_kF^k{}_j &=B^m{}_lF^l{}_i\widetilde A^i{}_j \\ &=\delta^m{}_i\widetilde A^i{}_j \\ &=\widetilde A^m{}_j \end{aligned}

于是,我们得到了线性映射在不同坐标系下分量之间的变换规则

A~ij=BilAlkFkj\widetilde A^i{}_j=B^i{}_lA^l{}_kF^k{}_j

可见,线性映射的坐标变换使用了一次逆变(上标)和一次协变(下标)。

度量张量

在线性代数中,我们学过向量的长度和夹角,可由向量的内积来决定。

给定二维空间 VV 中的任意两向量

v=v1e1+v2e2w=w1e1+w2e2\boldsymbol v=v^1\boldsymbol e_1+v^2\boldsymbol e_2 \\ \boldsymbol w=w^1\boldsymbol e_1+w^2\boldsymbol e_2

笛卡尔内积

vw=(v1e1+v2e2)(w1e1+w2e2)=v1w1(e1e1)+(v1w2+v2w1)(e1e2)+v2w2(e2e2)\begin{aligned} \boldsymbol v\cdot\boldsymbol w&=(v^1\boldsymbol e_1+v^2\boldsymbol e_2)(w^1\boldsymbol e_1+w^2\boldsymbol e_2) \\ &=v^1w^1(\boldsymbol e_1\cdot\boldsymbol e_1)+(v^1w^2+v^2w^1)(\boldsymbol e_1\cdot\boldsymbol e_2)+v^2w^2(\boldsymbol e_2\cdot\boldsymbol e_2) \end{aligned}

用矩阵乘法表示为

vw=[v1v2][e1e1e1e2e2e1e2e2][w1w2]\boldsymbol v\cdot\boldsymbol w=\begin{bmatrix}v^1 & v^2\end{bmatrix} \begin{bmatrix} \boldsymbol e_1\cdot \boldsymbol e_1 & \boldsymbol e_1\cdot \boldsymbol e_2 \\ \boldsymbol e_2\cdot \boldsymbol e_1 & \boldsymbol e_2\cdot \boldsymbol e_2 \end{bmatrix} \begin{bmatrix}w^1 \\ w^2\end{bmatrix}

可见,只要知道基向量之间的内积,就可以求出任意两个向量的内积。应用爱因斯坦求和约定

vw=gijviwj\boldsymbol v\cdot\boldsymbol w=g_{ij}v^iw^j

上式中 gij=eiejg_{ij}=\boldsymbol e_i\cdot \boldsymbol e_j 称为度量张量,它包含了基向量两两之间的内积。很明显度量张量是对称的 gij=gjig_{ij}=g_{ji}

有了内积之后, 我们便可以计算向量的模长

v2=vv=gijvivj\|\boldsymbol v\|^2=\boldsymbol v\cdot\boldsymbol v=g_{ij}v^iv^j

对于标准正交基而言,gij=eiej=δijg_{ij}=\boldsymbol e_i\cdot \boldsymbol e_j=\delta_{ij},那么上式就变为了勾股定理

v2=vjvj\|\boldsymbol v\|^2=v^jv^j

除了用来度量向量的长度外,度量张量还可以确定两个向量的夹角。假设向量 v\boldsymbol vw\boldsymbol w 的夹角为 θ\theta ,为了确定它,我们考虑引入一组新基,这组新基的两个基向量长度为1,且恰好分别与 v\boldsymbol vw\boldsymbol w 共线,即

v=ae1~,w=be2~\boldsymbol v=a\widetilde{\boldsymbol e_1},\quad \boldsymbol w=b\widetilde{\boldsymbol e_2}

注意由于我们选取的基向量是长度为1的基向量,显然 v=a, w=b\|\boldsymbol v\|=a,\ \|\boldsymbol w\|=b

由于旋转坐标系不会改变向量的夹角,当然也不会改变度量张量本身,因此为了简便,我们让 e1~\widetilde{\boldsymbol e_1} 与标准正交基 e1\boldsymbol e_1 重合,即 e1~=e1\widetilde{\boldsymbol e_1}=\boldsymbol e_1。这样利用一些简单的三角关系,就能得到如下图所示的结果

接下来我们探讨度量张量在一般旧基 {ei}\{\boldsymbol e_i\} 和新基 {ei~}\{\widetilde{\boldsymbol e_i}\} 间的坐标变换。已知基变换公式

ej~=eiFij,ej=ei~Bij\widetilde{\boldsymbol e_j}=\boldsymbol e_iF^i{}_j,\quad \boldsymbol e_j=\widetilde{\boldsymbol e_i}B^i{}_j

于是

gij~=ei~ej~=(ekFki)(elFlj)=FkiFljgkl\widetilde{g_{ij}}=\widetilde{\boldsymbol e_i}\cdot \widetilde{\boldsymbol e_j} =(\boldsymbol e_kF^k{}_i)\cdot(\boldsymbol e_lF^l{}_j) =F^k{}_iF^l{}_jg_{kl}

可见度量张量的坐标变换使用了两次协变。同样地,新基来表示旧基就是

gij=BkiBljgkl~g_{ij}=B^k{}_iB^l{}_j\widetilde{g_{kl}}

一般张量

截止目前,我们已经介绍过几种类型的具体张量:列向量、线性变换、度量张量。

向量的坐标变换:

vi~=Bijvj,vi=Fijvj~\widetilde{v^i}=B^i{}_jv^j,\quad v^i=F^i{}_j\widetilde{v^j}

使用了一次逆变,因此称为 (1, 0)-tensor。

向量空间中的基:

ej~=Fijei,ej=Bijei~\widetilde{\boldsymbol e_j}=F^i{}_j\boldsymbol e_i,\quad \boldsymbol e_j=B^i{}_j\widetilde{\boldsymbol e_i}

使用了一次协变,因此称为 (0, 1)-tensor。

线性映射的坐标变换:

A~ij=BilAlkFkj,Aij=FilA~lkBkj\widetilde A^i{}_j=B^i{}_lA^l{}_kF^k{}_j,\quad A^i{}_j=F^i{}_l\widetilde A^l{}_kB^k{}_j

使用了一次逆变和一次协变,因此称为 (1, 1)-tensor。

度量张量的坐标变换:

gij~=FkiFljgkl,gij=BkiBljgkl~\widetilde{g_{ij}}=F^k{}_iF^l{}_jg_{kl} ,\quad g_{ij}=B^k{}_iB^l{}_j\widetilde{g_{kl}}

使用了两次协变,因此称为 (0, 2)-tensor。

在此,给出一般张量的定义。只要其坐标变换是符合以下规律的对象,就是张量

T~xyzabc=(BaiBbjBck)Trstijk(FrxFsyFtz)\widetilde T^{abc\cdots}_{xyz\cdots}= (B^a{}_iB^b{}_jB^c{}_k\cdots ) T^{ijk\cdots}_{rst\cdots} (F^r{}_xF^s{}_yF^t{}_z\cdots )

这一规则保证了张量作为几何对象不依赖于坐标选择。其中上标就是「逆变分量」,而下标是「协变分量」。若坐标变换包含 pp 个逆变和 qq 个协变,就称为 (p, q)-tensor。所有指标的总数称为张量的阶(rank)。例如,(p, q)-tensor 的阶为 p+qp+q ,在 nn 维空间中,此张量的分量个数为 np+qn^{p+q}

  • 0 阶张量(标量):单个数值 TT。坐标变换下数值保持不变。例如:温度、质量、向量内积的结果。

  • 1 阶张量

    • (1,0)-tensor(逆变向量):分量 viv^i,共 nn 个分量
    • (0,1)-tensor(协变向量):分量 αi\alpha_i,共 nn 个分量
  • 2 阶张量

    • (2, 0)-tensor(二阶逆变张量):分量 TijT^{ij},共 n2n^2 个分量
    • (1, 1)-tensor(混合二阶张量):分量 TijT^i{}_j,共 n2n^2 个分量,是矩阵形式对应的标准张量类型
    • (0, 2)-tensor(二阶协变张量):分量 TijT_{ij},共 n2n^2 个分量,度量张量是典型代表
  • 高阶张量:按指标数量类推,例如 (2, 1)-tensor TijkT^{ij}{}_k,共 n3n^3 个分量;(3, 2)-tensor TijklmT^{ij}{}_k{}^l{}_m,共 n5n^5 个分量。

余向量与对偶空间

余向量

在数学中,余向量(covector)定义为一个「线性泛函」,它将向量空间 VV 中的向量映射到标量域上,即

α:VF\boldsymbol\alpha:V\to\mathbb F

对于u,vV,cR\forall\boldsymbol u,\boldsymbol v\in V,c\in\R 满足

α(u+v)=α(u)+α(v)α(cu)=cα(u)\boldsymbol\alpha(\boldsymbol u+\boldsymbol v)=\boldsymbol\alpha(\boldsymbol u)+\boldsymbol\alpha(\boldsymbol v) \\ \boldsymbol\alpha(c\boldsymbol u)=c\boldsymbol\alpha(\boldsymbol u)

在二维或三维空间中,余向量可以近似表示为「行向量」,而向量通常表示为「列向量」。余向量的作用等价于将列向量作为输入,通过矩阵乘法得到标量输出。

例如,余向量(行向量) α=[21]\boldsymbol\alpha=\begin{bmatrix}2&1\end{bmatrix} ,它作用于向量 v=[32]\boldsymbol v=\begin{bmatrix}3\\2\end{bmatrix} ,就是

α(v)=[21]([32])=[21][32]=8\boldsymbol\alpha(\boldsymbol v)=\begin{bmatrix}2&1\end{bmatrix}(\begin{bmatrix}3\\2\end{bmatrix})= \begin{bmatrix}2&1\end{bmatrix}\begin{bmatrix}3\\2\end{bmatrix}=8

可能大家都注意到了,余向量的输入虽然看起来只有一个(列向量),但本质上由于列向量包含两个分量,那么余向量的自变量应该有两个

α([xy])=2x+y\boldsymbol\alpha(\begin{bmatrix}x\\y\end{bmatrix})=2x+y

显然,我们可以用等高线可视化形如 z=ax+byz=ax+by 的函数

这意味着,要想知道一个向量被 α\alpha 作用后的结果是多少,就看这个向量终点落到了哪条等高线上。

对偶空间

给定向量空间 VV ,任取两个余向量 α,β:VR\boldsymbol\alpha,\boldsymbol\beta:V\to\R ,通过行向量的运算容易知道,vV,cR\forall\boldsymbol v\in V,c\in\R

(α+β)(v)=α(v)+β(v)(cα)(v)=cα(v)(\boldsymbol\alpha+\boldsymbol\beta)(\boldsymbol v)=\boldsymbol\alpha(\boldsymbol v)+\boldsymbol\beta(\boldsymbol v) \\ (c\boldsymbol\alpha)(\boldsymbol v)=c\boldsymbol\alpha(\boldsymbol v)

可见余向量满足线性性,这样的余向量的集合显然可以构成一个向量空间,这个向量空间称为输入空间 VV对偶空间,记作 VV^* 。以上引入并不是严谨的,我们仅是构造了一个由余向量构成的特殊的对偶空间。

我们知道,这个定义还蕴含了 vV\boldsymbol v\in VVV^* 上的线性函数。因为给定 VV 中一元素,可以确定一个从 VV^*R\R 的映射,所以,我们根本无法说明 VV^* 中元素究竟比 VV 中元素特殊在哪里,大家地位是对等的。

对偶空间既然是一个向量空间,它当然也有自己的基。那么我们就能根据给定的基得到任意余向量的坐标。假设给定了二维向量空间 VV 的一组基 {e1,e2}\{\boldsymbol e_1,\boldsymbol e_2\} ,我们在对偶空间中取这样两个元素 {ϵ1,ϵ2}\{\boldsymbol\epsilon^1,\boldsymbol\epsilon^2\},它们满足

ϵ1(e1)=1,ϵ1(e2)=0ϵ2(e1)=0,ϵ2(e2)=1\boldsymbol\epsilon^1(\boldsymbol e_1)=1,\quad\boldsymbol\epsilon^1(\boldsymbol e_2)=0 \\ \boldsymbol\epsilon^2(\boldsymbol e_1)=0,\quad\boldsymbol\epsilon^2(\boldsymbol e_2)=1

这里为什么要把 ϵ\boldsymbol\epsilon 中的 ii 写作上标而不是下标,后面会解释。

将它们作用于任意的 v=v1e1+v2e2\boldsymbol v=v^1\boldsymbol e_1+v^2\boldsymbol e_2 就有

ϵ1(v)=ϵ1(v1e1+v2e2)=v1ϵ2(v)=ϵ2(v1e1+v2e2)=v2\boldsymbol\epsilon^1(\boldsymbol v)=\boldsymbol\epsilon^1(v^1\boldsymbol e_1+v^2\boldsymbol e_2)=v^1\\ \boldsymbol\epsilon^2(\boldsymbol v)=\boldsymbol\epsilon^2(v^1\boldsymbol e_1+v^2\boldsymbol e_2)=v^2

接下来我们考察任意余向量 α\boldsymbol\alpha 作用于 v\boldsymbol v,即

α(v)=α(v1e1+v2e2)=v1α(e1)+v2α(e2)\boldsymbol\alpha(\boldsymbol v)=\boldsymbol\alpha(v^1\boldsymbol e_1+v^2\boldsymbol e_2)=v^1\boldsymbol\alpha(\boldsymbol e_1)+v^2\boldsymbol\alpha(\boldsymbol e_2)

α(e1)=α1, α(e2)=α2\boldsymbol\alpha(\boldsymbol e_1)=\alpha_1,\ \boldsymbol\alpha(\boldsymbol e_2)=\alpha_2 ,那么上式就继续写作

α(v)=α1ϵ1(v)+α2ϵ2(v)=(α1ϵ1+α2ϵ2)(v)\boldsymbol\alpha(\boldsymbol v)=\alpha_1\boldsymbol\epsilon^1(\boldsymbol v)+\alpha_2\boldsymbol\epsilon^2(\boldsymbol v)=(\alpha_1\boldsymbol\epsilon^1+\alpha_2\boldsymbol\epsilon^2)(\boldsymbol v)

也即

α=α1ϵ1+α2ϵ2\boldsymbol\alpha=\alpha_1\boldsymbol\epsilon^1+\alpha_2\boldsymbol\epsilon^2

这样,对偶空间中的任意元素 α\boldsymbol\alpha 就写成了 {ϵ1,ϵ2}\{\boldsymbol\epsilon^1,\boldsymbol\epsilon^2\} 的线性组合了,因此 {ϵ1,ϵ2}\{\boldsymbol\epsilon^1,\boldsymbol\epsilon^2\} 就可看做对偶空间的基,而 α\boldsymbol\alpha 的坐标就是 [α1α2]\begin{bmatrix}\alpha_1\\\alpha_2\end{bmatrix}

一般地,对于向量空间 VV 的一组基 {ei}\{\boldsymbol e_i\} ,取对偶空间 VV^* 对应的基

ϵi(ej)=δji\boldsymbol\epsilon^i(\boldsymbol e_j)=\delta^i_j

那么,对于任意 αV\boldsymbol\alpha\in V^* 就有

α=αiϵi\boldsymbol\alpha=\alpha_i\boldsymbol\epsilon^i

其中 αi=α(ei)\alpha_i=\boldsymbol\alpha(\boldsymbol e_i)

坐标变换

有了对偶空间的基和坐标,接下来我们就来看对偶空间下的坐标变换。

为了定义对偶空间中的另一组基,我们当然也得先给出输入空间里的一组新基,即

ej~=Fjiei\widetilde{\boldsymbol e_j}=F^i_j\boldsymbol e_i

同样我们定义

ϵi~(ej~)=δji\widetilde{\boldsymbol\epsilon^i}(\widetilde{\boldsymbol e_j})=\delta^i_j

于是得到了新坐标

α=α~iϵi~\boldsymbol\alpha=\widetilde{\alpha}_i\widetilde{\boldsymbol\epsilon^i}

进一步,我们就得到了 α\alpha 的坐标变换

α~j=α(ej~)=α(Fjiei)=Fjiαi\widetilde{\alpha}_j=\boldsymbol\alpha(\widetilde{\boldsymbol e_j})=\boldsymbol\alpha(F^i_j\boldsymbol e_i)=F^i_j\alpha_i

反过来,新基到旧基下的坐标变换就是

αj=Bjiα~i\alpha_j=B^i_j\widetilde{\alpha}_i

余向量分量与基按同一个方向变换——这正是「协变」(covariant)名称的来源。

对偶基变换

最后,我们来讨论对偶空间的基变换。考虑 VV 中的两组基 {ei}\{\boldsymbol e_i\}{ei~}\{\widetilde{\boldsymbol e_i}\}

ej~=Fjiei\widetilde{\boldsymbol e_j}=F^i_j\boldsymbol e_i

则对偶空间 VV^* 中的基

ϵi(ej)=ϵi~(ej~)=δji\boldsymbol\epsilon^i(\boldsymbol e_j)= \widetilde{\boldsymbol\epsilon^i}(\widetilde{\boldsymbol e_j})=\delta^i_j

设变换矩阵 AA 使得

ϵj~=Ajiϵi\widetilde{\boldsymbol\epsilon^j}=A^j{}_i\boldsymbol\epsilon^i

带入对偶关系

δkj=ϵj~(ek~)=(Ajiϵi)(Flkel)=AjiFlkδli=AjiFik\delta^j_k=\widetilde{\boldsymbol\epsilon^j}(\widetilde{\boldsymbol e_k})= (A^j{}_i\boldsymbol\epsilon^i)(F^l{}_k\boldsymbol e_l)= A^j{}_iF^l{}_k\delta^i_l=A^j{}_iF^i{}_k

写成矩阵的乘法形式

AF=IAF=I

因此

A=F1=BA=F^{-1}=B

因此对偶基的变换公式为

ϵj~=Bjiϵi\widetilde{\boldsymbol\epsilon^j}=B^j{}_i\boldsymbol\epsilon^i

反过来就是

ϵj=Fjiϵi~\boldsymbol\epsilon^j=F^j{}_i\widetilde{\boldsymbol\epsilon^i}

可见对偶基是逆变的。

多重线性映射

从线性映射的角度再看度量张量,类似于余向量,可以将度量张量视作把两个向量映射成一个「标量」的函数。

T:V×VR,T(v,w)=Tijviwj\mathcal T:V\times V\to\R,\quad \mathcal T(\boldsymbol v,\boldsymbol w)=T_{ij}v^iw^j

容易验证,对于任意 cR;u,v,wVc\in\R;\boldsymbol u,\boldsymbol v,\boldsymbol w\in V 有下列性质:

  1. 伸缩性:cT(v,w)=T(cv,w)=T(v,cw)c\mathcal T(\boldsymbol v,\boldsymbol w)=\mathcal T(c\boldsymbol v,\boldsymbol w)=\mathcal T(\boldsymbol v,c\boldsymbol w)
  2. 可加性:T(v+u,w)=T(v,w)+T(u,w)\mathcal T(\boldsymbol v+\boldsymbol u,\boldsymbol w)=\mathcal T(\boldsymbol v,\boldsymbol w)+\mathcal T(\boldsymbol u,\boldsymbol w)
    T(v,w+u)=T(v,w)+T(v,u)\mathcal T(\boldsymbol v,\boldsymbol w+\boldsymbol u)=\mathcal T(\boldsymbol v,\boldsymbol w)+\mathcal T(\boldsymbol v,\boldsymbol u)

满足上述定义的二元映射称为双线性映射。

双线性映射中的任一参数具有独立的线性性:换句话说,双线性映射拥有两个输入参数,但我们可以将其中一个参数固定下来,或者说将其视作常量,那么另一个参数就具有线性性。比如将 v\boldsymbol v 固定下来,那么 T(v,w)\mathcal T(\boldsymbol v,\boldsymbol w) 就可以看做这样一个线性映射 Lv(w)\mathcal L_{\boldsymbol v}(\boldsymbol w)

度量张量其实是双线性映射的一个特例,它还满足对称性和正定性,是其他双线性映射不具备的性质。

  1. 对称性:gij=eiej=ejei=gjig_{ij}=\boldsymbol e_i\cdot\boldsymbol e_j=\boldsymbol e_j\cdot\boldsymbol e_i=g_{ji}
  2. 正定性:g(v,v)=gijvivj0g(\boldsymbol v,\boldsymbol v)=g_{ij}v^iv^j\geqslant 0

其实,线性变换也是双线性映射。乍看,线性变换的输入是 1 个向量,输出是 1 个向量,与双线性映射的定义并不一致 —— 二者的等价性需要通过对偶空间建立桥梁。

给定一个 (1,1)-tensor L\mathcal L 作用于一个列向量 v\boldsymbol v

Lijvj=wiL^i{}_jv^j=w^i

由爱因斯坦求和约定,显然 wiw^i 是某个列向量的坐标。也就是说张量 L\mathcal L 可视作一个线性映射 L:VV\mathcal L:V\to V

同样,如前面的思路一样,它不止由下标,还有上标,所以可以和余向量 α\boldsymbol\alpha 缩并:

αiLij=βj\alpha_iL^i{}_j=\beta_j

现在我们同样可以说,张量 L\mathcal L 是一个线性映射 L:VV\mathcal L:V^*\to V^*

当然,我们也可以完全用掉它的上标和下标,也就是同时作用于列向量 v\boldsymbol v 和余向量 α\boldsymbol\alpha,即

αiLijvj=sR\alpha_iL^i{}_jv^j=s\in\R

由于 α\boldsymbol\alphav\boldsymbol v 都是线性的,因此,我们也可以说,张量 L\mathcal L 是双线性映射

L:V×VR\mathcal L:V^*\times V\to \R

对应的函数可视为:

(α,v)α(L(v))(\boldsymbol\alpha,\boldsymbol v) \mapsto\boldsymbol\alpha(\mathcal L(\boldsymbol v))

即先让线性变换作用在向量 v\boldsymbol v 上得到新向量 L(v)\mathcal L(\boldsymbol v),再用对偶向量 α\boldsymbol\alpha 去作用这个新向量,最终得到一个标量。

继续,给定一个 (2,1)-tensor T\mathcal T,分量为 TijkT^{ij}{}_k。它拥有两个上标一个下标,自然可以作用于两个余向量和一个列向量

αiβjTijkvk=sR\alpha_i\beta_jT^{ij}{}_kv^k=s\in\R

显然是一个三重线性映射

T:V×V×VR\mathcal T:V^*\times V^*\times V\to\R

实际上,我们引出了张量的另一个定义:张量是定义在向量空间与对偶空间上的多重线性映射。

多重线性映射满足下列条件:

  1. T(x1,x2,,cxi,,xn)=cT(x1,x2,,xn)\mathcal T(x_1,x_2,\cdots,cx_i,\cdots,x_n)=c\mathcal T(x_1,x_2,\cdots,x_n)
  2. T(x1,x2,,xi+yi,,xn)=T(x1,x2,,xi,,xn)+T(x1,x2,,yi,,xn)\mathcal T(x_1,x_2,\cdots,x_i+y_i,\cdots,x_n)=\mathcal T(x_1,x_2,\cdots,x_i,\cdots,x_n)+\mathcal T(x_1,x_2,\cdots,y_i,\cdots,x_n)

对每一个输入槽位都单独满足线性性,固定其他槽位时,单个槽位的输入与输出呈线性关系。

对于 (1, 0)-tensor (普通向量/逆变向量)也可以反过来作为线性函数,输入一个对偶向量,输出一个标量。这是一种自然的双向等价关系:v(α)=α(v)\boldsymbol v(\boldsymbol\alpha)=\boldsymbol\alpha(\boldsymbol v) ,只是视角从函数作用于自变量切换成了自变量作用于函数,本质是相同的。

再来看上面的 (2,1)-tensor TijkT^{ij}{}_k ,将输入空间的两个对偶基 ϵi,ϵjV\boldsymbol\epsilon^i,\boldsymbol\epsilon^j\in V^* 和协变基 ekV\boldsymbol e_k\in V 按槽位顺序代入映射,得到的数值就是该张量的分量:

Tijk=T(ϵi,ϵj,ek)T^{ij}{}_k=\mathcal T(\boldsymbol\epsilon^i,\boldsymbol\epsilon^j,\boldsymbol e_k)

新坐标系下的分量同理:

T~abc=T(ϵa~,ϵb~,ec~)\widetilde T^{ab}{}_c=\mathcal T(\widetilde{\boldsymbol\epsilon^a},\widetilde{\boldsymbol\epsilon^b},\widetilde{\boldsymbol e_c})

带入基变换公式,并利用多重线性映射的性质,得到

T~abc=T(Baiϵi,Bbjϵj,Fkcek)=(BaiBbjFkc)T(ϵi,ϵj,ek)=BaiBbjTijkFkc\begin{aligned} \widetilde T^{ab}{}_c&=\mathcal T(B^a{}_i\boldsymbol\epsilon^i,B^b{}_j\boldsymbol\epsilon^j,F^k{}_c\boldsymbol e_k) \\ &=(B^a{}_iB^b{}_jF^k{}_c)\mathcal T(\boldsymbol\epsilon^i,\boldsymbol\epsilon^j,\boldsymbol e_k) \\ &= B^a{}_iB^b{}_jT^{ij}{}_kF^k{}_c \end{aligned}

我们使用多重线性映射很自然的得到了坐标变换公式。

一般 (m, n)-tensor的坐标变换:每个逆变指标乘逆变矩阵 BB,每个协变指标乘协变矩阵 FF 。上下标不是书写习惯,而是严格对应变换规律。将基矢 / 对偶基代入映射,得到的数值集合就是张量的分量。指标需左右错开书写,明确槽位顺序,顺序不同一般对应不同张量。

张量作用,就是张量作为多重线性泛函的求值过程:给张量输入对应数量、对应类型的自变量(向量或对偶向量),最终输出一个标量。一个 (p, q)-tensor ,完整的张量作用需要输入 pp 个对偶向量加 qq 个向量,最终输出一个标量。

我们熟知的线性变换,本质上是张量的部分作用:给 (1, 1)-tensor只喂入一个向量,只填满了协变指标的位置,还剩一个逆变指标空位,结果就不是标量,而是一个 (1,0)-tensor,也就是向量。

从线性变换的视角推广,任意 (p,q)-tensor 都可以等价为一种「广义线性算子」:输入若干个向量 / 对偶向量,输出一个低阶张量。

张量积与张量空间

张量运算

所有张量运算都可转化为分量的代数运算。

张量加法:仅同类型张量可相加,对应分量直接相加。例如

(A+B)ijk=Aijk+Bijk(A+B)^{ij}{}_k=A^{ij}{}_k+B^{ij}{}_k

数乘:每个分量均乘以该标量。例如

(cT)ijk=cTijk(cT)^{ij}{}_k=cT^{ij}{}_k

张量积:分量直接相乘,所有指标保留,张量阶数相加。例如

(Tα)ijkl=Tijkαl(T\otimes \boldsymbol\alpha)^{ij}{}_{kl}=T^{ij}{}_k\boldsymbol\alpha_l

缩并:将张量的一个逆变指标和一个协变指标同名配对,按求和约定遍历求和,张量阶数降低 2 阶。例如

vj=Tijiv^j=T^{ij}{}_i

指标升降:度量张量 gijg_{ij} 与其逆 gijg^{ij} 满足 gikgkj=δijg_{ik}g^{kj}=\delta^j_i,可实现协变 / 逆变指标的转换。例如

vi=gijvjv_i=g_{ij}v^j

在笛卡尔正交坐标系下 gij=δijg_{ij}=\delta_{ij},协变与逆变分量数值完全相等,因此工程中常全写下标。但这是坐标系特例,不具有普适性。

张量积

所有高阶张量都可以拆解为低阶张量的张量积。张量积的核心规则是:对应分量直接相乘,所有指标按顺序保留,不做任何求和。给定一个 (p,q)(p,q)-tensor AA 和一个 (r,s)(r,s)-tensor BB,二者的张量积 ABA\otimes B(p+r,q+s)(p+r, q+s)-tensor。

典型示例:

  • 两个逆变向量 viv^iwjw^j,张量积为二阶逆变张量:

    (vw)ij=viwj(\boldsymbol v\otimes\boldsymbol w)^{ij}=v^iw^j

  • 逆变向量 viv^i ​与协变向量 αj\alpha_j ​的张量积,得到 (1,1)-tensor:

    (vα)ij=viαj(\boldsymbol v\otimes\boldsymbol\alpha)^i{}_{j}=v^i\boldsymbol\alpha_j

  • (1,1)-tensor TijT^i{}_j ​与协变向量 αk\alpha_k ​的张量积,得到 (1,2)-tensor:

    (Tα)ijk=Tijαk(T\otimes\boldsymbol\alpha)^i{}_{jk}=T^i{}_j\alpha_k

  • 两个 (1,1)-tensor AijA^i{}_j ​与 BklB^k{}_l ​的张量积,得到 (2,2)-tensor:

    (AB)ikjl=AijBkl(A\otimes B)^{ik}{}_{jl}=A^i{}_jB^k{}_l

事实上,二阶张量及以下的张量积可视作一种分配运算。

示例1:设矩阵 A=[1223]A=\begin{bmatrix}1&2\\2&3\end{bmatrix}B=[0135]B=\begin{bmatrix}0&1\\3&5\end{bmatrix} 。张量积为分块矩阵运算

AB=[1B2B2B3B]=[0102356100203610915]A\otimes B=\begin{bmatrix}1B&2B\\2B&3B\end{bmatrix} =\begin{bmatrix}0&1&0&2\\3&5&6&10 \\ 0&2&0&3 \\6&10&9&15 \end{bmatrix}

反过来

BA=[0A1A3A5A]=[0012002336510691015]B\otimes A=\begin{bmatrix}0A&1A\\3A&5A\end{bmatrix} =\begin{bmatrix}0&0&1&2\\0&0&2&3 \\ 3&6&5&10 \\6&9&10&15 \end{bmatrix}

显然 ABBAA\otimes B\neq B\otimes A

示例2:向量 v=[12]\boldsymbol v=\begin{bmatrix}1\\2\end{bmatrix}w=[34]\boldsymbol w=\begin{bmatrix}3\\4\end{bmatrix} 。张量积展平后为4维向量

vw=[1w2w]=[3468]\boldsymbol v\otimes \boldsymbol w=\begin{bmatrix}1\boldsymbol w\\2\boldsymbol w\end{bmatrix}=\begin{bmatrix}3\\4\\6\\8\end{bmatrix}

也可利用向量外积表示成矩阵的形式

vw=[13142324]=[3468]\boldsymbol v\otimes \boldsymbol w=\begin{bmatrix}1\cdot3&1\cdot4\\2\cdot3&2\cdot4\end{bmatrix}=\begin{bmatrix}3&4\\6&8\end{bmatrix}

张量是个抽象对象,我们想让它做一些定量计算,就得想办法把它「表示」出来。其中分量 TijT^i{}_j 就是张量 vw\boldsymbol v\otimes \boldsymbol w 的一个坐标表示,遵循爱因斯坦求和约定,至于你把它当做矩阵还是高维向量,就已经无所谓了。

张量积的基本性质:

  1. 数乘: c(AB)=(cA)B=A(cB)c(A\otimes B)=(cA)\otimes B=A\otimes (cB)
  2. 左分配律:(A+B)C=AC+BC(A+B) \otimes C=A\otimes C+B\otimes C
  3. 右分配律:A(B+C)=AB+ACA\otimes(B+C)=A\otimes B+A\otimes C
  4. 结合律:(AB)C=A(BC)(A\otimes B)\otimes C=A\otimes(B\otimes C)

一般张量积不满足交换律: ABBAA\otimes B\neq B\otimes A,因为指标拼接顺序不同,对应不同的张量。

张量空间

由张量的运算性质,不难看出,所有同型张量构成线性空间。要表示一个张量,我们只需要找到对应的一组基,以及其坐标即可。

仍然以熟悉的线性变换开始,给定向量空间 VV 的一组基 {ei}\{\boldsymbol e_i\} ,它的对偶空间 VV^* 的基为 {ϵj}\{\boldsymbol\epsilon^j\} 满足正交归一性 ϵj(ei)=δij\boldsymbol\epsilon^j(\boldsymbol e_i)=\delta^j_i ,它的作用是提取向量分量 ϵj(v)=vj\boldsymbol\epsilon^j(\boldsymbol v)=v^j

取任意线性变换 L\mathcal L ,张量分量(矩阵元) LijL^i{}_j 满足

L(ej)=Lijei\mathcal L(\boldsymbol e_j)=L^i{}_j\boldsymbol e_i

对任意向量 v=vjej\boldsymbol v=v^j\boldsymbol e_j 作用结果为

L(v)=L(vjej)=Lijeivj=Lijeiϵj(v)\mathcal L(\boldsymbol v)=\mathcal L(v^j\boldsymbol e_j)=L^i{}_j\boldsymbol e_iv^j=L^i{}_j\boldsymbol e_i\boldsymbol\epsilon^j(\boldsymbol v)

这个式子的含义很关键。观察其中的每一项 eiϵj(v)\boldsymbol e_i\boldsymbol\epsilon^j(\boldsymbol v) 都是输入一个向量,输出一个向量。容易验证,他们都是一个线性变换。

以最简单的 2x2 矩阵为例,若 {e1,e1}\{\boldsymbol e_1,\boldsymbol e_1\} 是标准正交基,从矩阵的视角(余向量作为行向量),{e1ϵ1, e1ϵ2, e2ϵ1, e2ϵ2}\{\boldsymbol e_1\boldsymbol\epsilon^1,\ \boldsymbol e_1\boldsymbol\epsilon^2,\ \boldsymbol e_2\boldsymbol\epsilon^1,\ \boldsymbol e_2\boldsymbol\epsilon^2\} 就是一组标准基矩阵:

[1000], [0100], [0010], [0001]\begin{bmatrix}1&0\\0&0\end{bmatrix},\ \begin{bmatrix}0&1\\0&0\end{bmatrix},\ \begin{bmatrix}0&0\\1&0\end{bmatrix},\ \begin{bmatrix}0&0\\0&1\end{bmatrix}

这样,任意的 2x2 矩阵就可以写作

[abcd]=a[1000]+b[0100]+c[0010]+d[0001]\begin{bmatrix}a&b\\c&d\end{bmatrix}= a\begin{bmatrix}1&0\\0&0\end{bmatrix}+b\begin{bmatrix}0&1\\0&0\end{bmatrix}+ c\begin{bmatrix}0&0\\1&0\end{bmatrix}+d\begin{bmatrix}0&0\\0&1\end{bmatrix}

当然,从更一般的张量作用来看,我们定义

(eiϵj)(v)=eiϵj(v)(\boldsymbol e_i\otimes\boldsymbol\epsilon^j)(\boldsymbol v)=\boldsymbol e_i\boldsymbol\epsilon^j(\boldsymbol v)

回到刚才的 L(v)\mathcal L(\boldsymbol v) 表达式,可以把它改写为:

L(v)=Lij(eiϵj)(v)\mathcal L(\boldsymbol v)=L^i{}_j(\boldsymbol e_i\otimes\boldsymbol\epsilon^j)(\boldsymbol v)

由于对任意向量 v\boldsymbol v 都成立,因此映射层面有:

L=Lij(eiϵj)\mathcal L=L^i{}_j(\boldsymbol e_i\otimes\boldsymbol\epsilon^j)

这说明:任意一个线性变换,都可以表示成这 n2n^2eiϵj\boldsymbol e_i\otimes\boldsymbol\epsilon^j 的线性组合,可以验证他们线性无关。也就是说,集合 {eiϵj}\{\boldsymbol e_i\otimes\boldsymbol\epsilon^j\} 是线性变换空间的一组基。

站在 (1,1)-tensor 是 V×VV^*\times V 上的双线性泛函的角度,张量积的作用遵循「分别作用、结果相乘」的原则。比如基础单元 eiϵj\boldsymbol e_i\otimes\boldsymbol\epsilon^j 作用在 (α,v)(\boldsymbol\alpha,\boldsymbol v) 上:

(eiϵj)(α,v)=α(ei)ϵj(v)=αivj(\boldsymbol e_i\otimes\boldsymbol\epsilon^j)(\boldsymbol\alpha,\boldsymbol v) =\alpha(\boldsymbol e_i)\cdot\boldsymbol\epsilon^j(\boldsymbol v)=\alpha_iv^j

张量的本质在于分量在基变换下遵循的严格变换规则,我们用不同的基矩阵就会得到不同的分量。给定两组基

L=Lij(eiϵj)=L~ij(ei~ϵj~)\mathcal L=L^i{}_j(\boldsymbol e_i\otimes \boldsymbol\epsilon^j) =\widetilde L^i{}_j(\widetilde{\boldsymbol e_i}\otimes \widetilde{\boldsymbol\epsilon^j})

我们知道列向量的基变换和余向量的基变换

ei=Bkiek~,ϵj=Fjlϵl~\boldsymbol e_i=B^k{}_i\widetilde{\boldsymbol e_k},\quad \boldsymbol\epsilon^j=F^j{}_l\widetilde{\boldsymbol\epsilon^l}

代入就得到

Lij(eiϵj)=Lij(Bkiek~Fjlϵ~l)=BkiLijFjl(ek~ϵl~)\begin{aligned} L^i{}_j(\boldsymbol e_i\otimes \boldsymbol\epsilon^j) &=L^i{}_j(B^k{}_i\widetilde{\boldsymbol e_k}\otimes F^j{}_l\widetilde{\boldsymbol\epsilon}^l) \\ &=B^k{}_iL^i{}_jF^j{}_l(\widetilde{\boldsymbol e_k}\otimes \widetilde{\boldsymbol\epsilon^l}) \end{aligned}

于是

L~kl=BkiLijFjl\widetilde L^k{}_l=B^k{}_iL^i{}_jF^j{}_l

至此,我们相当于又从另一个角度重新讲解了一遍线性变换这个张量。

理解了 (1,1)-tensor 的构造逻辑,推广到任意张量就非常顺畅了 —— 本质就是「增加张量积的因子数量」

  • 每个逆变上标对应一个 VV 中的协变基矢 ei\boldsymbol e_i
  • 每个协变下标对应一个 VV^* 中的逆变对偶基 ϵj\boldsymbol\epsilon^j
  • 指标的横向顺序与张量积 \otimes 的因子顺序完全一一对应

现在我们来看 (0,2)-tensor ,它是定义在 V×VV\times V 上的双线性映射,接收两个向量,输出一个标量。

按照同样的思路,用两个对偶基做张量积构造基元:ϵiϵj\boldsymbol\epsilon^i \otimes \boldsymbol\epsilon^j 。作用规则为:

(ϵiϵj)(v,w)=ϵi(u)ϵj(v)=viwj(\boldsymbol\epsilon^i \otimes \boldsymbol\epsilon^j)(\boldsymbol v,\boldsymbol w)=\boldsymbol\epsilon^i(\boldsymbol u)\cdot\boldsymbol\epsilon^j(\boldsymbol v) = v^iw^j

所有 n2n^2 个这样的元素构成 (0,2) 型张量空间的基,任意双线性型 T\mathcal T 都可展开为:

T=Tij(ϵiϵj)=T~ij(ϵi~ϵj~)\mathcal T=T_{ij}(\boldsymbol\epsilon^i\otimes \boldsymbol\epsilon^j) =\widetilde T_{ij}(\widetilde{\boldsymbol\epsilon^i}\otimes \widetilde{\boldsymbol\epsilon^j})

再看下坐标变换

Tij(ϵiϵj)=Tij(Fikϵk~Fjlϵl~)=TijFikFjl(ϵk~ϵl~)\begin{aligned} T_{ij}(\boldsymbol\epsilon^i\otimes \boldsymbol\epsilon^j) &=T_{ij}(F^i{}_k\widetilde{\boldsymbol\epsilon^k}\otimes F^j{}_l\widetilde{\boldsymbol\epsilon^l}) \\ &=T_{ij}F^i{}_kF^j{}_l(\widetilde{\boldsymbol\epsilon^k}\otimes \widetilde{\boldsymbol\epsilon^l}) \end{aligned}

于是便有

T~kl=TijFikFjl\widetilde T_{kl}=T_{ij}F^i{}_kF^j{}_l

和之前章节的结论完全一致,而且非常自然。

现在我们把注意力放回 ϵiϵj\boldsymbol\epsilon^i\otimes \boldsymbol\epsilon^j,对于列向量和余向量相乘,我们还能用矩阵乘法去解释和计算。但是在线性代数中,两个行向量是没法相乘的。同样是描述分量序列,张量积是更本质的存在。

总结一下:

  1. 张量空间是一个线性空间,张量空间中的元素满足线性性。
  2. 张量空间中的元素是张量。既然是张量,按照我们前面的定义,那它自然可以写作若干列向量和余向量的张量积,于是我们就能按这个张量积来表示张量空间,反过来也一样。

假如我给你一个张量空间,比如 VVVV\otimes V^*\otimes V ,那么它里面的元素就一定是一个 (2, 1)-tensor,可以写作 TijkeiϵjekT^i{}_j{}^k\boldsymbol e_i\otimes \boldsymbol\epsilon^j\otimes \boldsymbol e_k 。反过来,如果张量表示为 TijklϵiϵjekϵlT_{ij}{}^k{}_l\boldsymbol\epsilon^i\otimes \boldsymbol\epsilon^j\otimes \boldsymbol e_k\otimes\boldsymbol\epsilon^l 那么这个张量所在的张量空间就是 VVVVV^*\otimes V^*\otimes V\otimes V^*

事实上,当我们想要表示一个张量时,由于我们已经有了爱因斯坦求和约定,只要我们能写下它的分量,那么它的基自然就已经定下来了。所以我们不需要像上面那样写出完整的表示,而是只需要写下类似 TijklT_{ij}{}^k{}_l 这种分量的形式就已经能完整表示一个张量了。

张量分析

在此前的文章,我们都是围绕具体的某个张量进行讲解,并从中引出一些张量中的概念。现在,我们将利用这个定义,对一般的、抽象的张量展开讲解。

给定张量的两组基

D=Dabeaeb=D~abea~eb~\mathcal D=D^{ab}\boldsymbol e_a\otimes\boldsymbol e_b=\widetilde D^{ab}\widetilde{\boldsymbol e_a}\otimes\widetilde{\boldsymbol e_b}

由于

Dabeaeb=Dab(Biaei~)(Bjbej~)=(BiaBjbDab)ei~ej~\begin{aligned} D^{ab}\boldsymbol e_a\otimes\boldsymbol e_b &=D^{ab}(B^i{}_a\widetilde{\boldsymbol e_i})\otimes(B^j{}_b\widetilde{\boldsymbol e_j}) \\ &=(B^i{}_aB^j{}_bD^{ab})\widetilde{\boldsymbol e_i}\otimes\widetilde{\boldsymbol e_j} \end{aligned}

这样就得到了坐标变换

D~ij=BiaBjbDab\widetilde D^{ij}=B^i{}_aB^j{}_bD^{ab}

接下来我们再来研究点更加复杂的张量。例如

Q=Qijkeiϵjϵk=Q~ijkei~ϵj~ϵk~\mathcal Q=Q^i{}_{jk}\boldsymbol e_i\otimes\boldsymbol\epsilon^j\otimes\boldsymbol\epsilon^k =\widetilde Q^i{}_{jk}\widetilde{\boldsymbol e_i}\otimes\widetilde{\boldsymbol\epsilon^j}\otimes\widetilde{\boldsymbol\epsilon^k}

类似之前的推导方法

Qijkeiϵjϵk=Qijk(Brier~)(Fjsϵs~)(Fktϵt~)=BriQijkFjsFkter~ϵs~ϵt~\begin{aligned} Q^i{}_{jk}\boldsymbol e_i\otimes\boldsymbol\epsilon^j\otimes\boldsymbol\epsilon^k &=Q^i{}_{jk}(B^r{}_i\widetilde{\boldsymbol e_r})\otimes(F^j{}_s\widetilde{\boldsymbol\epsilon^s})\otimes(F^k{}_t\widetilde{\boldsymbol\epsilon^t}) \\ &=B^r{}_iQ^i{}_{jk}F^j{}_sF^k{}_t\widetilde{\boldsymbol e_r}\otimes\widetilde{\boldsymbol\epsilon^s}\otimes\widetilde{\boldsymbol\epsilon^t} \end{aligned}

得到新旧坐标变换

Q~ijk=BirQrstFrjFtk\widetilde Q^i{}_{jk}=B^i{}_rQ^r{}_{st}F^r{}_jF^t{}_k

由于 Q\mathcal Q​ 的基包含两个余向量,自然可以作用于两个列向量。例如

Q(v,w)=Qijkeiϵj(v)ϵk(w)\mathcal Q(\boldsymbol v,\boldsymbol w)=Q^i{}_{jk}\boldsymbol e_i\otimes\boldsymbol\epsilon^j(\boldsymbol v)\otimes\boldsymbol\epsilon^k(\boldsymbol w)

倘若某个张量的基恰好包含两个列向量,那么 Q\mathcal Q 就可以作用于这个张量。比如

Q(D)=Qijkeiϵjϵk(Dabeaeb)\mathcal Q(\mathcal D)=Q^i{}_{jk}\boldsymbol e_i\otimes\boldsymbol\epsilon^j\otimes\boldsymbol\epsilon^k(D^{ab}\boldsymbol e_a\otimes\boldsymbol e_b)

于是现在问题就出现了,由于任意余向量作用于任意(同维的)基向量都是合法的操作,我们的两个余向量自然可以分别作用于两个基向量,比如我们可以选择让 ϵj\boldsymbol\epsilon^j 作用于 ea\boldsymbol e_aϵk\boldsymbol\epsilon^k 作用于 eb\boldsymbol e_b,于是我们就会得到

Q(D)=QijkDabeiϵj(ea)ϵk(eb)=QijkDabeiδajδbk=QijkDjkei\begin{aligned} \mathcal Q(\mathcal D)&=Q^i{}_{jk}D^{ab}\boldsymbol e_i\otimes\boldsymbol\epsilon^j(\boldsymbol e_a)\otimes\boldsymbol\epsilon^k(\boldsymbol e_b) \\ &=Q^i{}_{jk}D^{ab}\boldsymbol e_i\delta^j_a\delta^k_b \\ &=Q^i{}_{jk}D^{jk}\boldsymbol e_i \end{aligned}

而如果我们选择让 ϵj\boldsymbol\epsilon^j 作用于 eb\boldsymbol e_bϵk\boldsymbol\epsilon^k 作用于 ea\boldsymbol e_a。同理可得

Q(D)=QikjDjkei\mathcal Q(\mathcal D)=Q^i{}_{kj}D^{jk}\boldsymbol e_i

注意指标的顺序发生了变化,这是不同的张量,因为指标顺序变化意味着基的张量积顺序发生了变化。所以我们通常不会简单写下 Q(D)\mathcal Q(\mathcal D) 这种形式而是必须按照爱因斯坦求和约定写出具体的指标运算结果。

最后再来看下多重线性映射。给定一个 (1,3)-tensor T\mathcal T,分量为 TijklT_{ij}{}^k{}_l。它拥有三个下标一个上标,自然可以作用于低阶张量。例如

TijklUijl=vkT_{ij}{}^k{}_lU^{ijl}=v^k

进一步,我们来结合张量的线性性

Tijkl(cUijl)βk=sRT_{ij}{}^k{}_l(cU^{ijl})\beta_k=s\in\R

以及

Tijkl(Uijl+Rijl)βk=TijklUijlβk+TijklRijlβk=tRT_{ij}{}^k{}_l(U^{ijl}+R^{ijl})\beta_k=T_{ij}{}^k{}_lU^{ijl}\beta_k+T_{ij}{}^k{}_lR^{ijl}\beta_k=t\in\R

上式说明了张量 TijklT_{ij}{}^k{}_l 可以看作双线性映射

T:(VVV)×VR\mathcal T:(V\otimes V\otimes V)\times V^*\to\R

输入一个 (3,0)-tensor 和一个协变向量,输出标量。Amazing !!!

参考资料:

【中英⚡张量入门|Tensors for Beginners】