MATLAB简史
Cleve Moler, MathWorks
第一个MATLAB®不是一种编程语言;这是一个简单的交互式矩阵计算器。没有程序,没有工具箱,没有图形。没有颂歌或FFTs。
在这个Cleve 's Corner中,我将描述MATLAB从这些简单的开始演变的一些里程碑。
数学的起源
MATLAB第一版的数学基础是由J. H.威尔金森和他的18位同事在1965年至1970年间发表的一系列研究论文,后来被收集到自动计算手册,卷二,线性代数,由威尔金森和C.赖因施编辑。本文介绍了用Algol 60实现的求解矩阵线性方程和特征值问题的算法。
EISPACK和LINPACK
1970年,阿贡国家实验室的一组研究人员向美国国家科学基金会(NSF)提议“探索生产、测试和传播高质量数学软件所需的方法、成本和资源,并在某些问题领域测试、认证、传播和支持数学软件包。”金宝app该小组通过将手册中用于特征值问题的Algol程序翻译成Fortran,并在测试和可移植性方面进行了广泛的工作,开发了EISPACK(矩阵特征系统包)。EISPACK的第一个版本发布于1971年,第二个版本发布于1976年。
1975年,我们四个人——杰克·唐加拉、皮特·斯图尔特、吉姆·邦奇和我——向美国国家科学基金会提出了另一个研究项目——研究开发数学软件的方法。该软件的一个副产品是被称为LINPACK(线性方程包)的软件本身。这个项目也以阿贡为中心。
LINPACK起源于Fortran;它不涉及从Algol翻译。程序包包含44个子程序,每个子程序有4个数字精度。
在某种意义上,LINPACK和EISPACK项目是失败的。我们向NSF提出了研究项目,以“探索生产、测试和传播高质量数学软件所需的方法、成本和资源”。我们从未就这些目标写过报告或论文。我们只生产软件。
历史性的MATLAB
在20世纪70年代和80年代初,我在新墨西哥大学教线性代数和数值分析,我希望我的学生不需要编写Fortran程序就能轻松访问LINPACK和EISPACK。我所说的“方便访问”是指不需要进行远程批处理和重复的编辑-编译-链接-加载-执行过程,而这些过程通常需要在校园中央主机计算机上进行。
我研究了尼克劳斯·沃斯的书算法+数据结构=程序学习如何解析编程语言。我用Fortran编写了第一个matlab(矩阵实验室的首字母缩写),其中矩阵是唯一的数据类型。这个项目是我的一种爱好,是我学习编程的一个新方面,也是我的学生可以使用的东西。从来没有任何正式的外部支持,当然也没有商业计划。金宝app
第一个MATLAB只是一个交互式矩阵计算器。启动屏幕的快照显示了所有保留的单词和函数。只有71个。要添加另一个函数,您必须从我这里获得源代码,编写Fortran子例程,将您的函数名添加到解析表中,并重新编译MATLAB。
商业MATLAB
1979-80学年,我在斯坦福大学教授数值分析研究生课程,并向全班介绍了这个矩阵计算器。有些学生在学习控制理论和信号处理等课程,而我对此一无所知。矩阵是这些学科数学的核心,而MATLAB对学生来说很快就有用了。
杰克·利特尔一直在斯坦福大学攻读工程学研究生课程。他的一个朋友上过我的课,他向他展示了MATLAB,他在自己的工作中采用了MATLAB。
1983年,利特尔建议创建一个基于MATLAB的商业产品。IBM®PC在两年前才被引进。它的功能还不足以运行MATLAB这样的程序,但利特尔预见到了它的发展。他辞掉了工作,买了一台康柏电脑®在西尔斯的PC克隆,搬到了斯坦福后面的山上,在我的鼓励下,用c语言写了一个新的扩展版本的MATLAB。一个朋友,史蒂夫·班杰特,在他的业余时间研究新的MATLAB。
PC-MATLAB于1984年12月在拉斯维加斯举行的IEEE决策与控制会议上首次亮相。一年后,针对Unix工作站的Pro-MATLAB问世。
Little和Bangert在创建新的扩展版本时,对Historic MATLAB进行了许多重要的修改和改进。最重要的是功能、工具箱和图形。
现代MATLAB
在保留其矩阵数学根基的同时,MATLAB一直在不断发展,以满足工程师和科学家不断变化的需求。时间轴显示了关键的发展。在这里,我将详细阐述其中的一些。
常微分方程
常微分方程的数值解自其商业开始以来一直是MATLAB的重要组成部分。ode也是Simulink的核心金宝app®, MATLAB仿真和基于模型的设计的配套产品。
范德堡尔振荡器是一个经典的ODE例子。
的参数μ为非线性阻尼项的强度。当μ= 0,我们有基本谐振子。
MATLAB代码将振荡器表示为一对一阶方程。
Mu = 5;VDP = @(t,y) [y(2);μ* (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,是一个温和僵硬的微分方程。在预期中,我使用了ode23s
解算器;名称中的“s”表示它适用于刚性方程。在图中,您可以看到一些聚类步骤,其中解决方案快速变化。非刚性求解器会采取更多步骤。一个生硬的ode求解器使用an隐式的要求在每一步解一组联立线性方程的方法。标志性的MATLAB反斜杠运算符在这里悄然工作。
数据类型
多年来,MATLAB只有一种数字数据类型:IEEE标准754双精度浮点数,以64位格式存储。随着人们开始将MATLAB用于更多的应用程序和更大的数据集,我们提供了更多表示数据的方法。
单精度和整数
金宝app对单精度算法的支持始于21世纪初,并于2004年由MATLAB 7完成。单精度只需要32位存储空间,将大型阵列的内存需求减少了一半。MATLAB没有声明,所以单精度变量是通过可执行转换函数获得的。
MATLAB 7还引入了三种无符号整数数据类型,uint8
,uint16
,uint32
;三种有符号整数数据类型,int8
,int16
,int32
;还有一种逻辑数据类型,逻辑
.
稀疏矩阵
稀疏矩阵是1992年用MATLAB 4引入的。它们是一种内存效率高的方法,可以表示很少有非零值的非常大的数组。只存储非零元素,以及行索引和指向列开始的指针。对MATLAB外观的唯一改变是一对函数,稀疏的
而且完整的
.几乎所有的运算都同样适用于满矩阵和稀疏矩阵。稀疏存储方案在空间上表示一个与非零项数量成比例的矩阵,并且大多数操作计算稀疏结果的时间与对非零的算术操作的数量成比例。
细胞数组
Cell数组是在1996年用MATLAB 5引入的。单元格数组是一个索引的,可能是异构的MATLAB对象集合,包括其他单元格数组。单元格数组由花括号创建,{}
.
单元格数组可以用花括号和圆括号进行索引。牙套,c {k}
内容是什么k
th细胞。用括号,c (k)
包含指定单元格的另一个单元格数组。想象一个邮箱集合。箱(k)
是k
th邮箱。盒子{k}
邮件在吗k
th盒子。
结构
结构和相关的“点表示法”于1996年引入。这个脚本用于创建一个小班的成绩簿,展示了结构和点表示法。
Math101.name = ["Alice Jones";“鲍勃·史密斯”;“查理·布朗”);Math101。grade = ["A";“B +”;“C”);Math101。年= [4;2; 3];
要点名,我们需要名单。
disp (Math101.name)"爱丽丝·琼斯" "鲍勃·史密斯" "查理·布朗"
改变查理的分数涉及到结构和数组符号。
Math101.grade(3) = " W ";disp(Math101.grade) " A " " B+ " " W "
对象
MATLAB面向对象编程功能在2008年进行了重大增强。创建类可以简化涉及专用数据结构或与特定类型数据交互的大量函数的编程任务。MATLAB类支持函数和操作符金宝app重载,对属性和方法的受控访问,引用和值语义,以及事件和侦听器。
MATLAB图形系统是MATLAB编程面向对象方法的一个大型复杂示例。
使MATLAB更易于访问:桌面和实时编辑器
MATLAB的第一个版本是简单的终端应用。随着时间的推移,我们为图形、编辑和其他工具添加了单独的窗口。这些逐渐使MATLAB更容易使用,特别是对于没有编程经验的用户。影响最大的两个特性是桌面和实时编辑器。
桌面
MATLAB桌面在2000年被引入。下面是它现在的截图。
可以看到四个面板:当前文件夹查看器(左)、工作区查看器(右)、编辑器/调试器(上中心)和传统的命令窗口(下中心)。文件查看器和命令历史窗口也可以包含在个性化布局中。
任何面板都可以关闭或解停靠成一个独立的窗口。
住编辑器
Live Editor于2016年推出,目前仍在快速发展。
描述性文本和MATLAB输入、输出和图形组合在一个交互式文档中,该文档可以导出为HTML、PDF或LaTeX。
并行计算
并行计算工具箱™是在2004年的超级计算会议上介绍的。第二年,在SC05大会上,比尔·盖茨做了主题演讲,用MATLAB演示了微软进入高性能计算领域。
这个工具箱支持粗粒度的分金宝app布式内存并行性,方法是在集群中的几台机器上或在一台机器的多个核心上运行许多MATLAB工作程序。MPI用于底层消息传递。到目前为止,这个工具箱最流行的特性是并行为
循环命令,parfor
.
工具箱还支持附加图形处理单元(gp金宝appu)中的细粒度共享内存并行。在这里,gpuArray
数组让事情开始。
工具箱
现代MATLAB的大部分功能都来自于专门应用程序可用的工具箱。截至2018a版本,共有63个:
- 应用部署(3)
- 代码生成(7)
- 计算生物学(2)
- 计算金融(8)
- 控制系统(8)
- 数据库访问和报告(2)
- 图像处理与计算机视觉(6)
- 数学,统计和优化(9)
- 并行计算(2)
- 信号处理与无线通信(11)
- 测试与测量(5)
接下来是什么?
从简单的计算器开始,MATLAB已经走过了很长的路。它是一个活的生态系统,支持技术计算的所有方面。金宝app我们将继续加强现有的功能,同时谨慎地添加新的功能。我们的目标始终是易用性、功率和速度。
2018年出版的
MATLAB的时间表
1984
PC-MATLAB
FFT
图形
1985
Pro-MATLAB
控制系统工具箱
1987
信号处理工具箱
常微分方程
1992
稀疏矩阵
金宝app®
1993
图像处理工具箱™
符号数学工具箱™
1996
单精度
细胞数组
结构
1999
对象
2000
桌面
LAPACK
2004
整数数据类型
函数处理
并行计算
2008
对象的改进
2010
gpu
2014
新的图形系统
2016
住编辑器
2017
高数组和分类数组