「芯历史」“神器”也是“毒苹果”,MATLAB是如何长成的?

MATLAB与Mathematica、Maple被业内并称为三大数学软件。它是美国MathWorks公司研发出品的高级技术计算语言和交互式环境集成软件,初版诞生于1984年,广泛用于算法开发、数据可视化、数据分析、仿真建模以及数值计算。

经过近40年的演变,如今MATLAB提供企业版、校园版和家庭版,世界上有180多个国家、数百万工程师与数学家都在使用MATLAB,可作为整个汽车、航空航天、通信、电子和工业自动化领域的基本研发工具,可支持设计和开发各种先进产品,包括汽车系统、航空飞行控制和航空电子、电信和其他电子设备、工业机械以及医疗设备,在工业制造、学术研究等领域具有近乎垄断的市场地位。

那么这款商业数学软件是如何一步步变成一款“神器”的?

故事开始之前,先来简单介绍几个涉及到的编程语言。

Algol

Algol是一种指令式编程语言,发展于1950年代中期,对许多其它编程语言产生了重大影响。可与差不多同时期的FORTRAN、LISP及COBOL并列为四大最有影响力的高阶语言。Algol被设计用来避免FORTRAN中一些已知的问题,最终引领了许多其它编程语言的兴起,包括PL/I、Simula、BCPL、B、Pascal及C。Algol引入了代码块,并用begin⋯end来分隔。它是第一个利用词法作用域实作巢状函式的语言,也是第一个注重形式语言定义的语言。

1960年1月,图灵奖获得者:艾伦·佩利在巴黎举行的有全世界一流软件专家参加的讨论会上,发表了"算法语言Algol 60报告",确定了程序设计语言Algol 60。Algol 60是程序设计语言发展史上的一个里程碑,它标志着程序设计语言成为一门独立的科学学科,并为后来软件自动化及软件可靠性的发展奠定了基础。

Fortran

Fortran是一种编程语言,1957年由IBM开发出,是为了满足数值计算的需求而发展出来的,是世界上第一个被正式采用并流传至今的高级编程语言。Fortran语言的最大特性是接近数学公式的自然描述,在计算机里具有很高的执行效率,可以直接对矩阵和复数进行运算,其矩阵元素在记忆空间存储顺序是采用列优先(Column major),这几个特点后来的MATLAB有继承。

1966年,美国标准化协会制定了Fortran(x3.9-1966,也就是Fortran 66)和Fortran(x3.10-1966)标准,1976年又重新对Fortran 66进行了评估,公布了新的Fortran标准,也就是Fortran 77。Fortran 77是具有结构化特性的编程语言,并在短时间内获取了巨大的成功,广泛地应用于科学和工程计算,几乎统治了数值计算领域,1980年被ISO接纳为国际标准。

EISPACK和LINPACK

Cleve Moler是MathWorks现任首席数学家,董事长兼联合创始人,曾在密歇根大学,斯坦福大学和新墨西哥大学担任数学和计算机科学教授近20年。

上世纪70年代和80年代初期,Cleve在新墨西哥大学教授线性代数和数值分析。1970年和1975年,他所在的团队向美国国家科学基金会(NSF)分别申请了两个项目,目标是“探索开发高质量数学软件的方法、成本和资源”。前一个项目中,他的团队将手册中解决特征值问题的Algol转换为Fortran,并在测试和可移植性方面做了大量研究,最终开发出EISPACK(矩阵特征系统软件包)。1975年,Cleve团队重新提交了一个研究项目,调研数学软件的开发方法,诞生了一个叫LINPACK的线性方程软件包的副产品。

Cleve认为这两个项目从某种意义上来说都失败了,因为项目未“撰写报告或论文,只研发了软件。”这两个软件谈不上多大的学术创新,但是非常有用,LINPACK更是世界超级计算机排行榜Tops500的基准测试程序,可以说是影响了世界超级计算机的发展。

初版MATLAB、商用及MathWorks创立

为了能让学生更好地掌握线性代数与数值分析,用心教学的Cleve希望自己的学生能够方便地使用LINPACK和EISPACK,而不必编写Fortran程序,也就是为了让学生把精力更多地投入到学习数学概念而不是编程语言上,于是用Fortran编写了初版MATLAB,通过这个“小工具”把LINPACK和EISPACK两个软件接口封装起来,从而方便使用。

最初的MATLAB只是一个交互式矩阵计算器,这个版本的MATLAB只能进行简单的矩阵运算,例如矩阵转置、计算行列式和本征值。它只是Cleve的兴趣爱好,当时并没有获得任何资助,也没有商业计划。

Cleve Moler

1979年Cleve来到斯坦福大学任教,教授数值分析的研究生课程,并在课程中引入了这一矩阵计算器。MATLAB引起了几个学生的兴趣,并主动提出用C语言重新写一遍并移植到IBM PC上。在他的回忆录中这样写道:

“Jack Little当时正在斯坦福攻读研究生工程学位。他的一个朋友是我的学生并向他展示了MATLAB,随后他便在工作中用到了它。

1983年,Little提议开发基于MATLAB的商用产品。彼时,IBM台式机才推出两年,很难支持MATLAB这样的程序的运行,但是Little希望对它进行改进。他辞掉了工作,在Sears购买了Compaq电脑克隆机,并搬到了斯坦福的后山上。在我的鼓励下,他用C语言编写了MATLAB新的扩展版本。我的一个朋友Steve Bangert也在业余时间研究新版MATLAB。”

Little和Bangert在Cleve的初代版本的基础上用C语言重新编写了MATLAB并增加了一些新功能,Little还开发了第一个系统控制工具箱,其中一些代码到现在仍然在使用。最终在1984年拉斯维加斯的IEEE决策与控制会议上,PC-MATLAB首次发布,同年,Cleve、Little和Bangert,在斯坦福后山Little居所租来的一个A型机舱中共同创立了MathWorks,正式将C语言版的面向MS-DOS系统的MATLAB 1.0推向市场。

1985年MathWorks发布了针对Unix工作站的Pro-MATLAB,即MATLAB 2.0,同时MATLAB 1.0第一份订单向MIT售出了10份副本,收入500美元。

MathWorks成立不久后,Little将公司搬到了他的家乡马萨诸塞州,Bangert仍住在加州,而Cleve去了俄勒冈英特尔的衍生业务工作,该公司开发了世界上第一台商业并行计算机之一。在1989年成为全职员工之前,他一直担任MathWorks的顾问。

1992年,学生版MATLAB推出;1993年,Microsoft Windows版MATLAB面世;1995年,Linux版推出。2007年,MathWorks进入中国市场。

MATLAB诞生的80年代,正赶上美国控制学界基于状态空间的控制理论蓬勃发展时期,在控制学界推动、大牛加持下,MATLAB得到极快的发展。

从MATLAB的诞生到繁荣不难看出,虽然MathWorks的产品已演变成工业界科学计算和基于模型设计的标准平台,但是可以说教育界才是其根基所在。

MATLAB的重要工具箱Simulink诞生

基于矩阵数学运算的根基,MATLAB在几十年里更新了十多个版本,并跟随时代发展不断引入新的理念,以满足工程师和科学家们日益更新的需求。

例如最开始的MATLAB只有一种数值数据类型:以64位格式存储的IEEE标准754双精度浮点。1992年随MATLAB 4推出了稀疏矩阵能够显示超大数组(几乎不含非零值)又节省内存;1996年发布的MATLAB 5增加了单元阵列,以及结构和“圆点表示法”;2004年发布的MATLAB 7中开始支持单精度算法,将大型阵列的内存需求降低了一半。

此外,在MATLAB的可用性和易用性方面MathWorks也在不断提升。首版MATLAB只是简单的终端应用程序,随着时间的推移逐渐增加了图形化、编辑和其他工具的独立窗口。这些改进使MATLAB的使用变得更加简单,尤其是对那些没有编程经验的用户来说。两个影响最大的功能是桌面版和实时编辑器,分别于2000年和2016年推出。2004年还推出了并行计算工具包,比尔盖茨就曾使用MATLAB演示了微软向高性能计算领域的迈进。

Simulink工具包的引入是MathWorks一个重要的飞跃。

1990年,MATLAB加入Simulink仿真模块,它用于动态系统和嵌入式系统的多领域模拟和基于模型的设计,Simulink提供一个交互式的图形化环境及可定制模块库,可对各种时变系统,例如通讯、控制、信号处理、影像处理和图像处理系统等进行设计、模拟、执行和测试,也可以进行基于模型的设计。Simulink与MATLAB紧密集成,可以直接访问MATLAB大量的工具来进行算法研发、仿真的分析和可视化、批处理脚本的创建、建模环境的定制以及信号参数和测试数据的定义。

MATLAB+Simulink,以及上百种工具包,使得基于模型的设计概念迅速推广,它可以使设计者无需手写代码和使用文档,而是创建系统模型。以工业机器人为例,模型由机械臂、电机和控制器设计组成,通过MATLAB+Simulink软件,可以随时进行模型仿真,即时查看系统行为,测试多种假设分析场景,同时无需承担风险和延迟,也无需依赖昂贵的硬件。

如果说,MATLAB还有Python、Octave、Julia等开源软件可以使用,那么Simulink才是真正难以替代的部分。例如如果没有Simulink,通信、控制、信号、车辆等专业的研究效率都会受到影响。哪怕不用Simulink,很多这方面的仿真软件也只提供MATLAB的接口,是MATLAB核心竞争力之一。

经过近四十年,到2019年MathWorks的营业额已经达到10亿美元规模,员工从最初的3个联合创始人,到如今超过3000名遍布全球的员工。

MATLAB从简单的计算器开始,成为一个富有生命力的生态系统。至此,MATLAB和Simulink已经不再是传统意义上的仿真软件,而是建立在MATLAB和Simulink基础框架之下的工业应用平台。业内人士评价:MATLAB基于状态机模型,在CMU的技术支援下,完成了符号计算引擎的研发,这就为EDA数字电路设计仿真、AI人工智能数据分析,SDR/SCA软件无线电应用提供了计算支持和基础。

同半导体EDA领域大家所熟知的Synopsys、Cadence和Mentor Graphics三巨头一样,相比英特尔、三星、台积电这类公司他们的营业额并不算大,但是这种不断积累,把一项技术做到极致,成为某个细分领域的隐形冠军是我们所应当学习的。

MATLAB是神器,还是毒苹果?

MATLAB语言的简易性是其迅速繁荣的主要原因。时至今日,当年的数学计算霸主Fortran已经几乎无人使用,而MATLAB一直都保持了相当的人气。这要得益于它充分降低了学习门槛,在计算速度和易写当中保持了一个很好的平衡。

与Fortran相比MATLAB是一种动态语言,可以逐步调试,而且可以直接运行,免去了编辑-编译-链接-加载-执行等静态语言繁琐的步骤。它把常用的功能都变成了关键字,避免了不懂编程的人去处理各种库的麻烦。

IEEE Spectrum 2019编程语言Top 10中MATLAB名列第八

最后,MATLAB简化了控制流,只保留了循环、判断、定义函数等最简单的几种语义。MATLAB的关键字如今多达近千个,但是必须掌握的控制流关键字就在10个左右。也就是说学会了这10个关键字的用法加上善于查询MATLAB的帮助手册,就可以进行数学计算、绘图和仿真了。

到现在,MATLAB已经发展成为科学、工程领域应用最广泛的科学计算软件,在控制领域,MATLAB已成为国际控制界的标准计算软件,在国内甚至已经形成了一家独大的现实局面。

基于MATLAB平台的开发的各种函数、模型,均无法脱离MATLAB环境单独使用,一旦更换软件,需要重构所有模型积累,平台装换成本过大,所以科研对团队对MATLAB软件的应用越深入、越持久,就越离不开MATLAB软件,只能持续购买授权,所以有专家评论MATLAB的生态是“毒”立生态。

因此专家认为,“易用”的另一面是学生对算法的细节不求甚解,失去了对算法的基础创新能力。而研究者们成了“调包族” — 只需调用现成的软件包,使得研究者们对基础算法的理解趋于表面化、肤浅化,知其然不知其所以然,不知道如何改进算法,使其更加适用于自己的问题。这也是许多年来这些领域在基础理论方面没有突破的一个重要原因。因此专家指出,如果研究生和教授们只会调用别人的算法来解决问题,那么他们就成为了“技工”,大学也就成了技工学校。

人工智能是目前最火热和最前沿的技术领域,对于涉及非线性关系和复杂大数据的机器学习人工智能算法,许多核心敏感参数的选取直接影响系统的最终性能。

国科大教授王立新在其博客中写到,只有深入理解算法的细节,才能理解并有效地选取这些敏感参数,使系统性能达到最优。理解算法细节最有效的方法是自己进行算法编程,在不断的试错中理解算法的核心奥秘、发现敏感参数的选取方法,而不是调用Matlab toolbox以及其它许多所谓的“开源软件包”。

因此,此次MATLAB被禁,正好鞭策科研工作者回归本学科科学研究的本质,给了我国人工智能研究者们一个难得的“歪打正着”的机会,让我们静下心来自己编程基础算法,深刻体会基础模型与算法的核心要素与优缺点,在现有成绩的基础之上“百尺竿头、更进一步”。

至于国内呼声工业应用软件的国产替代,行业专家指出,平台性、工具性的工业软件研发需要很长时间,并且有很大风险,企业很难有动力去做这个事情,需要政府支持高校和专业研究院所来做,不能讲效益。第一,要养成一支高素质的队伍,有足够的毅力和韧性精神,用时间去换经验;第二,国家要给“试验田”,只有这样队伍才能得到锻炼和成长,这些软件产品才能成熟;第三,工业软件在成长过程中难免会有一些缺陷和不足,国家要鼓励、支持市场能容错。(校对/Aki)


举报
评论 0