矩阵类型
在 Wolfram 语言中,矩阵可以由各种不同类型的对象构建. 它们可以包含机器精度的实数和复数浮点数,任意精度的实数和复数浮点数,整数,有理数和一般的符号值. 这一教程考察的是 Wolfram 语言所支持的各种不同类型的矩阵.
Wolfram 语言中的数
对 Wolfram 语言所支持的不同数值类型进行概述将有助于理解 Wolfram 语言能够操作的不同类型的矩阵. 这一节将仅是对 Wolfram 语言中的数进行概述;更多信息可以在"数"中获得.
| 机器尺寸Integer | 由机器硬件表示的整数 |
| Integer | 任意长度精确整数 |
| Rational | integer/integer (分式) 最简形式 |
| 机器尺寸Real | 由机器硬件表示的近似实数 |
| Real | 近似实数,精确度可任意指定 |
| Complex | 形如 number+numberI 的复数 |
| AlgebraicNumber | 代数方程的根 |
| 精确数值表达式 | 数字和数学函数的组合 |
| 无穷大和例外 | 各种特殊数值 |
int1 = 2^10int1^10Exp[-6000.]这些例子表明,Wolfram 语言算术运算能够限制下溢和上溢从而由机器数值向软件数值切换. 尽管如此,Wolfram 语言 还是尽可能使用机器硬件功能,因此其计算速度可以非常快.
精确数值与近似数值
Sin[ 5]Sin[5.]这里说明的是,例如 Sin 等数学函数保留了其输入的性质. 如果它们的参数是精确形式,则结果也将是精确形式. 如果它们的参数是近似形式,则结果也将是近似形式. Wolfram 语言的这个特征对于系统保持为一个符号系统是至关重要的,但却与纯数值环境下的运算相左. 例如,在 C 或 Java 等很多语言中,等价计算将强制整数类型转化为 double 类型,结果将是一个近似数值.
这一区别意味着在进行数字的操作时,用户应该比在其它语言中更注意这些类型的不同.
exact = Sin[5];
inexact = N[exact]混合模式算术
5 + 6.7Sin[5] / 1.51.5 2^100Wolfram 语言中的矩阵
{{1.5, 2.7}, {3.1, 4.3}}//MatrixForm{{1.5 + 4.5I, 2.7 + 4.I}, {3.1 + 2.1I, 4.3 + 5.1I}}//MatrixForm{{1.5`20, 2.7`20}, {3.1`20, 4.3`20}}//MatrixForm{{1, 2}, {3, 4}}//MatrixFormTable[1 / Random[Integer, {3, 10}], {4}, {4}]//MatrixForm{{1 + 4I, 2 + 2I}, {3 + 1I, 4 + 11I}}//MatrixFormTable[ Sum[i x^i, {i, 0, 2 + Mod[m, n]}], {m, 4}, {n, 4}]//MatrixForm这些不同类型的矩阵可以根据与之计算的技术类型分成不同的类别.
标准数值技术
在 Wolfram 语言中, 涉及机器精度实数 Real 和机器精度复数 Complex 的矩阵计算通过标准数值技术实现. 在很多时候的计算涉及到优化程序库,其中许多程序库在"软件参考"中有介绍.
许多计算的一个重要目标是是匹配和超越任何致力于机械精度数数值的软件包的性能. 正如 "Wolfram 语言的设计原理" 所述,这与 Wolfram 语言的设计目标保持一致. 对于线性代数计算,Wolfram 语言利用大量的先进技术,其中一些在"线性代数计算的性能"中来讨论.
任意精度数值技术
在 Wolfram 语言中,涉及任意精度实数 Real 和任意精度复数 Complex 的矩阵计算通过特殊数字库实现. 这些库改编自标准库,因而可以进行任意精度计算.
更多信息可以在"任意精度矩阵"一节中获得.
符号代数技术
涉及精确数值和一般符号技术的矩阵计算通过计算机代数技术实现.
为数值矩阵提供的所有计算也可用于符号矩阵. 这符合符号和数值计算相结合的设计目标.
混合模式矩阵
本节介绍的是如果输入矩阵包含不同类型项的混合会发生什么情况.
mat = {{1., Sin[4]}, {1, x}};
Inverse[mat]mat = {{1., Sin[4]}, {1, 2}};
Inverse[mat]mat = {{1.`30, 1.`20}, {1, 2}};
Inverse[mat]Precision[%]mat = {{1.`5, 1.`20}, {1.5, 2}};
Inverse[mat]Precision[%]mat = {{1, 3}, {4, 2}};
Inverse[mat]在其它一些计算系统中,一个整数输入矩阵将被转换为一个浮点矩阵. Wolfram 语言并没有这样做,以便它能够支持符号计算. 然而,这意味着用户需要认识到这些不同. 这是因为符号计算所需的时间与采用机器精度技术进行计算所需的时间可能会显著不同;在许多情况下,符号计算需要更长的时间.
复数矩阵
定义 Wolfram 语言中复数矩阵的方式与定义其它类型矩阵(如实数类型)的方式完成一致. 用于实数矩阵的所有函数同样适用于复数矩阵.
mat = {{11., 3.}, {3., 5.}};
matG = CholeskyDecomposition[mat];
Transpose[matG].matG//MatrixFormmat = {{11., 3. + 2.I}, {3. - 2.I, 5.}};
matG = CholeskyDecomposition[mat];
Conjugate[Transpose[matG]].matG//MatrixForm任意精度矩阵
num = N[ Pi + 10^-20, 30]Sin[num]Precision[%]mat = Table[Random[ Real, {-1000., 1000}, 20], {4}, {4}];
Inverse[mat]Min[Map[ If[# == 0, Accuracy[#], Precision[#]]&, %, {-1}]]相关技术笔记
-
▪
- Wolfram 语言中的线性代数 ▪
- 矩阵与张量运算 ▪
- 稀疏数组的运用 ▪
- 矩阵计算 ▪
- 矩阵类型