《MATLAB4-1第3章程序设计初步.ppt》由会员分享,可在线阅读,更多相关《MATLAB4-1第3章程序设计初步.ppt(85页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第3章章 matlab的程序设计初步的程序设计初步1MATLAB SDUOUTLINEMATLAB的的m文件的创建和使用文件的创建和使用MATLAB程序控制结构程序控制结构程序设计程序设计调试的基本方法调试的基本方法 2MATLAB SDU什么是什么是m文件文件用户如想灵活应用matlab去解决实际问题,充分调用matlab的科学技术资源,就需要编辑m文件包含matlab语言代码的文件称为m文件,其扩展名为m。编辑m文件可使用各种文本编辑器。3MATLAB SDU2.m文件文件 m文件的语法类似于文件的语法类似于c语言,但又有其自身特语言,但又有其自身特点。它只是一个简单的点。它只是一个简单
2、的ASCII码文本文件,执码文本文件,执行程序时逐行解释运行程序,行程序时逐行解释运行程序,matlab是解释是解释性的编程语言。性的编程语言。m文件有两类文件有两类 独立的独立的m m文件文件 称命令文件,脚本称命令文件,脚本(script)script)可调用可调用m m文件文件 称函数文件称函数文件 FunctionsFunctions4MATLAB SDU表3-1脚本文件与函数文件的区别脚本文件脚本文件函数文件函数文件输入、输入、输出输出没有输入参数,不返回没有输入参数,不返回输出参数输出参数可以带输入参数也可返回可以带输入参数也可返回输出参数输出参数变量操变量操作作只操作基本工作空间
3、变只操作基本工作空间变量量可操作基本工作空间变量可操作基本工作空间变量和局部变量和局部变量调用方调用方式式直接运行直接运行必须以函数调用方式必须以函数调用方式5MATLAB SDUReview:matlab的工作模式的工作模式指令驱动模式指令驱动模式 通常通常matlab以指令驱动模式工作,即在以指令驱动模式工作,即在matlab 窗口下当用户输入单行指令时,窗口下当用户输入单行指令时,matlab 立即处理这条指令,并显示结果,立即处理这条指令,并显示结果,这就是这就是matlab命令行方式。命令行方式。命令行操作时,命令行操作时,matlab窗口只允许一次窗口只允许一次执行一行上的一个或几
4、个语句。执行一行上的一个或几个语句。6MATLAB SDU例如:x1=0:10 x1=0 1 2 3 4 5 6 7 8 9 10 x2=0:3:11x2=0 3 6 9x3=11.5:-3:0 x3=11.5000 8.5000 5.5000 2.50007MATLAB SDUx1=0:10,x2=0:3:11,x3=11.5:-3:0 x1=0 1 2 3 4 5 6 7 8 9 10 x2=0 3 6 9x3=11.5000 8.5000 5.5000 2.5000命令行方式程序可读性差,而且不能存储,命令行方式程序可读性差,而且不能存储,对于对于处理复杂问题和大量数据时是不方便的处理复
5、杂问题和大量数据时是不方便的,应编写成能存储的程序文件。应编写成能存储的程序文件。8MATLAB SDUm文件模式文件模式将将matlab语句构成的程序存储成以语句构成的程序存储成以m为扩展为扩展名的文件,然后再执行该程序文件,这种工名的文件,然后再执行该程序文件,这种工作模式称为程序文件模式。作模式称为程序文件模式。程序文件不能在指令窗口下建立,因为指令程序文件不能在指令窗口下建立,因为指令窗口只允许一次执行一行上的一个或几个语窗口只允许一次执行一行上的一个或几个语句句。9MATLAB SDUM 文件的创建和编辑文件的创建和编辑 不管是创建或编辑脚本文件还是函数文件,不管是创建或编辑脚本文件
6、还是函数文件,可以使用各种文本编辑器:可以使用各种文本编辑器:例如Windows系统下的记事本,其它商业化软件UltraEdit,EditPlus等等,但是储存格式必须是但是储存格式必须是 ASCII 的格式,并且必的格式,并且必须以须以.m 为后缀名。为后缀名。通常情况下可以直接使用MATLAB中内置的M文件编辑器。10MATLAB SDU2.点击点击file Save Workspace As 将工作空间中的内容存入文件。*edit 用各种edit 编辑器编制m文件。edit 用matlab自带的编辑器编制m文件。word 用word编辑m文件。m文件编辑器的设定文件编辑器的设定 m文件编
7、辑器可自己设定,设定方法是matlab命令窗口 options 菜单下点击 Edit Preference 选定m文件编辑器。11MATLAB SDUm文件编辑器缺省设置是文件编辑器缺省设置是 matlab editor还可设成:其他的还可设成:其他的Text Editor 从从“file”“preference”editor/debugger设置设置 注意:注意:所创建的所创建的m文件必须纳入文件必须纳入matlab搜索路搜索路 径后,才能在径后,才能在matlab命令窗口运行。命令窗口运行。12MATLAB SDUmatlab搜索路径的设置 matlab 缺省路径是c:matlabbin.
8、用pathtool路径浏览器设定当前目录 “file”-“set path”方法设定当前目录13MATLAB SDUmatlab文件的数据文件类型文件的数据文件类型mat数据文件数据文件.mat mat文件是文件是matlab以标准二进制格式保存以标准二进制格式保存的数据文件,可将工作空间中有用的数据变的数据文件,可将工作空间中有用的数据变量保存下来。量保存下来。mat文件的生成和调用是由函数文件的生成和调用是由函数save和和load完成的完成的。14MATLAB SDUM文件结构文件结构良好习惯建议良好习惯建议1.程序尽量做到简单易懂;2.所有变量都用小写,并且含义清晰明了,如用year作
9、为变量保存年份等;3.带有必要的注释,这样有助于他人和自己能快速知道程序执行的目的或者算法的含义,另外也可以有助于追溯记录程序的更新过程。15MATLAB SDU脚本(命令)文件(脚本(命令)文件(Script)命令文件命令文件 简单的简单的m文件文件 命令文件实际上是一串指令的集合,与在命令窗口逐行执行文件中命令文件实际上是一串指令的集合,与在命令窗口逐行执行文件中的所有指令,其结果是一样的。没有输入输出参数。的所有指令,其结果是一样的。没有输入输出参数。“脚本脚本”本身反映这样一个事实:本身反映这样一个事实:MATLAB只是按文件只是按文件所写的指令执行。所写的指令执行。M脚本(命令)文件
10、的构成较简单,其脚本(命令)文件的构成较简单,其特点特点是:是:它只是一串按用户意图排列而成的(包括控制流向指令在内的)它只是一串按用户意图排列而成的(包括控制流向指令在内的)MATLAB指令集。指令集。脚本文件运行后,所产生的所有变量都驻留在脚本文件运行后,所产生的所有变量都驻留在MATLAB基本工基本工作空间作空间(Base workspace)中。只要不使用中。只要不使用clear指令加以清除,指令加以清除,且且MATLAB指令窗不关闭,这些变量将一直保存在基本工作空指令窗不关闭,这些变量将一直保存在基本工作空间中。基本工作空间随间中。基本工作空间随MATLAB的启动而产生;只有关闭的启
11、动而产生;只有关闭MATLAB时,该基本空间才被删除。时,该基本空间才被删除。16MATLAB SDUM函数文件(函数文件(Function)与脚本(命令)文件不同,函数文件与脚本(命令)文件不同,函数文件(Function file)犹如一个犹如一个“黑箱黑箱”。从外界只能看到传给它。从外界只能看到传给它的输入量和送出来的计算结果,而内部运作是藏的输入量和送出来的计算结果,而内部运作是藏而不见的。而不见的。17MATLAB SDU函数文件的函数文件的特点特点:从形式上看,与脚本文件不同,函数文件的第一行总是以从形式上看,与脚本文件不同,函数文件的第一行总是以“function”引导的引导的“
12、函数申明行函数申明行”(Function declaration line)。该。该行还罗列出函数与外界联系的全部行还罗列出函数与外界联系的全部“标称标称”输入输出宗量。但对输入输出宗量。但对“输输入输出宗量入输出宗量”的标称数目并没有限制,即可以完全没有输入输出宗量,的标称数目并没有限制,即可以完全没有输入输出宗量,也可以是任意数目。也可以是任意数目。MATLAB允许使用比允许使用比“标称数目标称数目”较少的输入输出宗量,实现对函数较少的输入输出宗量,实现对函数的调用。的调用。从运行上看,与脚本文件运行不同,每当函数文件运行,从运行上看,与脚本文件运行不同,每当函数文件运行,MATLAB就就
13、会专门为它开辟一个临时工作空间,称之谓会专门为它开辟一个临时工作空间,称之谓函数工作空间函数工作空间(Function workspace)。所有中间变量都存放在函数工作空间中。当执行完文件。所有中间变量都存放在函数工作空间中。当执行完文件最后一条指令或遇到最后一条指令或遇到return时,就结束该函数文件的运行,同时该临时,就结束该函数文件的运行,同时该临时函数空间及其所有的中间变量就立即被清除。时函数空间及其所有的中间变量就立即被清除。函数空间随具体函数空间随具体M函数文件的被调用而产生,随调用结束而删除。函函数文件的被调用而产生,随调用结束而删除。函数空间是数空间是相对独立的相对独立的、
14、临时的临时的。在。在MATLAB整个运行期间,可以产生整个运行期间,可以产生任意多个临时函数空间。任意多个临时函数空间。假如在函数文件中,发生对某脚本文件的调用,那么该脚本文件运行假如在函数文件中,发生对某脚本文件的调用,那么该脚本文件运行产生的所有变量都存放于该函数空间之中,而不是存放在基本空间。产生的所有变量都存放于该函数空间之中,而不是存放在基本空间。18MATLAB SDU函数函数m文件的格式:文件的格式:function 返回变量返回变量=函数名(输入变量)函数名(输入变量)注释说明语句段注释说明语句段 程序语句段程序语句段特定规则:特定规则:1.函数函数m文件第一行必须以单词文件第
15、一行必须以单词function作为引作为引导词,必须遵循如下形式:导词,必须遵循如下形式:function=()2.m文件的文件名必须是文件的文件名必须是.m。3.程序中的变量均为局部变量,不保存在工作程序中的变量均为局部变量,不保存在工作空间中。其变量只在函数运行期间有效。空间中。其变量只在函数运行期间有效。19MATLAB SDUM函数文件示例function sa=circle(r,s)%CIRCLEplot a circle of radii r in the line specified by s.%r指定半径的数值指定半径的数值%s指定线色的字符串指定线色的字符串%sa圆面积圆面积
16、%circle(r)利用蓝实线画半径为利用蓝实线画半径为 r 的圆周线的圆周线.%circle(r,s)利用串利用串 s 指定的线色画半径为指定的线色画半径为 r 的圆周线的圆周线.%sa=circle(r)计算圆面积,并画半径为计算圆面积,并画半径为 r 的蓝色圆面的蓝色圆面.%sa=circle(r,s)计算圆面积,并画半径为计算圆面积,并画半径为 r 的的 s 色圆面色圆面.%编写于编写于2001年年4月月7日,修改于日,修改于2002年年8月月27日。日。if nargin2 error(输入宗量太多。输入宗量太多。);end;if nargin=1 s=b;end;20MATLAB
17、SDU函数申明(定义)行函数申明(定义)行(Function declaration line):位于函数文件的首行,以位于函数文件的首行,以MATLAB关键字关键字function开头,函数名以及函数的输入输出宗开头,函数名以及函数的输入输出宗量都在这一行定义。量都在这一行定义。21MATLAB SDUH1行行(The first help text line):紧随函数申明行之后以紧随函数申明行之后以%开头的第一注释行。开头的第一注释行。按按MATLAB自身文件的规则,自身文件的规则,H1行包含:大行包含:大写体的函数文件名;运用关键词简要描述的函写体的函数文件名;运用关键词简要描述的函数
18、功能。该数功能。该H1行供行供lookfor关键词查询和关键词查询和help在线帮助使用。在线帮助使用。22MATLAB SDU在线帮助文本在线帮助文本(Help text)区区:H1行及其之后的连续以行及其之后的连续以%开头的所有注释行开头的所有注释行构成整个在线帮助文本。它通常包括:函数输构成整个在线帮助文本。它通常包括:函数输入输出宗量的含义,调用格式说明。入输出宗量的含义,调用格式说明。23MATLAB SDU编写和修改记录编写和修改记录:与在线帮助文本区相隔一个空行,也以与在线帮助文本区相隔一个空行,也以%开头,开头,标志编写及修改该标志编写及修改该M文件的作者和日期、版本文件的作者
19、和日期、版本记录。它用于软件档案管理。记录。它用于软件档案管理。24MATLAB SDU函数体函数体(Function body):为清晰起见,它与前面的注释行以空行相隔。为清晰起见,它与前面的注释行以空行相隔。这部分内容由实现该这部分内容由实现该M函数文件功能的函数文件功能的MATLAB指令组成。它接收输入宗量,进行指令组成。它接收输入宗量,进行程序流控制,得到输出宗量。其中为阅读、理程序流控制,得到输出宗量。其中为阅读、理解方便,也配置适当的空行和注释。若仅从运解方便,也配置适当的空行和注释。若仅从运算角度看,惟有函数申明行和函数体两部分是算角度看,惟有函数申明行和函数体两部分是构成构成M
20、函数文件所必不可少的。函数文件所必不可少的。25MATLAB SDUfunction r=rank(A,tol)%RANK Matrix rank.%RANK(A)provides an estimate of the number of linearly%independent rows or columns of a matrix A.%RANK(A,tol)is the number of singular values of A%that are larger than tol.%RANK(A)uses the default tol=max(size(A)*norm(A)*eps.%
21、Class support for input A:%float:double,single%Copyright 1984-2004 The MathWorks,Inc.%$Revision:5.11.4.2$Date:2004/04/10 23:30:08$s=svd(A);if nargin=1 tol=max(size(A)*eps(max(s);endr=sum(s tol);.程序部分26MATLAB SDUmatlab内置函数文件内置函数文件 matlab自定义的函数文件称内置函数文件自定义的函数文件称内置函数文件 调用内置函数的方法:使用函数名并给出相应的入调用内置函数的方法:使
22、用函数名并给出相应的入口、出口参数即可。口、出口参数即可。例如:sin.m函数 调用格式:y=sin(2*x)实际应用中:x=0:2*pi/180:2*pi;y=sin(2*x)plot(x,y)M 函数文件分两类:内置和自定义函数文件分两类:内置和自定义27MATLAB SDU又如又如 sqrt(x)求求x的平方根的平方根 abs(x)求求x的绝对值的绝对值 det(a)求行列式的值求行列式的值 等等。等等。matlab拥有大量的内置数学函数,供我们在拥有大量的内置数学函数,供我们在数值运算和符号运算中调用。数值运算和符号运算中调用。28MATLAB SDUII 函数函数m文件文件 需要输入
23、变量,返回输出变量需要输入变量,返回输出变量 matlab用户可以根据需要编辑自己的m文件,它们可以像库函数一样方便的调用,从而极大地扩展了matlab 的能力。对于某一类特殊问题,如创建了许多m函数文件,则可形成新的工具箱。这种用matlab语言创建定义新的matlab函数的功能,正体现了matlab语言强大的扩展功能。29MATLAB SDUM文件命名以及调用对于脚本文件脚本文件的命名,规则和变量的命名规则一致,即必须以字母开头,其余部分可以是字母、数字和下划线的任意组合。调用脚本文件时只需要在MATLAB的主窗口输入脚本文件的名字(不带后缀),脚本文件内的内容就会得到执行。30MATLA
24、B SDU函数文件命名与调用函数文件命名与调用函数文件的命名规则除了和变量的命名规则函数文件的命名规则除了和变量的命名规则一致以往,另外惯用的规则是函数文件名一致以往,另外惯用的规则是函数文件名和函数名相一致。和函数名相一致。调用方式调用方式 out1,out2,.,outN=functionname(in1,in2.inN)输出方括号,输入小括号输出方括号,输入小括号31MATLAB SDU例例利用函数文件,实现直角坐标利用函数文件,实现直角坐标(x,y)与与极坐标极坐标(,)之间的转换之间的转换函数文件函数文件tran.m:function rho,theta=tran(x,y)rho=s
25、qrt(x*x+y*y);theta=atan(y/x);调用调用tran.m的命令文件的命令文件main1.m:x=input(Please input x=:);y=input(Please input y=:);rho,the=tran(x,y);rho the32MATLAB SDU补充:函数的充:函数的递归调用用递归调用:函数调用其本身称为函数的递归调用例如求n!阶乘本身是用递归形式进行定义的:因此定义阶乘函数文件可以采用递归调用33MATLAB SDUfunction f=factor(n)If n=1 f=1;else f=factor(n-1)*n;end34MATLAB SD
26、UM文件和内部伪代码文件和内部伪代码调用调用M文件时,文件时,matlab会对该文件进行解析,并会对该文件进行解析,并生成相应的内部伪代码(生成相应的内部伪代码(pseudocode,pcode)存放在内存,再次调用时直接调用内存)存放在内存,再次调用时直接调用内存中的中的pcode,避免对相同避免对相同M文件重复解析。文件重复解析。可以用可以用pcode 产生伪代码:难以阅读,保密性产生伪代码:难以阅读,保密性好好35MATLAB SDU局部变量和全局变量局部变量和全局变量局部(局部(Local)变量)变量它存在于函数空间内部的中间变量,产生于该函数的运行过程它存在于函数空间内部的中间变量,
27、产生于该函数的运行过程中,其影响范围也仅限于该函数本身。中,其影响范围也仅限于该函数本身。全局(全局(Global)变量)变量通过通过global指令,指令,MATLAB也允许几个不同的函数空间以及基也允许几个不同的函数空间以及基本空间共享一个变量。这种被共享的变量称为全局变量。每个本空间共享一个变量。这种被共享的变量称为全局变量。每个希望共享全局变量的函数或希望共享全局变量的函数或MATLAB基本工作空间,必须逐个基本工作空间,必须逐个用用global对具体变量加以专门定义。没采用对具体变量加以专门定义。没采用global定义的函数定义的函数或基本空间,将无权享用全局变量。或基本空间,将无权
28、享用全局变量。如果某个函数的运作使全局变量的内容发生了变化,那么其他如果某个函数的运作使全局变量的内容发生了变化,那么其他函数空间以及基本工作空间中的同名变量也就随之变化。函数空间以及基本工作空间中的同名变量也就随之变化。除非与全局变量联系的所有工作空间都被删除,否则全局变量除非与全局变量联系的所有工作空间都被删除,否则全局变量依然存在。依然存在。l通常情况下会选取全部是大写字母的命名为全局变量名。全局变通常情况下会选取全部是大写字母的命名为全局变量名。全局变量的使用可以减少参数的传递,如果合理的使用可以提高程序执量的使用可以减少参数的传递,如果合理的使用可以提高程序执行效率,但是同时会损害函
29、数的封装性,增加程序调试和维护的行效率,但是同时会损害函数的封装性,增加程序调试和维护的难度,因此一般不难度,因此一般不推荐使用推荐使用 36MATLAB SDU参数传递参数传递 在调用函数时,在调用函数时,MATLAB用两个永久变量用两个永久变量nargin和和nargout分别记录调用该函数时的输入实参和输出分别记录调用该函数时的输入实参和输出实参的个数。只要在函数文件中包含这两个变量,实参的个数。只要在函数文件中包含这两个变量,就可以准确地知道该函数文件被调用时的输入输出就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理。参数个数,从而决定函数如何进行处理。n
30、argin在函数体内,用于获取实际输入宗量在函数体内,用于获取实际输入宗量nargout在函数体内,用于获取实际输出宗量在函数体内,用于获取实际输出宗量nargin(fun)获取获取fun指定函数的标称输入宗指定函数的标称输入宗量数量数nargout(fun)获取获取fun指定函数的标称输出指定函数的标称输出宗量数宗量数37MATLAB SDU例例3-4 定义一个函数,当输入1个参数求其绝对值,输入2个参数求其平方根函数文件内容为function c=calnar(a,b)%calnar.m:example2-4%example2-4 if(nargin=1)c=abs(a);elseif(n
31、argin=2)c=sqrt(a.2+b.2);end38MATLAB SDU主函数和子函数主函数和子函数多个函数代码,第一个是主函数,其它是多个函数代码,第一个是主函数,其它是子函数;主函数可外部调用,子函数不行;子函数;主函数可外部调用,子函数不行;多个子函数排列次序可改变多个子函数排列次序可改变例:定义了一个例:定义了一个stat函数,可以求一个向函数,可以求一个向量的均值和均方差,量的均值和均方差,stat.m文件内容如下:文件内容如下:function mean,stdev=stat(x)n=length(x);mean=avg(x,n);stdev=sqrt(sum(x-avg(x
32、,n).2)/n);function mean=avg(x,n)mean=sum(x)/n;39MATLAB SDU子函数的性质:子函数的性质:每个子函数的第一行是其自己的函数申明行。每个子函数的第一行是其自己的函数申明行。在在M函数文件内,主函数的位置不可改变,但子函数的函数文件内,主函数的位置不可改变,但子函数的排列次序可任意改变。排列次序可任意改变。子函数只能被处于同一文件的主函数或其他子函数调用。子函数只能被处于同一文件的主函数或其他子函数调用。在在M函数文件中,任何指令通过函数文件中,任何指令通过“名字名字”对函数进行调对函数进行调用时,子函数的优先级仅次于内装函数。用时,子函数的优
33、先级仅次于内装函数。同一文件的主函数、子函数的工作空间都是彼此独立的。同一文件的主函数、子函数的工作空间都是彼此独立的。各函数间的信息,或通过输入输出宗量传递,或通过全各函数间的信息,或通过输入输出宗量传递,或通过全局变量传递,或通过跨空间指令传递。局变量传递,或通过跨空间指令传递。help,lookfor等帮助指令都不能提供关于子函数的任何等帮助指令都不能提供关于子函数的任何帮助信息。帮助信息。(需要通过主函数需要通过主函数)40MATLAB SDU二、二、MATLAB控制流控制流for循环结构循环结构while循环结构循环结构 if-else-end分支结构分支结构 switch-case
34、结构结构 try-catch结构结构 控制程序流的其它常用指令控制程序流的其它常用指令 41MATLAB SDU1、for循环结构循环结构for x=array(commands)end42MATLAB SDU1、for循环结构循环结构For循环的结构以及含义和其他高级语言的结构和含义基循环的结构以及含义和其他高级语言的结构和含义基本一致。本一致。一个简单的一个简单的for循环示例。循环示例。和其他语言一样和其他语言一样for循环可以有多重循环。循环可以有多重循环。例:利用例:利用for循环求循环求1!+2!+3!+5!的值!的值43MATLAB SDU例:利用for循环求1!+2!+3!+5
35、!的值 sum=0;for i=1:5 pdr=1;for k=1:i pdr=pdr*k;end sum=sum+pdr;endsum=15344MATLAB SDU2、while循环结构循环结构while expression(commands)end与与for循环设置固定循环次数来执行循环体相比循环设置固定循环次数来执行循环体相比较,较,MATLAB中的中的while循环是应用逻辑表达式循环是应用逻辑表达式来设置与判断是否执行循环体,循环次数依逻来设置与判断是否执行循环体,循环次数依逻辑判断条件来决定,循环次数是不固定的。辑判断条件来决定,循环次数是不固定的。例:例:Fibonacci数
36、组的元素满足数组的元素满足Fibonacci规则:规则:a k+2=ak+ak+1,(k=1,2,);且且a1=a2=1。现要求该。现要求该数组中第一个大于数组中第一个大于10000的元素。的元素。45MATLAB SDU46MATLAB SDUa(1)=1;a(2)=1;i=2;while a(i)10000 a(i),break;%跳出所在的一级循环。跳出所在的一级循环。end;end,i 49MATLAB SDU3、if-else-end分支结构分支结构if-else-end指令为程序流提供了一种分支结构,它最指令为程序流提供了一种分支结构,它最常用的使用方式:常用的使用方式:单分支单分
37、支双分支双分支多分支多分支if expression (commands)endif expression (commands1)else (commands2)endif expression1 (commands1)elseif expression2 (commands2)else (commandsk)end常用常用常用常用该使用方法常被该使用方法常被switch-case所取所取代代50MATLAB SDU执行过程执行过程51MATLAB SDU注意注意在if条件结构中,elseif语句组部分可以没有(0个),也可以是多个(m个),但是else语句组部分最多是一个。if-end的一一
38、配对:也就是说有一个if引导的条件,必然需要一个end来对应。52MATLAB SDU例例一个简单的分支结构一个简单的分支结构两个分支结构两个分支结构多分支结构多分支结构53MATLAB SDU%一个简单的分支结构clearcost=10;number=input(number=);if number8 sums=number*0.95*cost;end,sums%两个分支结构x=input(x=);if x=5000 sum=15*n;else if 5000n&n=2500%&:为逻辑与为逻辑与 sum=16*n;else if 2500n&n=1000 sum=17*n;else if
39、1000n&n=500 sum=18*n;else if 500n&n=250 sum=19*n;else if 250n&n=100 sum=20*n;else if 100n&n=50 sum=22*n;else if 50n&n=10 sum=24*n else sum=28*nend;end;end;end;end;end;end;end%请注意请注意end的个数的个数disp(购买苹果的件数购买苹果的件数);n,disp(金额金额);sum,disp(元元);56MATLAB SDU4、switch-case结构结构switch ex case test1(commands1)cas
40、e test2 (commands2)case testk (commandsk)otherwise(commands)end57MATLAB SDU58MATLAB SDU例例2-10 用switch结构编写程序,实现判断键盘输入的任意一个实数是正数、负数还是零。用switch结构实现的程序内容如下:va=input(请输入数值);t=va/abs(va);switch t case-1 disp(输入为负数);case 1 disp(输入为正数);otherwise disp(输入为零);;end59MATLAB SDU注意注意switch后面的表达式的值既可以是数值,也可以是字符串。每一
41、个case子句后面可以处理多个条件,此时,多个条件要用单元数组单元数组的形式表示,当其中switch的表达式的值只需要满足单元数组的任一值都会执行相对应的语言组。60MATLAB SDU例例2-11 用switch结构编写程序,实现判断键盘输入的任一110的数为偶数、奇数还是其他。用switch结构编写程序内容如下:va=input(请输入数值);switch va case 1,3,5,7,9 disp(输入为奇数);case 2,4,6,8,10 disp(输入为偶数);otherwise disp(输入非奇非偶);;end61MATLAB SDU5、try-catch结构结构错误控制指令
42、错误控制指令try(commands1)组命令组命令1总被执行。若总被执行。若正确,则跳出此结构正确,则跳出此结构catch(commands2)仅当组命令仅当组命令1出现执行出现执行错误,组命令错误,组命令2才被执才被执行行end63MATLAB SDU例例2-12 判断下列程序的运行结果。程序内容如下:a=1 2;3 4;5 6;b=7 8;9 10;try a*2 a.*b a*bcatch disp(发生错误)endlasterr64MATLAB SDU%try-catch结构应用实例结构应用实例clear,N=4;A=magic(3);%设置设置3行行3列矩阵列矩阵A。try A_N
43、=A(N,:),取取A的第的第N行元素行元素catch A_end=A(end,:),%如果取如果取A(N,:)出错,则改出错,则改取取A的最后一行。的最后一行。endlasterr%显示出错原因显示出错原因 65MATLAB SDUecho命令命令通常运行一个通常运行一个M文件时,文件中的命令不在屏幕文件时,文件中的命令不在屏幕上显示出来。上显示出来。如果如果M文件被执行之前,首先在文件被执行之前,首先在MATLAB命令窗命令窗中输入中输入echo命令并予以执行,然后再运行命令并予以执行,然后再运行M文件,文件,则则M文件中的程序将在文件中的程序将在MATLAB命令窗中显示出命令窗中显示出来
44、,但影响程序的执行速度。来,但影响程序的执行速度。若要清除若要清除echo命令的影响,在命令的影响,在MATLAB命令窗命令窗中键入中键入“echo off”并回车即可。并回车即可。66MATLAB SDUInput()语句语句Input()语句用在语句用在M文件中,执行到文件中,执行到input()命令时,命令时,MATLAB暂停程序的执行,等待暂停程序的执行,等待用户用键盘赋值给用户用键盘赋值给input()指定的变量。指定的变量。Input()语句还可用于等待用户输入语句还可用于等待用户输入MATLAB表达式和字符串,跟其他语句配表达式和字符串,跟其他语句配合,可以实现合,可以实现“菜单
45、菜单”的功能。不过的功能。不过MATLAB中有专用的菜单设置命令,一般中有专用的菜单设置命令,一般并不使用并不使用input()来建立。来建立。67MATLAB SDUkeyboard命令命令类似于类似于input()但功能更强的但功能更强的keyboard命令是命令是等待键盘输入内容,并把键盘输入的内容作为等待键盘输入内容,并把键盘输入的内容作为一个一个M文件来调用。文件来调用。例如,建立一个例如,建立一个M文件文件us.m:x=0:0.01*pi:2*pi;keyboard执行执行us.m,计算机返回一个提示符:,计算机返回一个提示符:k此时,可以输入一个函数,但要注意这个函数此时,可以输
46、入一个函数,但要注意这个函数自变量和因变量的对应关系。自变量和因变量的对应关系。return命令返回正常状态,表示增加输入的文命令返回正常状态,表示增加输入的文本内容输入完毕,这一条命令是必须的。本内容输入完毕,这一条命令是必须的。68MATLAB SDU6、控制程序流的其它常用指令、控制程序流的其它常用指令(1)指令及使用格式指令及使用格式使用说明使用说明v=input(message)v=input(message,s)该指令执行时,该指令执行时,“控制权控制权”交给键盘;待输入结束,按下交给键盘;待输入结束,按下Enter键,键,“控制权控制权”交还交还MATLAB。message是提示
47、用的是提示用的字符串。第一种格式用于键入数值、字符串、元胞数组等数字符串。第一种格式用于键入数值、字符串、元胞数组等数据;第二种格式,不管键入什么,总是以字符串形式赋给变据;第二种格式,不管键入什么,总是以字符串形式赋给变量量vkeyboard遇到遇到keyboard时,将时,将“控制权控制权”交给键盘,用户可从键盘输交给键盘,用户可从键盘输入各种入各种MATLAB指令。仅当用户输入指令。仅当用户输入return指令后,指令后,“控制控制权权”才交还给程序。它与才交还给程序。它与input的区别是:它允许输入任意多的区别是:它允许输入任意多个个MATLAB指令,而指令,而input只能输入赋给
48、变量的值只能输入赋给变量的值breakbreak指令可导致包含该指令的指令可导致包含该指令的while、for环终止;也可在环终止;也可在if-end,switch-case,try-catch中导致中断中导致中断continue跳过位于其后的循环中的其他指令,执行循环的下一个迭代跳过位于其后的循环中的其他指令,执行循环的下一个迭代pausepause(n)第一种格式使程序暂停执行,等待用户按任意键继续;第二第一种格式使程序暂停执行,等待用户按任意键继续;第二种格式使程序暂停种格式使程序暂停n秒后,再继续执行秒后,再继续执行69MATLAB SDU控制程序流的其它常用指令控制程序流的其它常用指
49、令(2)指令及使用格式指令及使用格式使用说明使用说明return结束结束return指令所在函数的执行,而把控制转至主调函数指令所在函数的执行,而把控制转至主调函数或指令窗。否则,只有待整个被调函数执行完后,才会转或指令窗。否则,只有待整个被调函数执行完后,才会转出出error(message)显示出错信息显示出错信息message,终止程序,终止程序lasterr显示最新出错原因,并终止程序显示最新出错原因,并终止程序lastwarn显示显示MATLAB自动给出的最新警告程序继续运行自动给出的最新警告程序继续运行warning(message)显示警告信息显示警告信息message,程序继续
50、运行,程序继续运行70MATLAB SDU四、程序调试与优化四、程序调试与优化程序调试概述程序调试概述一般调试技巧一般调试技巧程序调试器的使用程序调试器的使用程序设计的优化程序设计的优化71MATLAB SDU程序调试概述程序调试概述MATLAB的调试器的调试器(Debugger)可以迅速地可以迅速地帮您找出程序错误所在,其帮您找出程序错误所在,其功能功能包含:包含:查询每一个函数的工作空间查询每一个函数的工作空间(Workspace).显示函数调用的堆栈显示函数调用的堆栈(Function Call Stack).一行一行地执行一行一行地执行M文件文件.72MATLAB SDU一般调试技巧一