在
Mathematica 的后续版本中引入了与本教程内容相关的附加功能. 最新信息请见
矩阵和线性代数.
Mathematica 中的线性代数引言
Mathematica 具有大量的函数以支持线性代数运算并将它们融入体系. 它可以与向量、矩阵和张量合作,这些量可以包含机器精度浮点数、任意精度浮点数、复数浮点数、整数、有理数和一般的符号化数量. 线性代数运算支持包含所有这些不同类型输入的矩阵.
Mathematica 支持稠密矩阵和稀疏矩阵. 有几节教程着重于稠密矩阵. 稀疏矩阵被收集在
"稀疏矩阵的运用". 一般而言,所有在稠密矩阵的操作能以同等的方式用于稀疏矩阵.
Mathematica 中的矩阵用列表表示. 它们可以直接用
Mathematica 提供给列表的符号{ } 来进行输入.
| Out[1]= |  |
| Out[2]= |  |
| Out[3]= |  |
| Out[4]= |  |
| Out[5]= |  |
Out[6]//MatrixForm= |
| |  |
由于矩阵是表示线性方程组的有效方式,因此它们在计算中的许多领域都很重要. 许多计算机应用能够有效操控数组因而也能工作于矩阵. 然而,
Mathematica 也能直接与矩阵代表的线性方程组合作. 这里,一个矩阵乘以一个未知向量而形成了一个方程组.
| Out[8]= |  |
这个方程组能够用代数方程求解程序
Solve 解出.
| Out[9]= |  |
另外,方程组的矩阵表示可以直接使用
LinearSolve 命令求解.
| Out[10]= |  |
矩阵与其所代表的线性方程组之间的转换往往能有助于理解基本原理. 对于某些特殊问题的解决使用两种方式中的其中一个也可能是一种非常有用的方式.
张量和数组
矩阵含有两个指标,用于标记每条输入. 按照惯例,当矩阵以表格形式写出时,这些指标值用于标记行和列. 广义的矩阵含有的指标数目可以大于或小于2. 通常一个没有指标的对象被称为标量,只含有一个指标的对象被称为向量. 含有大于两个指标的对象被称为张量,尽管标量、向量或矩阵也可以被称为张量.
Mathematica 适用于指标个数为任意个、列表结构与矩阵相同的张量. 列表的层数代表指标的个数. 例如,下面是一个向量.
| Out[1]= |  |
| Out[2]= |  |
下面是一个具有3个指标的张量,长度非别是2、3和4. 标记一个张量所需的指标个数可以被称作张量的阶.
| Out[3]= |  |
| Out[4]= |  |
应当指出,物理学中张量的概念具有额外的属性,超越了广义矩阵中元素的标记. 这在
MathWorld 中介绍张量时有更多的讨论. 在
Mathematica 中,术语张量用来指广义矩阵.
Mathematica 中的许多进行矩阵运算的函数同时也被推广到向量和张量中. 这个重要原理将多次在这个文档中展示,并涵盖在"
矩阵和张量运算".
作为 Mathematica 表达式的矩阵
Mathematica 中矩阵的一个重要特征是,它们是
Mathematica 表达式. 这意味着所有的用于
Mathematica 表达式的
Mathematica 命令同样可用与矩阵. 该原则同样适用于向量和张量.
Mathematica 中的所有对象都有一个共同的表达式结构,这大大增强了
Mathematica 编程的表述性. 这一原则(有时也称作
Mathematica 的基本原则)可能对于具有纯数字编程背景的人来说是抽象、枯燥或显而易见的,但以面向对象编程为背景的用户将认识到具有一个共同父对象的好处. 在这一节中将讨论这一原则的一些例子.
理解
Mathematica 表达式的一个重要途径是通过函数
FullForm. 它表明了
Mathematica 中表达式的细节安排. 在这个例子中,可以看到矩阵的树结构. 有一个外部节点
List;在
Mathematica 中,这被称作有一个
List 的头部. 外部节点有两个参数,每一个都有头
List;每一个都有三个整数参数.
Out[2]//FullForm= |
| |  |
矩阵表达式的头部可以通过函数
Head 进行检查.
| Out[3]= |  |
| Out[4]= |  |
| Out[5]= |  |
诸如
FullForm、
Head、
Length 和
Part 等
Mathematica 运算将适用于任何
Mathematica 表达式. 这是非常方便的,因为它意味着一套通用的编程结构将用于许多不同的应用中进行编程,而不仅局限于对线性代数. 同一技术应用于
Mathematica 中的许多领域,例如图形编程、文档编程和符号代数编程. 这些运算常被称作结构性运算,因为这些运算在
Mathematica 表达式的结构上发生效用,这与其它专用于线性代数的运算形成对照. 例如,函数
MatrixQ 专用于矩阵运算.
表达式的输入和输出
Mathematica 包含用于表达式输入和输出的命令. 它也含有许多具有特殊格式数据的 I/O 命令. 用于格式化数据的命令在"
导入和导出矩阵 "中进行评述. 这一节中将评述
Mathematica 中表达式的输入和输出命令.
Mathematica 中的
FullForm 的概念完全等同于在 Java 或 C# 中序列化对象的概念. 任何
Mathematica 表达式的
FullForm 都是该表达式的一个完全的指定. 将
FullForm 存入一个文件并将其再次读出将重新创建该表达式.
可以将通过命令
Put (其输入的快捷符号为

)作为将
Mathematica 表达式存入一个文件.
该文件的内容可以通过
FilePrint 进行检查.
可以用
Get (其输入的快捷符号为

)将该文件重新读入
Mathematica.
| Out[4]= |  |
在
Mathematica 中进行矩阵 I/O 的另一种途径是
MathLink. 这是一种进程间通信机制,对
Mathematica 不同进程间的通信尤其有用.
如果想要保存
Mathematica 中的工作以便日后恢复,使用
Put 和
Get 将矩阵存入文件是最有用的. 如果想要与其它应用交换矩阵,则以一般格式保存的数据更为有用,这将在"
矩阵的导入和导出"中介绍.
Mathematica 的设计原则
对线性代数的支持体现了
Mathematica 的重要设计原则.
- 它提供机器精度计算,其速度达到甚至超过了专门的机器精度数值应用软件的速度.
- 它提供任意精度的计算,足够有效解决重要类别的问题.
- 它集成了可以进行符号计算的机器和任意精度计算,使得 Mathematica 适用于许多不同的解决方案.
这些设计原则是
Mathematica 中线性代数函数设计的基础.