第7章MATLAB程序设计语言7.1MATLAB简介7.1.1MATLAB的产生与发展20世纪70年代后期,身为新墨西哥大学计算机科学系主任的CleveMoler,在给学生开线性代数课程时,他开始用业余时间为学生编写使用方便的LINPACK和EISPACK的接口程序。CleveMoler给这个接口程序取名为MATLAB,意思是“矩阵实验室(MATrixLABoratory)”。不久以后,MATLAB受到了学生的普遍欢迎,并且,MATLAB也成了应用数学界的一个术语。1984年,Mathworks公司成立,把MATLAB推向了市场,并继续MATLAB的研制和开发。MATLAB在市场上的出现,为各国科学家开发本学科相关软件提供了基础。1993年,MATLAB的第一个Windows版本MATLAB3.5k问世。同年,支持Windows3.x的MATLAB4.0版本推出。1993年11月,Mathworks公司又推出了MATLAB4.1版本,首次开发了SymbolicMath符号运算工具箱。其升级版本MATLAB4.2c在用户中有着广泛的应用。1997年,MATLAB5.0版本问世了。随后出现了它的升级版本MATLAB5.1/5.2/5.3。2000年下半年,Mathworks公司推出了他们的最新产品MATLAB6.0(R12)的试用版,并于2001年初推出了正式版。同前面的版本对比起来,MATLAB6.0在MATLAB5.x的基础上着重在计算速度上做了比较大的改善,计算速度有了明显的提高。另外,MATLAB6.0给人最直接的感受就是用户界面有了很大的改观,更加友好。目前,在社会上广为流传的是它的升级版本MATLAB6.1。7.1.2MATLAB的特点MATLAB语言主要有以下其他语言不可比拟的特点。1.功能强大MATLAB4.0以上(不包括4.0版本)的各版本,不仅在数值计算上继续保持着相对其他同类软件的绝对优势,而且还开发了自己的符号运算功能。这样,用户就不必像以前的计算人员一样在掌握MATLAB的同时还要学习另一种符号运算软件。用户只要学会了MATLAB就可以方便地处理诸如矩阵变换及运算、统计及优化等问题了。2.语言简单MATLAB是个成功的语言,它允许用户以数学形式的语言编写程序,比BASIC语言、FORTRAN语言和C语言等更接近于书写计算公式的思维方式。它的操作和功能函数指令就是以平时计算机和数学书上的一些简单的英文单词表达的。由于它是用C语言开发的,它的不多的几个程序流控制语句同C语言差别甚微,初学者很容易掌握。3.扩充能力强、可开发性强MATLAB能发展到今天这种程度,它的可扩充性和可开发性起着不可估量的作用。MATLAB本身就像一个解释系统,对其中的函数程序的执行以一种解释执行的方式进行。这样最大的好处是MATLAB完全成了一个开放的系统,用户可以方便地看到函数的源程序,也可以方便地开发自己的程序,甚至创建自己的“库”。另外,MATLAB并不“排他”,MATLAB可以方便地与FORTRAN、C等语言进行连接,以充分利用各种资源。用户只需将已有的EXE文件转换成MEX文件,就可以方便地调用有关程序和子程序。4.编程易、效率高从形式上看,MATLAB程序文件是一个纯文本文件,扩展名为.m。用任何字处理软件都可以对它进行编写和修改,因此程序易调试,人机交互性强。7.2MATLAB环境7.2.1MATLAB桌面平台1.启动MATLAB启动MATLAB有多种方式,最常用的方法就是双击系统桌面的MATLAB图标,也可以在开始菜单的程序选项中选择MATLAB快捷方式。初次启动MATLAB后,将进入MATLAB默认设置的桌面平台。2.桌面平台默认设置情况下的桌面平台包括6个窗口,分别是MATLAB主窗口、命令窗口、历史窗口、当前目录窗口、发行说明书窗口和工作间管理窗口。下面分别对各窗口做简单介绍。(1)MATLAB主窗口与MATLAB的早期版本不同的是,MATLAB6.1增加了一个主窗口,其他的几个窗口都包含在这个大的主窗口中。(2)命令窗口在主窗口的“View”菜单下选择“CommandWindow”命令,可以打开或关闭MATLAB的命令窗口。其中“”为运算提示符,表示MATLAB正处在准备状态。当在提示符后输入一段运算式并按Enter键后,MATLAB将给出计算结果,然后再次进入准备状态。(3)历史窗口在主窗口的“View”菜单下选择“CommandHistory”命令,可以打开或关闭MATLAB的历史窗口。(4)当前目录窗口在主窗口的“View”菜单下选择“CurrentDirectory”命令,可以打开或关闭MATLAB的当前目录窗口。(5)发行说明书窗口发行说明书窗口是MATLAB6.x版本所特有的,用来说明用户所拥有的Mathworks公司产品的工具包、演示以及帮助信息。在主窗口的“View”菜单下选择“LaunchPad”命令,可以打开或关闭该窗口。(6)工作间管理窗口在主窗口的“View”菜单下选择“Workspace”命令,可以打开或关闭MATLAB的工作间管理窗口,工作间管理窗口是MATLAB的重要组成部分。7.2.2MATLAB的程序编辑器MATLAB提供了一个程序编辑/调试器。在MATLAB的命令窗口中有三种方式可进入程序编辑/调试器:1。选择菜单栏的“File”项中的“New”或“Open”项。2。选择工具栏的“New”或“Open”项。3。在命令窗口中输入edit命令。在程序编辑/调试器里,不同的文本内容分别用不同颜色的字体显示。其中MATLAB的关键字如for、if、end等为蓝色,注释语句为绿色,字符串为红色,其他文本为黑色,这样的颜色设置非常醒目,便于调试。MATLAB下的M函数通常是由function语句引导的,其基本格式为:Function返回变量列表:函数名(输入变量列表)%注释说明语句段函数体语句返回变量如果是多个的话(多于1个),则应该用方括号括起来。有了M函数之后,可以用下列形式进行函数调用:返回变量列表:函数名(输入变量的取值)注意:两个函数名必须一致。例如,实现加减法运算的M函数调用方法如下:Function[outl,out2]=addec(inl,in2)outl=inl+in2;out2=inl-in2;然后,在MATLAB的命令窗口调用这个函数文件:[a,b]=addec(10,20)disp([a,b])%在命令窗口输出a、b的值显示结果为:30107.2.3MATLAB帮助系统与其他科学计算软件相比,MATLAB的一个非常突出的优点就是帮助系统非常完善。它的帮助系统大致可分为以下三大类。1.联机帮助系统与以往版本的联机帮助系统不同,MATLAB6.1的联机帮助系统更为系统全面,简直就是一本MATLAB的百科全书。进入MATLAB联机帮助系统的方法很多,下面介绍其中的三种。•直接按下MATLAB主窗口中的按钮。•选择“Help”下拉菜单的前四项中的任何一项。•在命令窗口中执行helpwin、helpdesk或doc。以上三种方法都可以进入联机帮助系统窗口。2.命令窗口查询帮助熟练的用户可以使用更为快速的命令窗口查询帮助。这些帮助主要可以分为:help系列、lookfor命令和其他常用帮助命令。3.联机演示系统单击MATLAB主窗口菜单的“Help”|“Demos”选项,或在命令窗口输入demo,将进入MATLAB的演示界面。7.3MATLAB的基本应用7.3.1MATLAB数值运算基础1.变量与常量(1)变量在MATLAB语言中变量的命名遵守如下规则:•变量名区分大小写;•变量名长度不超过31位,第31个字符之后的字符将被忽略;•变量名以字母开头,变量名中可包含字母、数字、下划线,但不能使用标点。(2)常量MATLAB有一些预定义的变量,这些特殊的变量称为常量。2.矩阵的基本运算(1)矩阵变量的赋值在MATLAB中,矩阵的输入是很直观的,矩阵的元素用[]括起来,相邻元素之间用逗号或空格分隔,而采用分号来换行。如果在上述赋值的式子末尾加一个分号,则矩阵的内容就不再屏幕上显示了。当矩阵的元素较多不能在同一行内写下时,可以在该行的末尾加三个点号(……)称为续行符号,表示下面的一行应该紧接在前一行上。在一个语句较长时,也可以使用续行符号。在MATLAB中还经常使用一些初等函数矩阵,常用的有:zeros(m,n)mn全零矩阵ones(m,n)mn全1矩阵eye(n)mn单位矩阵rand(m,n)mn随机矩阵,0~1之间均匀分布randn(m,n)mn随机矩阵,0~1之间正态分布(2)矩阵的基本运算MATLAB中的矩阵运算只要符合矩阵维数的要求即可。表7-2、7-3分别列出了MATLAB常用的算术运算和关系运算(包括逻辑运算)符。除上述的基本运算外,还有一些矩阵专用运算,例如:inv(a)表示对a矩阵求逆fliplr(a)表示将矩阵a进行左右翻转flipud(a)表示将矩阵a进行上下翻转rot90(a)表示将矩阵a的元素旋转903.数值分析(1)极小化在数值分析中,经常要求确定函数的极值,即最大值或最小值。MATLAB提供了fmin和fmins两个函数,分别用来寻找一维和n维函数的极值。其中fmin()函数的调用格式为:Xmin=fmin(函数名,x1,x2)其中x1,x2分别为x所在区间两端的值,Xmin为函数最小值对应的x的值。利用fmin()函数也可以寻找最大值点,只要重新定义函数为-f(x)即可。(2)求零点MATLAB提供了求函数零极点的函数,函数fzero()用于寻找一维函数的过零点(3)积分MATLAB提供了三个函数trapz、quad和quad8计算函数在有限区域内的积分。trapz()是通过计算梯形面积来近似函数的积分;quad()使用Simpson递归方法;quad8()使用Newton-costes递归方法进行数值积分。quad()函数、quad8()函数的调用格式为:y=quad(函数名,a,b,tol);y=quad8(函数名,a,b,tol);其中a,b分别为定积分的上下限,tol为变步长积分用的误差限,如果用户不给出误差限,将自动地假定为tol=le-3。通常,quad8比quad更精确些。(4)微分MATLAB提供了一个有限插分函数diff,可以做数值微分,但使用有限插分进行近似将导致噪声的放大,造成较差的结果。(5)FFT变换FFT变换即快速傅立叶变换,是数据分析的基本方法。MATLAB提供了很多实用的数据分析函数,表7-4列出了一些常用的数值分析函数。7.3.2MATLAB绘图从最原始版本的MATLAB开始,图形功能就已经成为基本的功能之—。随着MATLAB版本的逐步升级,MATLAB的图形工具箱从简单的点、线、面处理发展到了集二维图形、三维图形甚至四维表现图和对图形进行着色、消隐、光照处理、渲染及多视角处理等多项功能于一身的强大功能包。1.二维图形①plot(Y)若Y为向量,则绘制的图形以向量索引为横坐标值、以向量元素值为纵坐标值。②plot(X,Y)一般来说是绘制向量Y对向量X的图形。如果X为一矩阵,则MATLAB绘出矩阵行向量或列向量对向量Y的图形,条件向量的元素个数能够和矩阵的某个维数相等。若矩阵是个方阵,则默认情况下将绘制矩阵的列向量图形。③plot(X,Y,s)如果想绘制不同的线型、标识、颜色等的图形时,可调用此形式。其中s为一字符,可以代表不同线型、点标、颜色。可用的字符及意义见表7-5。若在同一幅图中出现多条曲线时,MATLAB会自动地把不同曲线绘制成不同的颜色,以进行简单的区别。如果要用不同的线型和颜色来绘制多条曲线时,可以用表7-5中的选项来定义。带有选项的曲线绘制命令的格式为:plot(x轴变量1,y轴变量1,’选项1’,x轴变量2,y轴变量2,’选项2’,)绘制完曲线后,MATLAB还允许用户使用它提供的一些特殊函数来进一步修饰画出的图形,如:利用grid命令可以在坐标轴上加虚线型