
1.1 MATLAB概述
在数学类科技应用软件中,MATLAB的数值计算能力首屈一指,与Mathematica、Maple并称为三大数学软件。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通信、图像处理、信号检测、金融建模设计与分析等领域。
1.1.1 MATLAB系统的发展历程
在20世纪70年代中期,美国新墨西哥大学计算机科学系的Cleve Moler博士和他的同事在美国国家科学基金的资助下研究开发了调用LINPACK和EISPACK的FORTRAN子程序库。LINPACK是解线性方程的FORTRAN程序库,EISPACK则是解特征值问题的程序库。这两个程序库代表着当时矩阵计算的最高水平。到了20世纪70年代后期,时任美国新墨西哥大学计算机科学系主任的Cleve Moler教授在给学生开设线性代数课程的时候,利用业余时间为学生编写了使用方便的LINPACK和EISPACK的接口程序,取名为MATLAB。在此后的数年里,MATLAB在多所大学里作为教学辅助软件使用,并作为面向大众的免费软件广为流传,MATLAB也成了应用数学界的术语。
1983年早春,Cleve Moler到斯坦福大学访问,身为工程师的John Little意识到MATLAB潜在的广阔应用领域,觉得其应该在工程计算方面也有所作为。同年,他与Cleve Moler及Steve Bangert合作开发了第二代专业版MATLAB。从这一代开始,MATLAB的核心采用C语言编写,也是从这一代开始,MATLAB不仅具有数值计算功能,而且具有了数据可视化功能。
1984年,MathWorks公司成立,把MATLAB推向市场,并继续MATLAB的研制和开发。MATLAB在市场上的出现为各国科学家开发本学科相关软件提供了基础。例如,在MATLAB问世不久后,原来在控制领域的一些封闭式软件包(如英国的UMIST,瑞典的LUND和SIMNON,德国的KEDDC)就纷纷被淘汰,而改以MATLAB为平台加以重建。
到20世纪90年代初期,在国际上的30多个数学类科技应用软件中,MATLAB在数值计算方面独占鳌头,而Mathematica和Maple则分居符号计算软件的前两名。
1993年,MATLAB的第一个Windows版本问世。同年,支持Windows 3. x的具有划时代意义的MATLAB 4.0版本推出。与以前的版本相比,MATLAB 4.0作了很大改进,特别是增加了Simu-link、Control、Neural Network、Optimization、Signal Processing、Spline、Robust Control等工具箱,使得MATLAB的应用范围越来越广。
同年,MathWorks公司又推出了MATLAB 4.1版本,首次开发了Symbolic Math符号运算工具箱。它的升级版本MATLAB 4.2c在用户中得到广泛的应用。
1997年夏,MathWorks公司推出了Windows 95下的MATLAB 5.0和Simulink 2.0版本。该版本在继承MATLAB 4.2c和Simulink 1.3版本功能的基础上,实现了真正的32位运作,数值计算更快,图形表现更丰富有效,编程更简洁直观,用户界面十分友好。
2000年下半年,MathWorks公司推出了MATLAB 6.0(R12)的试用版,并于2001年推出了正式版。紧接着,2002年推出了MATLAB 6.5(R13),并升级Simulink到5.0版本。
2004年秋,MathWorks公司推出了MATLAB 7.0(R14)Service Pack1,新的版本在原版本的基础上进行了大幅改进,同时升级了很多工具箱,使得MATLAB功能更强,应用更简便。
从2006年开始,MATLAB分别在每年的3月和9月进行两次产品发布,每次发布都涵盖产品家族中的所有模块,包含已有产品的新特性和bug修订,以及新产品的发布。其中,3月发布的版本被称为“a”,9月发布的版本被称为“b”,如2006年的两个版本分别是R2006a和R2006b。值得一提的是,在2006年3月1日发布的R2006a版本中,增加了两个新产品模块(Builder for.net和SimHydraulics),并增加了对64位Windows的支持。其中Builder for.net也就是. net工具箱,它扩展了MATLAB Compiler的功能,集成了MATLAB Builder for COM的功能,可以将MATLAB函数打包,使网络程序员可以通过C#、VB. NET等语言访问这些函数,并将源自MATLAB函数的错误作为一个标准的管理异常来处理。
2020年3月,MathWorks公司正式发布了R2020a版MATLAB(以下简称MATLAB 2020)和Simulink产品系列的Release 2020(R2020)版本。
1.1.2 MATLAB的特点
MATLAB自诞生之日起,就以其强大的功能和良好的开放性在科学计算软件中独占鳌头。学会MATLAB可以方便地处理诸如矩阵变换及运算、多项式运算、微积分运算、线性与非线性方程求解、常微分方程求解、偏微分方程求解、插值与拟合、统计及优化等问题。
在进行数学计算时,最难处理的就是算法的选择,这个问题可以在MATLAB面前迎刃而解。MATLAB中有许多功能函数都带有算法的自适应能力,且算法先进,解决了用户的后顾之忧,同时也大大弥补了MATLAB程序因为非可执行文件而影响其速度的缺陷。另外,MATLAB提供了一套完善的图形可视化功能,为用户展示自己的计算结果提供了广阔的空间。图1-1~图1-3就是用MATLAB绘制的地球二维和三维图形。
无论一种语言的功能有多么强大,如果语言本身就非常难理解,那么它绝对不是成功的语言。而MATLAB是成功的,它允许用户以数学形式的语言编写程序,比BASIC、FORTRAN和C等语言更接近书写计算公式的思维方式。

图1-1 地球轮廓线示意图

图1-2 地球二维平面图
MATLAB能发展到今天这种程度,它的可扩充性和可开发性起着不可估量的作用。MATLAB本身就像一个解释系统,以一种解释执行的方式对其中的函数程序进行执行。这样的最大好处是MAT-LAB完全成为一个开放的系统,用户可以方便地查看函数的源程序,也可以方便地开发自己的程序,甚至创建自己的工具箱。另外,MATLAB还可以方便地设置与FORTRAN、C等语言接口,以充分利用各种资源。
任何文字处理程序都能对MATLAB进行编写和修改,从而使得程序易于调试,人机交互性强。

图1-3 地球三维表现图
1.1.3 MATLAB应用领域
MATLAB将高性能的数值计算、可视化和编程集成在一个易用的开放式环境中,在此环境下,用户可以按照符合其思维习惯的方式和熟悉的数学表达形式书写程序,并且可以非常容易地对其功能进行扩充。除具备卓越的数值计算能力之外,MATLAB还具有专业水平的符号计算和文字处理能力;集成了2D和3D图形功能,可完成可视化建模仿真和实时控制等功能。其典型的应用主要包括如下几个方面。
◆数值分析和计算。
◆算法开发。
◆数据采集。
◆系统建模、仿真和原型化。
◆数据分析、探索和可视化。
◆工程和科学绘图。
◆数字图像处理。
◆应用软件开发,包括图形用户界面的建立。
MATLAB Compiler是一种编译工具,它能够将MATLAB编写的函数文件生成函数库或可执行文件COM组件等,以提供给C++、C#等其他高级语言进行调用,由此扩展MATLAB的应用范围,将MATLAB的开发效率与其他高级语言的运行效率结合起来,取长补短,丰富程序开发的手段。
Simulink是基于MATLAB的可视化设计环境,可以用来对各种系统进行建模、分析和仿真。它的建模范围包括任何能够使用数学来描述的系统,如航空动力学系统、航天控制制导系统、通信系统等。Simulink提供了利用鼠标拖放的方法建立系统框图模型的图形界面,还提供了丰富的功能模块,利用它几乎可以不书写代码就完成整个动态系统的建模工作。
此外,MATLAB还有基于有限状态机理论的Stateflow交互设计工具以及自动化的代码设计生成工具Real-Time Workshop和Stateflow Coder。