MATLAB 进化论讲座后记

10月9号(周二)上午,我在大礼堂听了 Cleve Moler 的题为 "Evolution of MATLAB"(MATLAB 进化论) 的讲座。 Cleve Moler 是 MATLAB 第一版的作者,MathWorks 公司的创始人之一。 今年他已经 73 岁了,十年前他来过清华一次。 这次中国之行他会走五个城市做七次报告。 我的总体感觉是他是一位谦逊幽默的老人,他的讲座使大家不时发出笑声。 他本人对数值分析、计算机编程很有兴趣且很在行,对商业营销并不很关心。 (他把商业成功归功于公司的其他人,包括 Jack Little 等,称自己很幸运。)

IMG_20121009_100748

讲座内容

从讲座题目就可以看出,讲座的内容主要是历史。 Moler 在讲座中回顾了他的大学经历以及后来 MATLAB 创始发展的历史。 最初他讲述了几个对他影响很大的导师(mentor)。 他提到了1951年,英国国家物理实验室的 J. H. Wilkinson 建造的计算机 Pilot Ace,这是世界上最早的计算机之一。 Moler 在 Caltech 读的大学(本科),这期间他的导师是 John Todd。 他提到这时在学校计算机上编程写的是机器语言,程序存储使用的是 纸质磁带(paper tape)。 之后 Moler 到 Stanford 读博士(PhD),这时他的导师是 George Forsythe, 此时是 1960 年代。这期间他们的计算机是 DEC 的 PDP-1。 一个字符终端下的游戏“星球大战”(Space War)非常流行,以至于 实验室贴出通知规定几点到几点不准玩这个游戏。(No Space War from xxx to yyy.) Moler 的博士论文中举例中有一个 L 型的细胞膜, MATLAB 标志(logo)就是从它演化过来的。

IMG_20121009_101950

这时候 C 语言还没有出现,大家使用 Algol 语言来编程。 这时候 Forsythe 和 Moler 出版了一本数值计算方面的图书, 书中附带了程序源代码,这可谓一个首倡。 Moler 表示虽然今天已经没有了 Algol 的编译器,书中的程序无法 直接在现在的机器上跑,但书中的算法对于想了解 MATLAB 核心的人 来说是很有参考价值的。

在 1970 年代出现了两个用于数值计算的函数库,Moler 是两个库的作者之一。 其中 1976 年出现了 EISPACK,它是一个 Fortran 语言编写的库。 名称中 E 代表它是用于解决特征值问题的。 1979年出现了 LINPACK,虽然线性问题比特征值问题要简单一些,但 准备阶段花费了更多时间。 LINPACK 的用户指南一书的封面是 LINPACK 几个字母组成的矩阵。 (Moler 说如果在场听众觉得讲座无聊的话,可以试试求出这个矩阵的逆。) 这本书做了一个开创性的工作,它在附录 2 中给出了一张基准测试(benchmark) 的表格,列出了他们在一些机器和编译器组合下 LINPACK 的执行时间。 如今 LINPACK 是评测超级计算机性能的基准测试程序之一。

在 1977 年,Moler 编写出了 MATLAB 的第一个版本。 编写语言主要是 Fortran。 这个版本共有80个命令,其中有一个值得一试的 why 命令。 Moler 表示他最初编写 MATLAB 的目的就是为了方便自己的学生去调用 数值计算的函数库,当时他是新墨西哥大学的教授。

IMG_20121009_103202

在 Stanford 访问授课时,Moler 让他的学生用 MATLAB 做一些作业, 他发现学数学和计算机科学的人对它并不特别感兴趣, 但是控制系统等工程领域的学生很喜欢它。 1980年代初期出现了一些公司,推出了在 MATLAB 基础上做的产品, 以用于特定的工程领域,如 MATRIX X 和 Ctrl C 等。 在PC机出现后 Jack Little 意识到了 MATLAB 的商业价值, 和 Moler 以及 Steve Bangert 共同创办了 MathWorks 公司。 MATLAB 被使用 C 语言重写。 值得一提的是,公司创办后最初的五年里,Moler 并不是 MathWorks 的 全职雇员,而是一个学者顾问(advisor)。 (Moler 还讲 Jack Little 的模样一直没有变,都是那么帅……)

之后 MATLAB 在工程界得到了广泛使用,也取得了商业上的成功。 MathWorks 公司的规模也越来越大,在初期公司人数随年份是 指数级增长的(对数 y 坐标下是线性),不过到一定规模后,增速 就放缓了,现在的员工规模是几万人,年收入是 $700M+。

谈到 MATLAB 的本质(essence),Moler 提到了 MATLAB 实质是基于数组的(Array-based)编程语言。 它并没有设计为一个通用的编程语言,而是为了数值计算提供一个 简单的工具。此外 MATLAB 始终努力给用户提供交互式环境, 使得方便易用。另外还有绘图能力等。

如今的 MATLAB 代码中使用到的编程语言有 C, Java, Fortran,还有 MATLAB 本身(常见于各种工具箱)。另外 Simulink 提供了图形化建模工具。 讲座中,Moler 提到 MATLAB 的工具箱都是由 MATLAB 语言编写的, 它们的源码都是可以看到的。 不过 MATLAB 的核心不是开源的。 所以 Moler 说 MATLAB 有一半是开源的。

问答环节

第一个问题涉及 MATLAB 和 Mathematica/Maple 等的对比, Moler 称 Mathematica 他也在用,他发现 Mathematica 是一个 很统一、优美的软件,它的作者 Wolfram 也非常聪明。 接着 Moler 说 MATLAB 强在有众多工具箱,在众多工程应用领域被广泛使用。 而 Mathematica 就没有在工程领域中流行。Moler 没有谈 Maple, 而事后问及提问者 vuryleo,得知他主要想问的事 MATLAB 的符号计算功能。 查阅一些资料可知早先版本的 MATLAB 中的符号计算功能利用的就是 Maple 引擎,不过现在已经更换为 muPAD

第二个问题问到 MATLAB 在处理实际(pratical)复杂系统时比较吃力。 Moler 坦言这的确是个问题。MATLAB 被设计为一门简单的语言, 在面对大型问题时代码容易变得复杂难懂,MathWorks 的他们也在思考问题的答案。

第三个提问者将“数学是被发明的(invented)还是被发现的(discovered)” 的问题抛给了 Moler。他在回答中一开始表示自己也没有思考过这个问题。 之后他结合 MATLAB 中的一些运算符的记法谈了下自己的思考。 他说像反斜线这个左除运算符可以说是发明的,因为之前并没有这个记法, 但它其实很符合直观,使用这个符号很自然,说是被发现的也有道理。

后面的问题问到 MATLAB 的目标以及未来的应用平台,Moler 表示他们在努力让手机等手持设备可以使用 MATLAB。因为这些设备处理器 性能有限,所以 MATLAB 的计算任务会放在云端完成。Moler 指出 目前的实现中交互做的并不理想,结果会以图片方式呈现。 MATLAB 云计算实现中如何更好地和用户交互,还有云计算下的商业模式, 都是有待考虑和解决的问题。Moler 还表示 MATLAB 未来发展的 另一方面是巩固在不同领域的应用程度。

活动结束后,有同学还到台上近距离围观了 Cleve Moler,我也凑了上去。 期间有人拿书求签名,求合照等不去细说了。 有同学趁机问到中国的版权问题 Moler 如何看待,Moler 回答说 这也不只是 MATLAB 面临的问题,微软也有同样的问题。 Moler 说他们会力图使高校和企业购买他们的产品,这是主要的策略和方式。 我在 Moler 离开前还找机会问了他如何看待 Octave、Sage 等开源的数值计算软件。 Moler 表示他没有使用过它们,这些软件更像是一些样例(sample), 它们缺乏像 MATLAB 中众多的工具箱,所以不太可能和 MATLAB 并驾齐驱。

附注

一些讲座相关的照片可以在 这个 flickr 相片集看到。 Moler 个人的更多介绍参见这里MathWorks 上也有 Moler 写过的有关 MATLAB 起源的文章。

One thought on “MATLAB 进化论讲座后记

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s