张量
张量是向量和矩阵的推广. 在 Mathematica 中,张量被表示为嵌套到一定次数的列表的集合,嵌套次数称为张量的秩.
| 0 阶 | 标量 |
| 1 阶 | 向量 |
| 2 阶 | 矩阵 |
| k 阶 | k 阶张量 |
嵌套列表的解释.
阶为 k 的张量实际上是一个 k 维值表. 张量的阶为 k 的条件是能够将表中的元素列为一个 k 维立方阵列,没有空洞和鼓包.
指明张量中特定元素的指标相应于立方体的坐标. 张量的维数相应于立方体的边长.
产生 k 阶张量的一个简单方法是给出 k 个变量的函数的值表. 在物理学中出现的张量具有指出空间或时空方向的指标. 注意,在 Mathematica 中,没有共变和协变张量指标的概念. 用户须使用度量张量来建立这些概念.
| Table[f,{i1,n1},{i2,n2},...,{ik,nk}] |
| 建立一个 × ×...× 张量,其元素是 f 的值 |
| Array[a,{n1,n2,...,nk}] | 建立一个 × ×...× 张量其元素通过把 a 用于每个指标集合给出 |
| ArrayQ[t,n] | 检验是否 t 是一个 n 阶张量 |
| Dimensions[t] | 给出张量的维数的列表 |
| ArrayDepth[t] | 求张量的阶 |
| MatrixForm[t] | 以两维阵列的形式排列张量 t 的元素 |
建立和检验张量结构的函数.
| Out[1]= |  |
| Out[2]= |  |
Out[3]//MatrixForm= |
| |  |
| Out[4]= |  |
这是张量的

元素.
| Out[5]= |  |
| Out[6]= |  |
张量的阶等于指定每个元素所需的指标数. 通过使用较少的指标数可以取出子张量.
| Transpose[t] | 张量的前两个指标的转置 |
| Transpose[t,{p1,p2,...}] | 转置张量,使第 k 个指标变成为第 个 |
| Tr[t,f] | 构造张量 t 的广义迹 |
| Outer[f,t1,t2] | 构造张量 和 在"乘法算子" f 下的广义外积 |
| t1.t2 | 构造 和 的点积( 的最后一个指标和 的第一个指标被删去) |
| Inner[f,t1,t2,g] | 构造广义内积,带有"乘法算子" f 和"加法算子" g |
张量运算.
可以把 k 阶张量看作有 k 个插入指标的"位置". 使用 Transpose 是重排这些位置的有效方法. 如果把张量的元素看作构成 k 维立方体,那么 Transpose 就是旋转(也可能是反射)该立方体.
在最一般的情形,Transpose 允许任意重排张量指标. 函数 Transpose[T, {p1, p2, ..., pk}] 给出一个新的张量
,使得
的值由
给定.
如果最初有一个
×
×...×
张量,使用 Transpose 后,将得到一个
×
×...×
张量.
| Out[7]= |  |
| Out[8]= |  |
原张量中的元素

变成转置张量的元素

.
| Out[9]= |  |
| Out[10]= |  |
这里转置

的前两层.
| Out[11]= |  |
| Out[12]= |  |
如果一个张量的不同层次具有同样的长度,则可以使用 Transpose 压缩不同的层次.
| Out[13]= |  |
| Out[14]= |  |
也可以用 Tr 提取张量的对角元素.
| Out[15]= |  |
| Out[16]= |  |
| Out[17]= |  |
外积以及其推广是一种用低阶张量构造高阶张量的方法. 外积有时称为直接积,张量积或 Kronecker 积.
根据结构的观点,Outer[f, t, u] 给出的张量有一个 u 插入到 t 的每个元素的"位置"的结构. 所得结构中的元素通过使用函数 f 组合 t 和 u 的元素来获得.
这里给出两个向量的"外积

". 结果是一个矩阵.
| Out[18]= |  |
对长度为3和长度为2的两个向量"外积

",得到 3×2 矩阵.
| Out[19]= |  |
2×2 矩阵和长度为3的向量的"外积

"是 2×2×3 张量.
| Out[20]= |  |
| Out[21]= |  |
×
×...×
张量和
×
×...×
张量的广义外积是
×...×
×
×...×
张量. 如果两个张量的阶为 r 和 s,其广义外积的阶为
.
用指标来描述,对两个张量
和
应用 Outer 的结果是张量
,其元素是
.
在标准张量计算中,在 Outer 中最常用的函数 f 是 Times,相应于标准外积.
然而,在组合运算中,把 f 取为 List 常常是方便的. 使用 Outer,可以得到一个张量元素与其它张量的元素的所有可能的组合.
构造 Outer[f, t, u] 时,把 u 插入到 t 的每一点. 构造 Inner[f, t, u] 时,组合并删去 t 的最后一维和 u 的第一维,即取
×
×...×
张量和
×
×...×
张量(其中
),得到一个
×
×...×
×
×...×
张量.
最简单的例子是向量的内积. 对两个长度相同的向量使用 Inner,将得到一个标量. Inner[f, v1, v2, g] 是普通标量积的推广,其中 f 起着乘法的作用,g 起着加法的作用.
| Out[22]= |  |
| Out[23]= |  |
| Out[24]= |  |
| Out[25]= |  |
| Out[26]= |  |
| Out[27]= |  |
可以把 Inner 看作是对一个张量的最后一个指标和另一张量的第一个指标进行"压缩". 如果想压缩其它指标对,可以先把该指标对转置到第一或最后的位置,然后使用 Inner,再把结果转置回去.
在张量的许多应用中,需要添加正负号实现反对称. 函数 Signature[{i1, i2, ...}] 给出交换的正负号,常常用于这种目的.
| Outer[f,t1,t2,...] | 通过组合 最低层元素构造广义外积 |
| Outer[f,t1,t2,...,n] | 将第 n 层子列表作为分离元素处理 |
| Outer[f,t1,t2,...,n1,n2,...] | 将 中的第 层子列表作为分离元素 |
| Inner[f,t1,t2,g] | 使用 的最低层元素,构造广义内积 |
| Inner[f,t1,t2,g,n] | 将第一个张量的指标 n 与第二个张量的第一个指标合并压缩 |
将张量的某个列表作为分离的元素处理.
| Out[28]= |  |
| Out[29]= |  |
展平矩阵块.
这里是一个矩阵块(一个矩阵的矩阵,这可以看成是齐边地放在一个大的矩阵中的一些块).
Out[30]//TableForm= |
| |  |
Out[31]//TableForm= |
| |  |