Linguista

科学计算的民主化先驱:Cleve Moler的学术生平、数理思想与MATLAB的演进史

图像

2026年5月20日,MATLAB 创始人、MathWorks 联合创始人兼首席数学家 Cleve Moler 在家中去世,享年86岁。这个消息让科学计算领域失去了一位关键人物。他最初只是想让学生不用再为调用 Fortran 数值库而折腾,却由此开启了 MATLAB 的历史,也改变了几代工程师、科学家与学生理解矩阵、建模和计算的方式。

图像

1. 学术启蒙与早年成长:从犹他荒野到斯坦福的数理征途

克里夫·莫勒(Cleve Barry Moler)的一生是现代数值分析与科学计算发展史的缩影 [1]。1939年8月17日,莫勒出生于美国犹他州盐湖城的一个新闻工作者家庭,其父亲在联合普法社(United Press)工作了二十五年,曾作为战地记者参与第二次世界大战后期的报道,后担任犹他州奥格登市地方报纸的编辑 [2, 3]。在充满理性思辨的家庭环境中,莫勒在高中时期便展现出极强的学术天赋,被同伴视为极具智慧但社交活跃度较低的典型杰出青年 [3]。1957年高中毕业时,他仅申请了加州理工学院和麻省理工学院,并双双获得录取,最终他选择进入加州理工学院攻读数学学士学位 [2, 3]。

在加州理工学院求学期间,莫勒于1959年通过一台 Burroughs 205 Datatron 真空管计算机首次接触到了电子计算 [2, 3]。这台计算机当时甚至还没有配备编译器,程序必须以绝对机器码编写并记录在纸带上 [2, 4]。在1961年和1962年的暑期,莫勒在喷气推进实验室(JPL)为 Charles Lawson 工作,借此机会首次接触并掌握了 Fortran 语言 [1, 2]。在学术方向的选择上,加州理工学院的数值分析先驱约翰·托德(John Todd)教授起到了关键的引导作用 [3, 4]。莫勒曾在高等微积分课程中仅获得 B- 成绩,却在托德教授的数值分析课程中获得了 A+,这一鲜明的对比促使他下定决心转向矩阵论与计算科学的研究 [5]。

1961年获得学士学位后,在托德教授的极力推荐下,莫勒前往斯坦福大学跟随乔治·福赛斯(George Forsythe)攻读数学博士学位 [1, 3, 4]。福赛斯当时正在筹建斯坦福大学计算机科学系——该系于1965年1月正式成立,成为全球最早的计算机科学学术重镇之一,而莫勒也在该系成立之初担任了临时讲师 [2, 4, 5]。1965年,莫勒完成了题为《拉普拉斯算子特征值的有限差分法》(Finite Difference Methods for the Eigenvalues of Laplace's Operator)的博士论文 [4]。在完成博士学位后,莫勒前往瑞士苏黎世联邦理工学院(ETH)进行了一年的博士后研究,随后于1966年加入密歇根大学数学系任教,正式开启了长达近二十年的大学教学生涯 [1, 2]。

图像

2. 数值代数软件化的技术演进:从 Wilkinson 规范到 LINPACK/EISPACK 的诞生

在现代数值线性代数发展史中,算法的理论研究与计算机程序库的落地之间曾存在巨大的鸿沟。20世纪50年代在英国国家物理实验室(NPL),詹姆斯·威尔金森(James H. Wilkinson)与同事利用图灵设计的 Pilot ACE 计算机进行矩阵计算时,为了解决一个 18 阶线性方程组,使用台式手摇计算器花费了两周的时间,这一艰辛的过程直接促使了自动计算机算法研究的诞生 [4, 10]。威尔金森随后成为全球数值线性代数领域的绝对权威 [4, 10]。同时,美国国家标准局在洛杉矶加州大学(UCLA)设立的数值分析研究所(INA)聚集了福赛斯、托德等学者,利用 SWAC 计算机开展了早期矩阵计算工作 [4, 5, 11]。

这些早期探索在1964年著名的 Gatlinburg 数值代数会议上形成了合力,威尔金森、福赛斯、托德等六位组委会成员对后续计算软件的标准化产生了深远的影响 [4]。1967年,福赛斯与莫勒合著出版了具有里程碑意义的矩阵计算教科书,书中包含了用 Algol、Fortran 和 PL/I 编写的求解线性方程组的实用程序,被计算机协会(ACM)列为早期计算机科学的奠基性文献 [4]。在此期间,威尔金森及其同事在《数值数学》(Numerische Mathematik)杂志上发表了一系列使用 Algol 60 语言编写的矩阵算法论文,并于1971年由威尔金森和 reinsch 整理出版为《自动计算手册·第二卷:线性代数》,莫勒也参与了该手册的编辑工作 [4, 11, 12]。

为了将这些优秀的 Algol 算法转化为美国科研人员能够直接使用的生产力工具,阿贡国家实验室在国家科学基金会(NSF)的资助下启动了高品质数学软件研制项目 [4, 12]。研究人员将威尔金森手册中的 Algol 代码翻译为 Fortran 语言,分别于1971年和1976年发布了第一版和第二版 EISPACK 库,用于求解矩阵特征值问题 [4, 12]。随后在1975年,莫勒与杰克·东加拉(Jack Dongarra)、皮特·斯图尔特(Pete Stewart)、吉姆·邦奇(Jim Bunch)共同向 NSF 申请了另一个研究项目,旨在研发一套专门用于求解线性方程组的 Fortran 软件库,这便是著名的 LINPACK(Linear Equation Package) [4, 12]。该软件包包含4种数值精度下的44个子程序,其手册于1979年正式出版 [4, 12]。

有趣的是,莫勒后来回忆道,从科研资助的角度来看,LINPACK 和 EISPACK 项目实际上是“失败”的 [12]。因为他们向 NSF 申请资助的初衷是探究“生产、测试和分发高品质数学软件的方法论、成本和资源消耗”,但最终他们没有撰写任何关于方法论研究的学术论文,而是直接交付了高度成熟的软件实体 [12]。这种以“交付高质量实用代码”代替“纯理论报告”的务实作风,不仅确立了 Fortran 代码库在数值计算领域的统治地位,也为莫勒后续开发面向教学的交互式接口埋下了伏笔 [4, 12]。

3. 经典 Fortran MATLAB 的诞生:解决教学痛点的矩阵计算器

在20世纪70年代末,莫勒在新墨西哥大学讲授线性代数和数值分析课程 [11, 12]。尽管此时 LINPACK 和 EISPACK 已经代表了数值线性代数的最高水平,但在教学实践中,学生想要使用这些库却面临着极其繁琐的工程障碍 [1, 12]。当时学校的计算资源集中在中央大型机上,学生必须通过远程批处理终端,反复经历“编辑代码-编译程序-链接库文件-加载运行-执行输出”的漫长循环,仅仅是为了验证一个简单的矩阵乘法或求逆运算 [12, 13]。

为了让学生免于编写繁琐的 Fortran 包装代码,莫勒决定设计一个简单的交互式接口 [12, 13]。他研读了尼克劳斯·维尔特(Niklaus Wirth)关于编译原理的著作,利用 Fortran 语言实现了一个简单的编程语言解析器,这便是经典 MATLAB(Historic MATLAB)的起源 [4, 12]。最初的 MATLAB 完全是一个业余爱好项目,既没有外部资金支持,也没有任何商业计划书,其唯一的数据类型就是“复数矩阵” [12, 13]。

经典 MATLAB 在功能设计上极为克制,初版仅包含71个预建的保留字与函数 [12, 13]。该版本没有任何编程语言所具备的控制流结构,不支持自定义函数,不提供工具箱,也无法绘制图形,甚至无法直接求解微分方程或进行快速傅里叶变换(FFT) [12, 13]。如果用户想要扩展其功能,必须直接修改 Fortran 源代码,手动编写一个新的 Fortran 子程序,将其函数名注册到解析表中,然后重新编译整个 MATLAB 软件 [12, 13]。尽管如此,它极大地简化了矩阵输入与计算的交互逻辑,使得复杂的矩阵运算能够通过简单的命令行实时呈现 [4, 13]。

1979年2月,莫勒在加州蒙特雷的美国海军研究生学校首次向公众展示了这一软件 [9]。同年秋季,他前往斯坦福大学担任客座教授,并在讲授研究生数值分析课程(CS237a)时引入了经典 MATLAB [14]。在这一过程中,不同专业背景的学生对 MATLAB 展现出了截然不同的态度:

莫勒在访问其他高校时,会将 MATLAB 的磁带免费复制给当地的计算机中心 [9]。这种无偿的学术分发模式使得经典 MATLAB 迅速在全美高校的工程系中传播开来,积累了极具价值的早期用户群体 [9, 15]。

在1979年斯坦福大学的学生群体中,有一位攻读电气工程的研究生杰克·利特尔(Jack Little),他虽然没有直接选修莫勒的课程,但通过朋友接触到了经典 MATLAB [14]。利特尔立即意识到这一工具在控制系统设计中的巨大潜力,并将其引入自己的日常咨询工作中 [13, 14]。1981年 IBM 个人电脑(PC)的问世让利特尔产生了一个极具前瞻性的设想:微型计算机的硬件性能终将赶上昂贵的大型机,如果能将 MATLAB 移植到 PC 平台上,将会创造一个庞大的商业市场 [12, 14]。

图像

1983年,利特尔向莫勒提议共同成立公司,将 MATLAB 推向商业市场 [12, 14]。在获得莫勒的鼓励后,利特尔辞去了工作,购买了一台 Compaq 电脑,在斯坦福大学后山的一间小屋里,使用 C 语言对莫勒原有的 Fortran 代码进行了彻底的重写与功能拓展,其好友史蒂夫·班格特(Steve Bangert)也在业余时间加入该项目 [12, 14]。1984年,三人共同创立了 MathWorks 公司,并在同年12月的 IEEE 决策与控制会议上正式推出了 PC-MATLAB 1.0 版本 [1, 14]。1985年,麻省理工学院的尼克·特雷费森(Nick Trefethen)教授购买了首批10个拷贝,完成了 MATLAB 历史上的第一笔商业交易 [9]。

在重写过程中,利特尔与班格特将 MATLAB 从一个简单的计算器升华为一门功能完整的通用编程语言,并引入了多项奠定现代科学计算基础的技术特征 [13, 14]:

在 MATLAB 语言不断成熟的同时,工程界对于动态系统多物理场仿真和“免代码开发”的需求日益迫切 [16, 17]。MathWorks 由此开发了图形化模块化建模环境,最初命名为 Simulab,后于1992年在升级至 4.0 版本时正式更名为 Simulink [16]。Simulink 提供了基于方框图的交互式建模方式,能够将控制算法与物理动力学系统无缝结合,并支持直接从图形模型中自动生成工业级的 C 语言嵌入式代码,实现了“模型到硬件”的数字化连续流,在自动控制和数字信号处理领域引发了技术革命 [16, 17]。

在后续的演进中,MATLAB 团队展现出了极强的工程应变能力。在1994年英特尔奔腾处理器爆发 FDIV 浮点除法缺陷时,莫勒迅速在 MATLAB 软件层面编写了高可靠性的规避补丁,维护了其科学计算结果的精确性 [15]。

5. 数理深度的理论沉淀:L型薄膜偏微分方程、矩阵指数与并行计算

5.1 L 型薄膜问题与 MathWorks 标志

MathWorks 公司标志性的三维多面体,并不只是一个视觉设计,它和莫勒博士论文中研究过的 L 型薄膜问题有关 [4, 18, 19]。可以把这个问题理解成:一张薄膜被固定在一个 L 型边界上,当它振动时,会形成不同的空间形态。莫勒研究的,就是如何准确计算这些振动形态 [19, 20]。

图像

这个问题的难点在于,L 型区域有一个向内凹进去的尖角。这个角会让数学解在局部变得非常敏感,普通计算方法在这里容易产生较大误差 [19, 21]。如果直接用均匀网格去计算,角点附近的误差会拖慢整体收敛速度,也会影响最终图像的精度 [19, 21]。

莫勒的处理思路,是承认这个角点本身具有特殊结构,再采用更适合它的近似方法。换句话说,不是把这个区域当成普通平滑区域硬算,而是根据它的几何特点选择更合适的数值方法 [19, 21]。

MATLAB 中的 membrane 函数和 logo 函数都与这段数学历史有关。前者用于计算类似薄膜问题的振动形态,后者则把这种数学图像转化成了 MathWorks 著名的三维标志 [19, 21]。

5.2 矩阵指数计算与数值稳定性

1978年,莫勒与 Charles Van Loan 在《SIAM Review》发表了经典论文《计算矩阵指数的十九种 dubious 途径》 [6, 22]。这篇文章讨论的是一个科学计算中的基本问题:如何可靠地计算矩阵指数。

矩阵指数在常微分方程组、控制理论、动力系统和工程仿真中都很重要 [22, 23, 24]。如果一个系统的变化规律可以用矩阵描述,那么矩阵指数就能帮助计算这个系统随时间演化后的状态。

问题在于,数学上等价的方法,在计算机上未必同样可靠。浮点数会有舍入误差,矩阵本身也可能非常敏感。一个方法在纸面上看起来漂亮,真正放到计算机里,可能会出现误差放大、有效数字丢失,甚至得到不可信的结果 [24, 25]。

莫勒与 Van Loan 比较了多类方法,包括级数展开、特征值分解、Padé 逼近与缩放平方法等 [23, 24, 25]。他们真正强调的是:科学计算不能只看公式是否成立,还要看算法是否稳定、误差是否可控、计算成本是否合理 [24, 25]。

这也体现了 MATLAB 这类科学计算软件的核心价值。用户只输入一个简单命令,但软件背后必须替用户处理数值稳定性、算法选择和误差控制等复杂问题。

5.3 并行计算与“尴尬并行”概念的提出

在20世纪80年代中期,莫勒短暂离开高校,先后在英特尔超立方体部门(Intel Scientific Computers)和阿登特计算机公司(Ardent Computer)从事硬件平台上的高性能矩阵算法开发工作 [1]。当时英特尔推出了基于分布式内存的多处理器系统 iPSC/1(Intel Personal SuperComputer) [27, 28]。由于各个计算节点之间没有共享内存,数据的交换必须依赖显式的消息传递接口(如运行 Xenix 操作系统的 Cube 管理器与各个 80286 节点之间通过 gsend 和 gsum 等指令进行网络通信) [28]。

在这种紧耦合并行机上,像高斯消去法(LU 分解)这样的经典矩阵算法需要频繁地在消元步骤中寻找主元,并将 multipliers 向量广播给所有其他节点,通信开销往往成为制约多处理器加速比的严重瓶颈,这极大地受到了阿姆达尔定律(Amdahl's Law)的限制 [28]。

为了向同行形象地对比不同类型算法的并行化难度,莫勒于1986年前后创造性地提出了“尴尬的并行”(Embarrassingly Parallel,常被柔和地翻译为“极易并行”或“ Pleasingly Parallel”)这一术语 [1, 8, 29]。

该术语用来指代那些完全不需要花费任何精力进行通信设计,即可完美拆分为多个独立计算任务的工作负载 [8, 29]。在此类问题中,各个处理器节点之间没有任何数据依赖性,也无需交换中间计算结果(例如蒙特卡洛模拟、多场景独立仿真运行、GPU 图像像素渲染、面部识别大库比对等) [8, 29]。莫勒幽默地指出,在那些由于内在复杂性而使无数科学家束手无策的并行化大背景下,如果面对此类连最简单的任务分发都能获得完美加速比的问题,我们却还无法实现高效的并行算法,那将是一件令人感到“尴尬”的事情 [8, 29]。这一概念的提出极大地启发了后世在大规模云计算和网格计算中的任务调度设计 [8]。

6. 学术荣誉、教育遗产与历史总结

除了创立 MathWorks 公司,莫勒在其长达六十年的职业生涯中,始终没有中断对数值分析教育的投入 [6, 7]。他合著了四本关于数值方法的经典教科书,并在晚年致力于编写免费且配套完整 MATLAB 交互代码的在线电子图书,包括《使用 MATLAB 进行数值计算》(Numerical Computing with MATLAB)和《MATLAB 实验》(Experiments with MATLAB),将高深的数值线性代数理论以生动、直观的方式传递给全球的高中生与大学低年级学生 [1, 6, 30]。

莫勒在学术界与工业界的双重杰出贡献为他赢得了无数殊荣 [6]。他在1997年当选为美国国家工程院(NAE)院士,在2007至2008年间担任了工业与应用数学学会(SIAM)主席 [1]。2012年,IEEE 计算机学会授予他“计算机开拓者奖”(Computer Pioneer Award) [1];2014年,他荣获了计算机界的至高荣誉之一——IEEE 约翰·冯·诺伊曼奖章(IEEE John von Neumann Medal),以表彰他在计算机相关科学与技术领域的杰出成就 [1, 31]。2017年,他被授予计算机历史博物馆(CHM)Fellow,表彰其在数值计算和 MATLAB 编程语言领域的奠基性贡献 [2]。2026年4月,莫勒当选为美国国家科学院(NAS)院士,这是对他一生在科学计算和算法应用研究中所做贡献的终极肯定 [6, 32]。

2026年5月20日,在当选国家科学院院士后不久,这位睿智的数学家与软件先驱在其家中安详逝世,享年86岁 [1, 6]。莫勒的工作彻底改变了科学和工程研究的开展方式,使得复杂的矩阵运算、控制系统仿真和多学科工程设计不再是少数计算机专家的专利 [6]。通过将严谨的数值分析算法封装于极致简便的交互式语言之中,克里夫·莫勒不仅构建了 MathWorks 这一繁荣的商业帝国,更在全球范围内筑起了一座科学计算民主化与技术创新的不朽丰碑 [6, 32]。

参考文献

  1. Cleve Moler - Wikipedia, https://en.wikipedia.org/wiki/Cleve_Moler
  2. Cleve Moler - CHM, https://computerhistory.org/profile/cleve-moler/
  3. Cleve Moler SIAM oral history; 2004-03-08, http://archive.computerhistory.org/resources/access/text/2013/12/102746804-05-01-acc.pdf
  4. The Origins of MATLAB - MathWorks, https://www.mathworks.com/company/technical-articles/the-origins-of-matlab.html
  5. George Forsythe » Cleve's Corner - MATLAB Central Blogs, https://blogs.mathworks.com/cleve/2013/01/07/george-forsythe/
  6. Founders - Cleve Moler - MATLAB & Simulink - MathWorks, https://www.mathworks.com/company/aboutus/founders/clevemoler.html
  7. Founders - Cleve Moler - MATLAB & Simulink - MathWorks, https://la.mathworks.com/company/aboutus/founders/clevemoler.html
  8. Embarrassingly parallel - Wikipedia, https://en.wikipedia.org/wiki/Embarrassingly_parallel
  9. MATLAB - Wikipedia, https://en.wikipedia.org/wiki/MATLAB
  10. Jim Wilkinson - MATLAB Central Blogs, https://blogs.mathworks.com/cleve/2013/02/18/jim-wilkinson/
  11. MATLAB Story MATLAB is a full-featured technical computing environment, but it started as a simple “Matrix Laboratory.” Thre, http://www.imtiazahmad.ca/ps/MATLABStory.pdf
  12. A Brief History of MATLAB - MATLAB & Simulink - MathWorks, https://www.mathworks.com/company/technical-articles/a-brief-history-of-matlab.html
  13. A History of MATLAB - hlevkin, https://hlevkin.com/hlevkin/92usefulBooks/Matlab/matlab.pdf
  14. MATLAB History, PC-MATLAB Version 1.0 » Cleve's Corner: Cleve ..., https://blogs.mathworks.com/cleve/2018/03/09/matlab-history-pc-matlab-version-1-0/
  15. MATLAB Logo, symbol, meaning, history, PNG, brand - Logos-World.net, https://logos-world.net/matlab-logo/
  16. Simulink - Wikipedia, https://en.wikipedia.org/wiki/Simulink
  17. Simulink - Simulation and Model-Based Design - MATLAB - MathWorks, https://www.mathworks.com/products/simulink.html
  18. MathWorks - Wikipedia, https://en.wikipedia.org/wiki/MathWorks
  19. cleve's the l-shaped corner membrane - MathWorks, https://www.mathworks.com/content/dam/mathworks/tag-team/Objects/t/72943_92021v00Cleve_L_Shaped_Membrane_Nov_2003.pdf
  20. The L-Shaped Membrane - MATLAB & Simulink - MathWorks, https://www.mathworks.com/company/technical-articles/the-l-shaped-membrane.html
  21. The MathWorks Logo is an Eigenfunction of the Wave Equation - MATLAB & Simulink, https://www.mathworks.com/company/technical-articles/the-mathworks-logo-is-an-eigenfunction-of-the-wave-equation.html
  22. Nineteen dubious ways to compute the exponential of a matrix - BibBase, https://bibbase.org/network/publication/moler-loans-nineteendubiouswaystocomputetheexponentialofamatrix-1978
  23. Nineteen Dubious Ways to Compute the Exponential of a Matrix - ResearchGate, https://www.researchgate.net/publication/230675460_Nineteen_Dubious_Ways_to_Compute_the_Exponential_of_a_Matrix
  24. Nineteen Dubious Ways to Compute the Exponential of a Matrix, Twenty-Five Years Later, https://epubs.siam.org/doi/pdf/10.1137/S00361445024180
  25. Nineteen Dubious Ways to Compute the Exponential of a Matrix | SIAM Review - Purdue Math, https://www.math.purdue.edu/~yipn/543/matrixExp19-I.pdf
  26. There is a nice paper by Cleve Moler and Charles Van Loan called: "Nineteen Dubious Ways to Compute the Exponential of a Matrix" which is a return to a paper (by the same authors) called: "Nineteen Dubious Ways to Compute the Exponential of a Matrix". This interact simply looks at the Series method. - GitHub Gist, https://gist.github.com/drvinceknight/7d0094eeaeb4aa4508c6
  27. Intel iPSC - Wikipedia, https://en.wikipedia.org/wiki/Intel_iPSC
  28. The Intel Hypercube, part 2, reposted - MATLAB Central Blogs, https://blogs.mathworks.com/cleve/2013/11/12/the-intel-hypercube-part-2-reposted/
  29. Are there any truly embarrassingly parallel processes? Most examples I see tend to be at least partially sequential. At what point does it become sufficiently parallel to qualify? - Bad Algos - Quora, https://badalgos.quora.com/https-www-quora-com-Are-there-any-truly-embarrassingly-parallel-processes-Most-examples-I-see-tend-to-be-at-least-part
  30. Textbooks by Cleve Moler - MATLAB & Simulink - MathWorks, https://www.mathworks.com/moler.html
  31. IEEE John von Neumann Medal - Wikipedia, https://en.wikipedia.org/wiki/IEEE_John_von_Neumann_Medal
  32. Cleve Moler Elected to the National Academy of Sciences - MathWorks, https://www.mathworks.com/matlabcentral/discussions/highlights/888012-cleve-moler-elected-to-the-national-academy-of-sciences