在我们的生活中,我们都希望我们最喜欢的操作系统中的计算器应用有更多的功能。决心较弱的人求助于 Excel 等替代工具,但真正的信徒知道,唯一适合数学家(或者只是想绘制一些三维图形的人)的工具是适当的计算机代数系统(CAS)。
CAS 的领域充满了不同的工具,从那些具有美学上令人愉悦的前端的工具,到那些简洁和斯巴达式的呈现与记事本媲美的工具。MATLAB 就是这样一个工具,服务于更多面向编码的人群,他们将数学视为编程学科的延伸。MATLAB 代表 MATrix LABoratory,它的名字暗示了它擅长什么。
对于那些在这些方面经验较少的人来说,CAS 本质上非常类似于典型的编程语言/IDE 组合,不同之处在于它面向计算、优化和其他高级数学事物,而编程语言通常无法提供这些东西。因此,CAS 通常使用解释语言,而不是编译语言。例如,它还为各种问题领域(数学、统计、计量经济学等)带来了丰富的库函数,以及渲染图形的工具。
MATLAB 恰好是一个高度模块化的系统。这意味着,不是只获得一个应用,而是获得核心的 MATLAB 安装,然后根据您的需求购买一个或多个工具箱。概括地说,这些工具箱分为三类:
- 科学 工具箱与数学、统计和优化相关。例如,这些工具可能包括支持符号微分的符号数学工具箱,或者给你——你猜对了——各种统计功能和工具的统计工具箱。
- 与特定问题领域或行业相关的工具箱,如航空航天、计量经济学或图像处理工具箱。
- 专门与计算相关的工具箱(即执行计算的方式),如并行计算工具箱或 MATLAB 编码器。
- SIMULINK ,一种用于建模和仿真的图形化编程语言。SIMULINK 与 MATLAB 紧密结合。
这本书涵盖了 MATLAB 的核心特性,包括基本的语言构造、矩阵操作和数据可视化。本书而非所涵盖的一个核心功能是 GUI 应用的创建;这更像是一个可视化的主题,最好与 MATLAB 本身提供的文档和示例一起使用。
我会不时提到各种工具箱,但公平地说,其中一些工具箱值得拥有自己的整本书,而且,正如费马所说,“这个空白处没有足够的空间。”
MATLAB 通常采用年字母方案进行版本控制,因此,例如,R2013a 发行号(这是本书使用的版本)表明发行发生在 2013 年上半年。MATLAB 在很多平台上都有,包括台式机/笔记本电脑平台(Windows、Mac 和 Linux)以及移动平台(Android 和 iOS)。
然而,MATLAB 的移动版本不是独立的——相反,这些应用要么连接到你的桌面 MATLAB 安装,要么连接到 MathWorks 云。
要将移动客户端连接到桌面安装,您需要使用一个名为 MATLAB 连接器的特殊工具(免费下载)。机器必须在网络上可用,并且必须运行一个 MATLAB 实例,连接器也应该运行。
MathWorks 还为移动客户端提供了一个称为 MathWorks 云的替代连接点。本质上,不是连接到自己的机器,而是连接到 MathWorks 托管的机器,在它自己的云中。这要求您在连接时提供您的帐户凭据,并且在您远离“本机”MATLAB 安装但仍需要完成一些计算的情况下非常有用。
无论您选择哪种移动选项,与正确的桌面安装相比,您的设施都是有限的。您将获得命令窗口编辑器(无文件编辑器)以及在移动设备上执行计算、渲染图形和保存图形的能力,仅此而已。您错过了全面的帮助、处理脚本的能力以及许多其他功能。
如果你在没有任何工具箱的情况下使用 MATLAB,它将无法支持你复杂的计算机基础设施,你将没有能力通过并行化循环或使用机器集群来提高性能。
这就是并行计算工具箱的用途。这个工具箱做两件事。首先,它允许您编写代码来支持并行计算,允许您利用本地机器上所有可用的内核和支持 CUDA 的 GPU,或者利用整个机器集群的能力。工具箱的另一个好处是,其他工具箱现在能够利用并行架构的能力来更快地执行计算。
但是,说到集群,您需要另一个名为 MATLAB 分布式计算服务器(MDCS)的产品。这是您需要在机器集群上执行计算的服务器平台,就像多核设置一样,现有的工具箱能够利用集群的资源进行分布式计算。请注意,要利用 MDCS,您还需要安装并行计算工具箱。
一旦你完善了你的计算,你可能想要在生产系统上运行它们。在这种情况下,MATLAB 有一套全面的工具箱,用于各种集成选项,具体取决于您与外部世界交互的首选风格。以下是你的选择:
- MATLAB 编译器可以让你编译运行完全用 MATLAB 编写的应用。请注意,MATLAB 基础设施的一部分是其构建用户界面的能力,因此您不局限于命令行应用。这使得计算可以在任何平台上进行,而不必安装 MATLAB。请记住,代码的性能不会超过桌面 MATLAB 安装。
- MATLAB Builder 让你把你的 MATLAB 代码包装成一个. NET、COM 或者 Java 组件或者一个 Excel 插件。这样,您可以继续使用您最喜欢的编程语言,同时在必要时与组件包装器交互。
- 电子表格链接让你从 Excel 链接到 MATLAB。例如,这允许你在 Excel 中访问 MATLAB 的变量。
- MATLAB Coder 是一个可以让你直接把 MATLAB 代码转换成 C 代码的包。这允许您在任何平台上编译和运行作为普通 C 应用一部分的代码,包括 MATLAB 本身不支持的平台。
说到计算性能,用 MATLAB 你的结果可能会有所不同。当使用经过微调和优化的算法时,您的代码可以像使用 C++编写代码一样快(或者如果您利用并行工具箱,则速度会更快)。然而,在许多情况下,尤其是在使用 MATLAB 的对象模型时,您可能会遇到性能明显不如使用现代编译编程语言的情况。和所有的事情一样,最好检查一下你的特定计算和端口,如果必要的话。
MATLAB 是商业产品。其他免费使用的系统提供了类似于 MATLAB 的功能(至少在核心安装方面)和一个在很大程度上与 MATLAB 兼容的语法。两个这样的系统是 SciLab 和 GNU Octave。
本书中的大多数例子都与所述系统兼容,除了使用某些特定的工具箱。然而,值得注意的是,在某些情况下,语法确实略有不同——例如,MATLAB 使用randn
生成正态分布的数字,而 SciLab 使用带有附加n
参数的rand
。
不同的 MATLAB 兼容实现之间的差异太多,无法提及,会分散本书读者的注意力。因此,虽然这本书专门使用了 MATLAB 语法,但绝大多数示例应该在 Octave(旨在完全符合 MATLAB)和类似系统(如 SciLab)上运行良好。如果出现问题,只需检查文档中需要进行的调整,以使代码运行
在我们开始冒险之前,有一点我想说一下。当数学家们没有给他们的图贴上标签时,他们通常可以期待任何事情,从手腕上的一击到降级。在准备这份手稿的过程中,我也犯过这种罪行,但理由很充分:MATLAB 的轴、图例和标题渲染的质量还有很多不足之处,尤其是渲染成图像格式时。这有望在未来得到改善。
好了,说够了。点燃 MATLAB,让我们开始探索吧!