1.1 MATLAB中的科学计算概述
MATLAB(Matrix Laboratory,矩阵实验室)是以线性代数软件包LINPACK和特征值计算软件包EISPACK中的子程序为基础发展起来的一种开放式程序设计语言,是一种高性能的工程计算语言,其基本的数据单位是没有维数限制的矩阵。
MATLAB的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来计算问题要比用仅支持标量的非交互式的编程语言(如C、FORTRAN等语言)简捷得多,尤其是解决包含了矩阵和向量的工程技术问题。在大学中,MATLAB是很多数学类、工程和科学类的初等和高等课程的标准指导工具。在工业上,MATLAB是产品研究、开发和分析经常选择的工具。
1.1.1 MATLAB的发展历程
20世纪70年代中期,Cleve Moler博士及其同事在美国国家科学基金的资助下开发了调用EISPACK和LINPACK的FORTRAN子程序库。EISPACK是求解特征值的FOTRAN程序库,LINPACK是求解线性方程的程序库。在当时,这两个程序库代表矩阵运算的最高水平。
20世纪70年代后期,时任美国新墨西哥大学计算机科学系主任的Cleve Moler教授在给学生讲授线性代数课程时,想教给学生使用EISPACK和LINPACK程序库,但他发现学生用FORTRAN编写接口程序很费时间,出于减轻学生编程负担的目的,为学生设计了一组调用LINPACK和EISPACK库程序的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MATLAB。在此后的数年里,MATLAB在多所大学里作为教学辅助软件使用,并作为面向大众的免费软件广为流传。
1983年,Cleve Moler教授、工程师John Little和Steve Bangert一起用C语言开发了第二代专业版MATLAB,使MATLAB语言同时具备了数值计算和数据图示化的功能。
1984年,Cleve Moler和John Little成立了MathWorks公司,正式把MATLAB推向市场,并继续进行MATLAB的研究和开发。从这时起,MATLAB的内核采用C语言编写。
1993年,MathWorks公司推出MATLAB 4.0版本,从此告别DOS版。4.x版在继承和发展其原有的数值计算和图形可视能力的同时,出现了几个重要变化:推出了交互式操作的动态系统建模、仿真、分析集成环境——Simulink;开发了与外部直接进行数据交换的组件,打通了MATLAB进行实时数据分析、处理和硬件开发的道路;推出了符号计算工具包;构造了Notebook。
1997年,MATLAB 5.0版问世,紧接着是5.1、5.2,以及1999年春的5.3版。2003年,MATLAB 7.0问世。现在,最新的MATLAB版本已经是MATLAB 7.14(即MATLAB R2012a)。与以往的版本相比,现在的MATLAB拥有更丰富的数据类型和结构、更友善的面向对象的开发环境、更快速精良的图形可视化界面、更广博的数学和数据分析资源、更多的应用开发工具。
2006年,MATLAB分别在3月和9月进行两次产品发布,3月发布的版本被称为“a”,9月发布的版本被称为“b”,即R2006a和R2006b。之后,MATLAB分别在每年的3月和9月进行两次产品发布,每次发布都涵盖产品家族中的所有模块,包含已有产品的新特性和bug修订,以及新产品的发布。
2016年3月,MathWorks正式发布了R2016a版MATLAB(以下简称MATLAB 2016)和Simulink产品系列的Release 2016(R2016)版本。
1.1.2 MATLAB的应用
MATLAB将高性能的数值计算、可视化和编程集成在一个易用的开放式环境中,在此环境下,用户可以按照符合其思维习惯的方式和熟悉的数学表达形式来书写程序,并且可以非常容易地对其功能进行扩充。除具备卓越的数值计算能力之外,MATLAB还具有专业水平的符号计算和文字处理能力;集成了2D和3D图形功能,可完成可视化建模仿真和实时控制等功能。其典型的应用主要包括如下8个方面:
•数值分析和计算;
•算法开发;
•数据采集;
•系统建模、仿真和原型化;
•数据分析、探索和可视化;
•工程和科学绘图;
•数字图像处理;
•应用软件开发,包括图形用户界面的建立。
1.1.3 MATLAB的特点
MATLAB的一个重要特色是它具有一系列称为工具箱(Toolbox)的特殊应用子程序。工具箱是MATLAB函数的子程序库,每一个工具箱都是为某一类学科和应用而定制的,可以分为功能性工具箱和学科性工具箱。功能性工具箱主要用来扩充MATLAB的符号计算、可视化建模仿真、文字处理以及与硬件实时交互的功能,用于多种学科;而学科性工具箱则是专业性比较强的工具箱,例如控制工具箱、信号处理工具箱、通信工具箱等都属于此类。简言之,工具箱是MATLAB函数(M文件)的全面综合,这些文件把MATLAB的环境扩展到解决特殊类型问题上,如信号处理、控制系统、神经网络、模糊逻辑、小波分析、系统仿真等。
除内部函数以外,所有MATLAB核心文件和各种工具箱文件都是可读可修改的源文件,用户可通过对源程序进行修改或加入自己编写的程序来构造新的专用工具箱。
MATLAB Compiler是一种编译工具,它能够将MATLAB编写的函数文件生成函数库或可执行文件COM组件等,以提供给其他高级语言如C++、C#等进行调用,由此扩展MATLAB的应用范围,将MATLAB的开发效率与其他高级语言的运行效率结合起来,取长补短,丰富程序开发的手段。
Simulink是基于MATLAB的可视化设计环境,可以用来对各种系统进行建模、分析和仿真。它的建模范围面向任何能够使用数学来描述的系统,如航空动力学系统、航天控制制导系统、通信系统等。Simulink提供了利用鼠标拖放的方法建立系统框图模型的图形界面,还提供了丰富的功能模块,利用它几乎可以不书写代码就能完成整个动态系统的建模工作。
此外,MATLAB还有基于有限状态机理论的Stateflow交互设计工具以及自动化的代码设计生成工具Real-Time Workshop和Stateflow Coder。
1.1.4 MATLAB系统
MATLAB系统主要包括以下5个部分。
(1)桌面工具和开发环境:MATLAB由一系列工具组成,这些工具大部分是图形用户界面,方便用户使用MATLAB的函数和文件,包括MATLAB桌面和命令窗口、编辑器和调试器、代码分析器和用于浏览帮助、工作空间、文件的浏览器。
(2)数学函数库:MATLAB数学函数库包括了大量的计算算法,从初等函数(如加法、正弦、余弦等)到复杂的高等函数(如矩阵求逆、矩阵特征值、贝塞尔函数和快速傅里叶变换等)。
(3)语言:MATLAB语言是一种高级的基于矩阵/数组的语言,具有程序流控制、函数、数据结构、输入/输出和面向对象编程等特色。用户可以在命令窗口中将输入语句与执行命令同步,以迅速创立快速抛弃型程序;也可以先编写一个较大的复杂的M文件后再一起运行,以创立完整的大型应用程序。
(4)图形处理:MATLAB具有方便的数据可视化功能,以将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印。它的高层次作图包括二维和三维的可视化、图像处理、动画和表达式作图。低层次作图包括完全定制图形的外观,以及建立基于用户的MATLAB应用程序的完整的图形用户界面。
(5)外部接口:外部接口是一个使MATLAB语言能与C、FORTRAN等其他高级编程语言进行交互的函数库,它包括从MATLAB中调用程序(动态链接)、调用MATLAB为计算引擎和读写mat文件的设备。