1.1 MATLAB的特点及组成

1.1.1 MATLAB的发展历史

MATLAB的产生和数学计算是紧密联系在一起的。20世纪70年代中期,Cleve Moler博士及其同事在美国国家基金会的帮助下,开发了LINPACK和EISPACK的FORTRAN语言子程序库。当时,这两个程序库代表了矩阵运算的最高水平。

1980年前后,时任美国新墨西哥大学计算机科学系主任的Cleve Moler教授在给学生讲授线性代数课程时,为了让学生能使用这两个子程序库,同时又不用在编程上花费过多的时间,便着手编写了接口程序并命名为 MATLAB(意为矩阵实验室),这个程序是用Fortran语言编写的,尽管功能十分简单,但由于是免费软件,所以在多所大学里得到了广泛使用。

20世纪80年代中期,Cleve Moler和John Little采用C语言重新编写了MATLAB的核心,合作开发了 MATLAB 第1版,大大提高了它的运算效率。1984年,他们成立了Math-Works公司,并将MATLAB正式推向商业市场。

以后,MATLAB版本不断更新。MathWorks公司于1992年推出了具有划时代意义的4.0版,并于1993年推出了可以在Windows 3.x环境下使用的版本,使其应用范围越来越广。1994年,推出的4.2版扩充了4.0版的功能;1997年,推出的5.0版使编程更方便;1999年年初,推出的5.3版在很多方面又进行了进一步改进。2001年,MathWorks公司推出了6.1版,这个版本对计算机的配置要求比较高。近来Math Works公司又推出了6.5版和7.0版,其中增加了与数字信号处理(DSP)开发软件的接口,同时更新了大量的工具包。因此,本书将以7.0版的MATLAB为基础,全面介绍MATLAB的功能和使用方法。

1.1.2 MATLAB的特点

一种语言之所以能够如此迅速地普及和应用,显示出如此旺盛生命力是由于它有着不同其他语言的特点。正如C语言等高级语言使人们摆脱了需要直接对计算机硬件资源进行操作的要求,被称为第四代计算机语言的MATLAB(简称M语言),利用其丰富的函数资源和工具箱资源使编程人员可以根据不同的需要选择相应的优化函数而不需要编写烦琐的程序代码。该软件最突出的特点就是简洁的、开放式代码。该软件提供了更为直观、符合人们思维习惯的代码。该软件还给用户带来最直观、最简洁的程序开发环境。

与其他的计算机高级语言相比,MATLAB有着许多非常明显的优点,介绍如下。

1.容易使用

MATLAB允许用户以数学形式的语言编写程序,用户在命令窗口中输入命令即可直接得出结果,这比C、Fortran和BASIC等高级语言都要方便得多。由于它是用C语言开发的,它的流程控制语句与C语言中的相应语句几乎一致。所以,初学者只要有C语言的基础,就会很容易掌握MATLAB语言。

2.可以由多种操作系统支持

MATLAB支持多种计算机操作系统,比如由Windows98/2000/XP以及许多不同版本的UNIX操作系统提供支持。而且,在一种操作系统下编制的程序转移到其他的操作系统时,程序不需要作任何修改。同样,在一种平台上编写的数据文件转移到另外的平台时,也不需要作出任何修改。因此,用户编写的MATLAB程序可以自由地在不同的平台之间转移。这给用户带来了很大的方便。

3.丰富的内部函数

MATLAB的内部函数库提供了相当丰富的函数,这些函数可以解决许多基本问题,如矩阵的输入。在其他语言中(如 C 语言),要输入矩阵,先要编写一个矩阵的子函数,而MATLAB语言则提供了一个人机交互的数学系统环境,该系统的基本数据结构是矩阵,在生成矩阵对象时,不要求作明确的维数说明。与利用C语言或Fortran语言编写数值计算的程序设计相比,利用MATLAB可以节省大量的编程时间。这给用户节省许多的时间,使用户能够把自己的精力放在创造方面,而把烦琐的问题交给内部函数来解决。

除了这些数量巨大的基本内部函数外,MATLAB还有为数不少的工具箱。这些工具箱用于解决某些特定领域的复杂问题,例如,使用Wavelet Toolbox进行小波理论分析,或者使用Financial Toolbox来进行金融方面的问题的研究。同时,用户可以通过网络获取更多的MATLAB程序。

4.强大的图形和符号功能

MATLAB具有强大的图形处理功能,它本身带有许多绘图的库函数,可以很轻松地画出各种复杂的二维和多维图形。这些图形可以在与运行该程序的计算机连接的任何打印机设备上打印出来,这使得MATLAB成为使技术数据可视化的杰出代表。

MATLAB也开发了自己的符号运算功能,用户只需掌握MATLAB这门语言就几乎可以解决学习和科研中的所有问题。不必再专门学习一门符号运算语言。同时由于有了Maple和MATLAB之间的接口,这个问题得到了更好的解决。

5.可以自动选择算法

在使用其他语言编制程序时,往往会在算法的选择上费一番周折。但在MATLAB里,这个问题不复存在。MATLAB的许多功能函数都带有算法的自适应能力,它会根据情况自行选择最合适的算法,这样,当使用其他程序时,因算法选择不当而引起的如死循环等错误,在使用MATLAB时可以在很大程度上避免。

6.与其他软件和语言有良好的对接性

除了上面所提的MATLAB与Maple的连接外,MATLAB与Fortran、C和BASIC之间已经实现很方便的连接。用户只需将已有的EXE文件转换成MEX文件即可。可见,尽管MATLAB除自身已经具有十分强大的功能之外,它还可以与其他程序和软件实现很好的交流。这样可以最大限度地利用各种资源的优势,从而使MATLAB编制的程序能够做到最大程度的优化。

MATLAB也存在些不足,其不足主要体现在两个方面。

首先,由于MATLAB是一种合成语言,因此,与一般的高级语言相比,用MATLAB编写的程序运行起来时间往往要长一些。当然,随着计算机运行速度的不断提高,这个缺点正在逐渐弱化。而且,由于用户在使用MATLAB编写程序时比较节省时间,就从编写程序到运行完程序的总的时间来说,使用MATLAB仍然比使用其他语言节省时间。

其次,MATLAB这套软件比较贵,一般的用户可能支付不起它的高昂费用。但是,由于MATLAB具有极高的编程效率,因此,购买MATLAB的昂贵费用在很大程度上可以由使用它所编写的程序的价值抵消。所以,就性价比来说,MATLAB绝对是物有所值。即使是这样,MATLAB 对于一般的用户来说,仍然显得过于昂贵。幸运的是,MATLAB 的开发公司还发行了一种比较便宜的MATLAB学生版,这对广大想学习和运用MATLAB的用户来说,无疑是一个极好的消息。MATLAB学生版与MATLAB的基本版本几乎一样,可以解决很多科研和学习中遇到的问题。

总而言之,相当于MATLAB的优点来说,它的缺点是微不足道的,而且,随着MATLAB版本的不断升级,它的缺点已经变得越来越不明显。掌握MATLAB,必将给我们的学习、科研和工作带来极大的帮助。

1.1.3 MATLAB的功能及系统组成

1.MATLAB的功能

1)数值计算功能

MATLAB具有出色的数值计算能力,它的计算速度快、精度高、收敛性好,而且所采用的数值计算算法都是国际公认的最先进的、最可靠的算法。高质量的数值计算功能为MATLAB赢得了声誉。

2)符号计算功能

在数学、应用科学和工程计算领域,用户往往要进行大量的符号计算和推导。为了增强MATLAB的符号计算功能,1993年,Math Works公司向加拿大滑铁卢大学购买了具有强大符号计算能力的数学软件Maple的使用权,并以Maple的内核作为符号计算的引擎,依靠其已有的库函数,实现了MATLAB的符号计算功能。

3)数据分析和可视化功能

在科学计算和研究工作中,技术人员经常会遇到大量的原始数据,而对数据的分析往往难于入手,如果能将这些数据以图形方式显示出来,不仅使数据间的关系清晰明了,而且对于揭示其内在本质往往有着非常重要的作用。在后面的章节中,将详细介绍MATLAB的绘图功能。

4)Simulink动态仿真功能

Simulink是MATLAB为模拟动态系统而提供的一个交互式程序。Simulink允许用户在屏幕上绘制框图来模拟一个系统,并动态地控制该系统。采用鼠标驱动方式,能够处理线性、非线性、连续、离散等多种系统。

MATLAB在以下的领域里解决各种问题是一个十分有效的工具:

●工业研究与开发。

●数学教学,特别是线性代数。所有基本概念都能涉及。

●在数值分析和科学计算方面的教学与研究,能够详细地研究和比较各种算法。

●在诸如电子学、控制理论和物理学等工程和科学学科方面的教学与研究。

●在诸如经济学、化学和生物学等有计算问题的所有其他领域中的教学与研究。

2.MATLAB的系统组成

MATLAB 是一种以数组和矩阵为元素的工程计算语言,主要包括以下几部分:MATLAB语言、MATLAB工作环境、MATLAB句柄图形控制系统、MATLAB数学函数库、MATLAB工具箱和MATLAB的应用程序接口。此外,MATLAB系统还提供了两个重要部件:Simulink和Toolboxes,它们在系统和用户编程中占据着重要的地位。

1)MATLAB语言

MATLAB编程语言是一种面向科学与工程计算的高级语言,允许按照数学习惯的方式编写程序。由于它符合人们思维方式的编写模式,使得该语言比BASIC、Fortran、C、Pascal等高级语言更容易学习和应用。MATLAB语言以向量和矩阵为基本的数据单元,包含流程控制语句(顺序、选择、循环、条件、转移和暂停等)、大量的运算符、丰富的函数、多种数据结构、I/O以及面向对象编程。这些既可以满足简单问题的求解,也适合于开发复杂的大型程序。MATLAB不仅是一套打好包的函数库,同时也是一种高级的、面向对象的编程语言。使用MATLAB能够卓有成效地开发自己的程序。MATLAB自身的许多函数,实际上也包括所有的工具箱函数,都是用M文件实现的。

2)MATLAB工作环境

MATLAB工作环境包括:变量查看器、当前路径选择菜单、命令历史记录窗口、当前工作空间窗口、命令控制窗口、图形处理窗口、程序编辑器、模型编辑器、GUI 编辑器和MATLAB附带的大量M文件。

3)MATLAB绘图功能

MATLAB句柄图形控制系统是MATLAB数据可视化的核心部分。它既包含对二维(2D)和三维(3D)数据的可视化、图形处理、动画制作等高层次的绘图命令,也包含可以修改图形局部及编制完整图形界面的低层次绘图命令。这些功能可使用户创建富有表现力的彩色图形。可视化工具包括:曲面宣染、线框图、伪彩图、光源、三维等位线图、图像显示、动画、体积可视化等。同时 MATLAB 还提供了句柄图形机制。使用该机制可对图形进行灵活的控制。使用GUIDE工具,可以方便地使用句柄图形创建自己的图形用户界面(GUI)。

4)MATLAB数学函数库

MATLAB拥有500多种数学、统计及工程函数,可使用户立刻实现所需的强大的数学计算功能。这些函数是由各领域的专家学者开发的数值计算程序,使用了安全、成熟、可靠的算法,从而保证了最大的运算速度和可靠的结果。MATLAB内置的强大数学函数库既包含了最基本的数学运算函数,如求和、正弦、余弦等函数,也包含了丰富的复杂函数,如矩阵特征值、矩阵求逆、傅里叶变换等函数。

5)MATLAB工具箱

工具箱是MATLAB的一个核心部分,在工具箱中拥有大量各学科通用的专业性很强的函数。为了支持不同的专业领域的用户。MATLAB提供了大量的面向专业领域的工具箱。另外,用户也可以根据自己的需要创建自己的工具箱。函数按学科及作用等分成不同的工具箱。其中包括了完整的专业函数集,用于对信号处理、控制系统设计、神经网络的特殊应用进行分析和设计。

使用MATLAB语言和MATLAB工具箱,用户可以专注于算法研究,编程只需要几行就可以完成,而且可以很快地绘制图形,从而迅速地进行多种算法的比较,从中找出最好的方案。MATLAB 工具箱中的大多数函数都是通过 M 文件编写的,用户可以查看其中的源码。通过适当的修改,便可以形成自己的特殊算法。

6)MATLAB应用程序接口

MATLAB应用程序接口是通过MATLAB的API库完成的。MATLAB通过对API库函数的调用可以与其他应用程序交换数据。同样,用户也可在其他语言中通过该接口函数库调用 MATLAB 的程序。MATLAB 应用程序接口中的内容包括:实时动态连接外部 C 或Fortran应用函数;在独立C或Fortran程序中调用MATLAB函数;I/O各种MATLAB及其他标准格式的数据文件;创建图文并貌的技术文档,包括MATLAB图形、命令,并可通过Word输出。

7)Simulink

Simulink是MATLAB附带的软件,它是对非线性动态系统进行仿真的交互式系统。在Simulink 交互式系统中,可利用直观的方框图构建动态系统,然后采用动态仿真的方法得到结果。

8)Toolboxes(工具箱)

针对各个应用领域中的问题,MATLAB 提供了许多实用函数,称为工具箱函数。MATLAB之所以能得到广泛应用,源于MATLAB众多的工具箱函数给各个领域应用人员带来的方便。

1.1.4 MATLAB的工作空间

MATLAB工作空间包含着本次MATLAB任务过程中所建立的变量,MATLAB提供了一组命令来管理、处理这些变量,同时还提供了专门的工作空间浏览器。

1.工作空间浏览器

在MATLAB环境下,输入命令可以在工作空间中建立一些变量,如图1-1所示。在图中,左上方为MATLAB的工作空间,它直观地显示出变量名、尺寸、占用的存储空间以及变量类型。在工作空间的菜单条中,有几个按钮,依次为“新建变量”、“打开变量显示”、“装入数据文件”、“保存工作空间”、“打印”和“删除变量”,可以用来对工作空间中的变量进行操作。当选定一个变量后,可以利用“打开变量显示”按钮,直观地显示出变量的内容;利用“删除变量”按钮,可以从工作空间中删去选定的变量;采用“保存工作空间”按钮,可以将工作空间保存在 mat 文件中,默认的文件名为 MATLAB.MAT;在以后打开MATLAB窗口时,可以利用“装入数据文件”按钮装入所保存的工作变量。

图1-1 工作空间浏览器

2.显示、清除变量

who命令和whos命令可在命令窗口中显示出工作空间中的变量列表。dear命令可清除工作空间中的所有变量,如果在clear之后加上变量名,则可以清除指定变量,例如:

        clear a b

只清除变量a和变量b。

3.保存和恢复工作空间

save命令可用来保存整个工作空间或者其中的一部分变量,相应的load命令可以恢复所保存的变量。例如,save entire可将整个工作空间保存在entire.mat文件中,命令save varl x y z可将变量x、y、z保存在varl.mat文件中,这些文件均为二进制文件,可直接由load命令得到恢复,例如,load entire、load varl。

在保存变量时,还可以指定文件的格式,这只需在save命令中加上适当的开关选项,如表1-1所列。

表1-1 save命令的开关选项

如果指定-v4选项,则MATLAB只能保存那些与MATLAB 4.x兼容的数据结构,即不能保存结构、单元阵列、多维阵列及对象。如果指定ASCII码格式,则每次只能保存一个变量。如果利用save保存多个变量,这时MATLAB也能建立ASCII码文件,但它不能由load命令恢复。

在save和load命令中,文件名、变量名可以用字符串表示,这时将save和load看作函数来调用,例如:

            save('var2','x','y')
            s='var2';
            load(s)

等同于:

            save var2 x y
            load var2

由于采用了字符串,使得保存多个文件或读取多个文件变得方便,例如,利用save命令产生从datal到datal0这样10个文件(分别保存变量x1~x10):

            for i=1:10
            load(['data' int2str(i)])
            end

利用通配符还可以有选择地保存或读取变量,例如:

            save multid x*
            load multid x*98

第一行完成在multid.mat中保存所有以x开头的变量,第二行完成从multid.mat中读取以x开头、以98结尾的所有变量,中间字符个数不限。