编者按:本文改写自mathworks官网Cleve Moler 的一篇文章,介绍了MATLAB的发展史,您可以看到由一个人到一群人,从一个小小的想法开始,怎样合力创造了一个伟大的产品。
它就是游走在汹涌大海深处的一股暗流,冷静而耐心地凝聚力量。经年累月,它缓缓地浮出水面——当你意识到这座冰山时,它已经势不可挡。
真正伟大的产品,源于热情、真诚、合作、兴趣等等等等,在这些朴素的因素面前,项目资助金额、论文级别数量、国际大奖都黯然失色。
克里夫·莫勒(Cleve Moler)是MathWorks的董事长兼首席科学家。莫勒尔曾在密歇根大学、斯坦福大学和新墨西哥大学担任数学和计算机科学教授近20年。除了是MATLAB第一个版本的作者,莫勒尔还是LINPACK 和EISPACK 科学子程序库的作者之一。
第一个MATLAB不是一种编程语言; 它只是一个简单的交互式矩阵计算器。没有程序,没有工具箱,没有图形。而且没有ODE或FFT。
MATLAB第一个版本的数学基础是JH Wilkinson和他的18位同事在1965年至1970年之间发表的一系列研究论文,后来被Wilkinson和Reinsch编辑的《自动计算手册》第II卷,线性代数收集。这些论文介绍了在Algol 60中实现的用于求解矩阵线性方程和特征值问题的算法。
1970年,阿贡国家实验室(Argonne National Laboratory)的一组研究人员向美国国家科学基金会(NSF)提出了如下项目建议:“探索生产、测试和传播高质量数学软件以及测试、认证,在某些问题领域传播和支持数学软件包。” 该小组通过将手册中用于特征值问题的Algol程序翻译成Fortran并在测试和可移植性方面进行了大量工作,从而开发了EISPACK(矩阵特征系统软件包)。EISPACK的第一个版本于1971年发布,第二个版本于1976年发布。
1975年,我们四个人(Jack Dongarra,Pete Stewart,Jim Bunch和我本人)向NSF提出了另一个研究项目,该项目将研究开发数学软件的方法。副产品可能是用于线性方程式程序包的软件本身,称为LINPACK。这个项目也在阿贡实施。
LINPACK起源于Fortran;它不涉及Algol的翻译。该程序包包含四个数值精度的44个子例程。
从某种意义上说,LINPACK和EISPACK项目都是失败的。我们已经向NSF提出了研究项目,以“探索生产、测试和传播高质量数学软件所需的方法、成本和资源。” 我们从未写过针对这些目标的报告或论文。
我们只生产软件。
在1970年代和1980年代初期,我在新墨西哥大学教授线性代数和数值分析,希望我的学生无需编写Fortran程序即可轻松访问LINPACK和EISPACK。“轻松访问”,我的意思是不需要进行校园中央大型机通常需要的远程批处理和重复的edit-compile-link-load-execute过程。
因此,我学习了Niklaus Wirth的著作《算法+数据结构=程序》,并学习了如何解析编程语言。我用Fortran编写了第一个MATLAB(矩阵实验室的缩写),矩阵是唯一的数据类型。该项目是一种业余爱好,是编程的一个新方面,我可以学习,学生可以使用。从来没有任何正式的外部支持,当然也没有商业计划。
第一个MATLAB只是一个交互式矩阵计算器。启动屏幕显示了所有保留字和函数。只有71个。要添加另一个函数,您必须从我这里获取源代码,编写一个Fortran子例程,将函数名添加到解析表中,然后重新编译MATLAB。
我在斯坦福大学(Stanford)上度过了1979-80学年,在那里我教授数值分析研究生课程,并向同学们介绍了矩阵计算器。一些学生正在学习诸如控制理论和信号处理之类的学科,而我对此一无所知。然而,矩阵是这些学科中数学的中心,而MATLAB对学生们很有用。
杰克·利特尔(Jack Little)曾在斯坦福大学攻读研究生课程。他的一个朋友参加了我的课程,然后他将MATLAB用于自己的工作。
1983年,Little建议创建基于MATLAB的商业产品。在IBM PC已经推出了仅在两年前。它几乎无法运行像MATLAB这样的程序,但是Little对其发展有所期待。他辞职,买了一台康柏®在Sears PC克隆,搬进斯坦福背后的山丘上,并在我的鼓励下,用C语言写了一个新的MATLAB扩展版本。一个朋友,班格特史蒂夫,在工作空余时间使用新的MATLAB。
PC版的MATLAB于1984年12月在拉斯维加斯举行的IEEE决策与控制会议上首次亮相。一年后,面向Unix工作站的Pro-MATLAB发布了。
Little和Bangert在创建新版本和扩展版本时,对首版MATLAB进行了许多重要的修改和改进。最重要的是函数、工具箱和图形。
在保留其矩阵数学基础的同时,MATLAB不断发展以满足工程师和科学家不断变化的需求。在这里,我将详细说明其中一些。
自从商业开始以来,常微分方程的数值解就一直是MATLAB的重要组成部分。常微分方程也Simulink的核心,用于模拟和基于模型的设计的MATLAB配套产品。
Van der Pol振荡器 是经典的ODE实例。
参数μ是非线性阻尼项的强度。当μ = 0时,我们有基本的谐波振荡器。
MATLAB代码将振荡器表示为一对一阶方程。
mu = 5;
vdp = @(t,y) [y(2); mu*(1-y(1)^2)*y(2)-y(1)];
tspan = [0 30];
y0 = [0 0.01]';
[t,y] = ode23s(vdp,tspan,y0);
plot(t,y,'.-')
legend({'y','dy/dt'})
xlabel('t')
参数μ设置为5 的Van der Pol振荡器是一个中等刚性的微分方程。期待中,我使用了ode23s求解器;名称中的“ s”表示它适用于刚性方程。在图中,您可以看到解决方案变化迅速的一些步骤群集。非刚性求解器将采取更多的步骤。刚性极点求解器使用隐式方法,每个步骤都需要求解一组联立线性方程。标志性的MATLAB反斜杠运算符在这里静默工作。
多年以来,MATLAB仅具有一种数字数据类型:以64位格式存储的IEEE标准754双精度浮点。随着人们开始将MATLAB用于更多的应用程序和更大的数据集,我们提供了更多表示数据的方法。
对单精度算术的支持始于2000年代初期,并于2004年由MATLAB 7完成。单精度仅需要32位存储,将大型阵列的内存需求减少了一半。MATLAB没有声明,因此单精度变量是通过可执行转换函数获得的。
MATLAB 7还引入了三个无符号的整数数据类型,uint8,uint16,和uint32; 3种符号整数数据类型,int8,int16,和int32; 还有一种逻辑数据类型logical。
稀疏矩阵于1992年在MATLAB 4中引入。它们是一种高效使用内存的方法,用于表示非常大的,有很少非零值的数组。仅存储非零元素,以及行索引和指向列开头的指针。MATLAB外观的唯一变化是一对函数sparse和full。几乎所有运算均适用于完全和稀疏矩阵。稀疏存储方案表示空间中的矩阵,该矩阵与非零项的数量成正比,大多数运算在时间上计算稀疏结果的时间与对非零的算术运算的数量成正比。
元胞数组
是1996年在MATLAB 5中引入的。元胞数组是MATLAB对象的索引,可能是异构的集合,包括其他元胞数组。元胞数组由花括号创建{}。
可以使用大括号和平滑括号来索引元胞数组。用大括号,c{k}是k第-个元胞的内容。带括号的c(k)是包含指定元胞的另一个元胞数组。想一想邮箱的集合。box(k)是第- k个邮箱。box{k}是k-th框中的邮件。
在1996年引入了结构和相关的“点符号”。此脚本用于为小班级创建成绩册,显示了工作中的结构和点符号。
Math101.name = ["Alice Jones"; "Bob Smith"; "Charlie Brown"];
Math101.grade = ["A"; "B+"; "C"];
Math101.year = [4; 2; 3];
要进行点名,我们需要名称列表。
disp(Math101.name)
"Alice Jones"
"Bob Smith"
"Charlie Brown"
更改Charlie的成绩涉及结构和数组符号。
Math101.grade(3) = “W”;
disp(Math101.grade)
“A”
“B+”
“W”
2008年,对MATLAB面向对象的编程功能进行了重大改进。创建类可以简化涉及特殊数据结构或与特定类型的数据进行交互的大量函数的编程任务。MATLAB类支持函数和运算符重载,对属性和方法的访问受控,引用和值的语义以及事件和侦听器。
MATLAB图形系统是MATLAB编程的面向对象方法的一个大型复杂示例。
MATLAB的第一个版本是简单的终端应用程序。随着时间的流逝,我们为图形,编辑和其他工具添加了单独的窗口。这些改进使MATLAB变得逐渐易于使用,尤其是对于没有编程经验的用户。影响最大的两个特定功能是桌面版和实时编辑器。
MATLAB桌面版于2000年推出。下面的屏幕快照显示了它的外观。
可以看到四个面板:当前文件夹查看器(左),工作区查看器(右),编辑器/调试器(顶部中央)和传统命令窗口(底部中央)。文件查看器和命令历史记录窗口也可以包含在个性化布局中。
任何面板都可以关闭或停靠在一个独立的窗口中。
实时编辑器于2016年推出,并且仍在迅速发展。
描述性文本和MATLAB输入、输出和图形,都组合在一个交互式文档中,该文档可以导出为HTML,PDF或LaTeX。
在2004年的SuperComputing会议上介绍了Parallel Computing Toolbox 。第二年,在比尔·盖茨(SC05)的SC05会议上,比尔·盖茨(Bill Gates)进行了主题演讲,并使用MATLAB演示了微软在高性能计算方面的介入。
该工具箱通过在群集中的多台计算机上或在一台计算机上的许多内核上运行许多MATLAB worker,从而支持粗粒度的分布式内存并行性。MPI用于基础消息传递。到目前为止,工具箱中最流行的功能是并行for循环命令parfor。
该工具箱还支持附加图形处理单元(GPU)中的细粒度共享内存并行性。在这里,工作开始于gpuArray数组。
现代MATLAB的许多功能都来自可用于特殊应用的工具箱。截至2018a版本,其中有63个:
从简单的计算器开始以来,MATLAB已经走了很长一段路。它是一个生机勃勃的生态系统,支持技术计算的各个方面。我们将在谨慎添加新功能的同时继续增强现有功能。我们的目标始终是易用性、功能和速度。
希望这个科学计算软件的发展简史给我们国产软件的发展以启示和警醒。让我们时刻牢记:
打倒我们的不是敌人的强大,打倒我们的经常是我们自己选择性的愚蠢和无知。
以下是后续补充材料。
----2020年11月1日补充----
关于MATLAB算法积累和与科学研究发展的紧密联系,可以看一下这篇文章,了解在图像处理白平衡这样一个基础应用中,关注文中涉及的参考文献,了解其算法与科学研究的紧密关联。
更多阅读:
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks ,Hyperworks, Protel,CAXA,OpenWorks LandMark,MATLAB,Enovia,Winchill,TeamCenter,MathCAD,Ansys, Abaqus,ls-dyna, Fluent, MSC,Bentley,License,UG,ug,catia,Dassault Systèmes,AutoDesk,Altair,autocad,PTC,SolidWorks,Ansys,Siemens PLM Software,Paradigm,Mathworks,Borland,AVEVA,ESRI,hP,Solibri,Progman,Leica,Cadence,IBM,SIMULIA,Citrix,Sybase,Schlumberger,MSC Products...