在 Wolfram 语言的后续版本中引入了与本教程内容相关的附加功能. 最新信息请见矩阵和线性代数.

矩阵类型

在 Wolfram 语言中,矩阵可以由各种不同类型的对象构建. 它们可以包含机器精度的实数和复数浮点数,任意精度的实数和复数浮点数,整数,有理数和一般的符号值. 这一教程考察的是 Wolfram 语言所支持的各种不同类型的矩阵.

Wolfram 语言中的数

对 Wolfram 语言所支持的不同数值类型进行概述将有助于理解 Wolfram 语言能够操作的不同类型的矩阵. 这一节将仅是对 Wolfram 语言中的数进行概述;更多信息可以在"数"中获得.

机器尺寸Integer由机器硬件表示的整数
Integer任意长度精确整数
Rationalinteger/integer (分式) 最简形式
机器尺寸Real由机器硬件表示的近似实数
Real近似实数,精确度可任意指定
Complex形如 number+numberI 的复数
AlgebraicNumber代数方程的根
精确数值表达式数字和数学函数的组合
无穷大和例外各种特殊数值

Wolfram 语言中的数值内在类型.

Wolfram 语言提供了一个代数系统,把所有这些不同的数值类型统一在一起. 在很多时候没有必要知道存在两种不同类型的整数,因为这两种类型混合在一起. 例如,整数 由机器硬件表示. 如果求这个数的十次方,其结果将由软件表示:
下一个例子说明的是机器精度浮点数的指数运算如何返回一个任意精度数:

这些例子表明,Wolfram 语言算术运算能够限制下溢和上溢从而由机器数值向软件数值切换. 尽管如此,Wolfram 语言 还是尽可能使用机器硬件功能,因此其计算速度可以非常快.

精确数值与近似数值

Wolfram 语言的一个重要问题是,它将精确数值与近似数值区别对待. 这样做是为了对 Wolfram 语言的符号计算功能进行支持. 这个例子对函数 Sin 的参数分别取整数和实数时的计算进行比较:

这里说明的是,例如 Sin 等数学函数保留了其输入的性质. 如果它们的参数是精确形式,则结果也将是精确形式. 如果它们的参数是近似形式,则结果也将是近似形式. Wolfram 语言的这个特征对于系统保持为一个符号系统是至关重要的,但却与纯数值环境下的运算相左. 例如,在 C 或 Java 等很多语言中,等价计算将强制整数类型转化为 double 类型,结果将是一个近似数值.

这一区别意味着在进行数字的操作时,用户应该比在其它语言中更注意这些类型的不同.

可以使用 N 计算一个精确数的数值近似:

混合模式算术

另一个重要问题是关于多于一个参数的函数的运算. 这种情形时,Wolfram 语言将取输入的最低精确度. 例如,下属混合计算全部返回近似结果:
当输入包括了由软件所表示的一个精确整数时,该原理同样适用:

Wolfram 语言中的矩阵

Wolfram 语言中的矩阵可以包含很多不同类型的元素.

例如,这个矩阵中的每个元素均是机器精度近似实数:
这个矩阵由复数组成,各元素的实数和虚数部分均为机器精度近似实数:
这个矩阵包含20位精度的近似数:
这个矩阵包含整数:
这个矩阵包含有理数:
这个矩阵包含复数,其实数和虚数部分均为整数:
这个矩阵包含多项式:

这些不同类型的矩阵可以根据与之计算的技术类型分成不同的类别.

机器精度Real标准数值技术
机器精度Complex
任意精度Real任意精度数值技术
任意精度Complex
Integer符号代数技术
Rational
精确Complex
符号式

Wolfram 语言中不同类型的矩阵.

这是简要回顾的三个不同类别.

标准数值技术

在 Wolfram 语言中, 涉及机器精度实数 Real 和机器精度复数 Complex 的矩阵计算通过标准数值技术实现. 在很多时候的计算涉及到优化程序库,其中许多程序库在"软件参考"中有介绍.

许多计算的一个重要目标是是匹配和超越任何致力于机械精度数数值的软件包的性能. 正如 "Wolfram 语言的设计原理" 所述,这与 Wolfram 语言的设计目标保持一致. 对于线性代数计算,Wolfram 语言利用大量的先进技术,其中一些在"线性代数计算的性能"中来讨论.

任意精度数值技术

在 Wolfram 语言中,涉及任意精度实数 Real 和任意精度复数 Complex 的矩阵计算通过特殊数字库实现. 这些库改编自标准库,因而可以进行任意精度计算.

更多信息可以在"任意精度矩阵"一节中获得.

符号代数技术

涉及精确数值和一般符号技术的矩阵计算通过计算机代数技术实现.

为数值矩阵提供的所有计算也可用于符号矩阵. 这符合符号和数值计算相结合的设计目标.

混合模式矩阵

本节介绍的是如果输入矩阵包含不同类型项的混合会发生什么情况.

如果矩阵包含任何非数字项(或不能转换成数字的项),矩阵将被作为符号矩阵处理,其计算将通过符号技术进行. 在下面的例子中,x 的存在使矩阵成为符号型,结果是一个符号矩阵:
如果矩阵仅包含数字(或可转换为数字的项),计算将按照最低精度进行. 因此,在下面的例子中,机器精度近似数1.的存在意味着输入矩阵将被转换为机器精度数值,计算将通过机器精度技术实现:
在这个例子中,最低精度是一个20位精度的数. 因此,输入矩阵将被转换为精确度为20的数值,并通过任意精度技术进行计算:
生成矩阵的各项含有20位精度:
请注意,机器精度算低于任何任意精度数值. 在这个例子中,因为有一个机器精度数值,输入矩阵将被转换为机器精度数值,并通过机器精度技术进行计算:
结果是一个机器精度矩阵:
意识到这些区别非常重要. 例如,如果输入矩阵由整数组成,计算将使用符号代数技术并返回一个精确精度的结果:

在其它一些计算系统中,一个整数输入矩阵将被转换为一个浮点矩阵. Wolfram 语言并没有这样做,以便它能够支持符号计算. 然而,这意味着用户需要认识到这些不同. 这是因为符号计算所需的时间与采用机器精度技术进行计算所需的时间可能会显著不同;在许多情况下,符号计算需要更长的时间.

复数矩阵

定义 Wolfram 语言中复数矩阵的方式与定义其它类型矩阵(如实数类型)的方式完成一致. 用于实数矩阵的所有函数同样适用于复数矩阵.

关于复数矩阵的一个特殊的细节是,某些涉及实数矩阵转置的线性代数计算涉及到复数矩阵的共轭转置. 这方面的一个例子是 Cholesky 分解. 对于一个实对称正定矩阵,其定义如下所示:
对于一个复数 Hermitian 正定矩阵,其定义如下所示:

任意精度矩阵

Wolfram 语言任意精度计算支持一种被称作有效算数的算术形式. 有效算数的基本思想是,把每个数字当作近似,其误差通过精确度指定. 当数字在计算中被使用时,结果的精确度可以根据函数性质而不同. 例如,下面是一个30位精度的数:
现在计算这个数在函数 Sin 中所对应的值:
可以看到结果的精度小于30位:
在 Wolfram 语言中,线性代数计算通常不使用有效算术. 这些计算在固定精确度下进行,计算以固定位数进行,不对单独运算中的误差进行追踪. 错误追踪的进行是在算法的水平上,例如在当一个线性方程组的解可能不正确时发出警告:
计算得到的逆矩阵全部由精确度为20位的数值组成: