您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > MATLAB及其在理工课程中的应用-5
M文件和函数句柄7.1M文本编辑器MATLABEditor/Debugger是一个集编辑与调试功能于一体的工具环境。创建新M文件的三种方法①在MATLAB指令窗运行指令edit;②点击MATLAB指令窗工具条上的③利用MATLAB指令窗的[File:New]子菜单打开已有M文件的方法①在MATLAB指令窗运行指令editfilename②点击MATLAB指令窗工具条上的③利用MATLAB指令窗的[File:Open]子菜单7.2MATLAB控制流for循环结构forx=array%x称为循环变量(command)%循环体end循环结构可以嵌套使用;为了得到高效代码,应尽量提高代码的向量化程度,避免使用循环结构;在循环指令之前应尽量对数组进行预定义;由于i和j是预定义变量,作“虚单位”使用,所以尽量避免把i和j用作循环变量;例题exm7.2-17.2MATLAB控制流while循环结构whileexpression(commands)end当MATLAB碰到while指令时,首先检测expression的值,若其值为逻辑真,则执行组命令。与for循环的区别:while循环结构的循环体被执行的次数不是确定的,而for循环结构的循环体的执行次数是确定的。while指令后的表达式为空数组,则表达式值为假,而不执行循环体。例题exm7.2-27.2MATLAB控制流if-else-end分支结构ifexpressionifexpression(commands)(commands1)endelse(commands2)endif指令判决和break指令的配合使用,可以强制终止for循环或while循环。例题exm7.2-3,7.2-47.2MATLAB控制流switch-case结构switchex*ex为一标量或字符串casetest1(commands1)*当ex等于test1时,执行组命令1,casetest2*然后跳出该结构。…casetestk*当ex等于testk时,执行组命令k(commandsk)*然后跳出该结构。otherwise*otherwise指令可以不存在(commands)*表达式不等于前面所有检测值时*执行该组命令。例题exm7.2MATLAB控制流try-catch结构try(commands1)*组命令1总被执行。若正确,则跳出该结构catch(commands2)*仅当组命令1出现执行错误时,2才被执行end可调用lasterr函数查询出错原因。若lasterr的运行结果为一个空串,则表明组命令1被成功执行了。当执行组命令2时又出错,MATLAB将终止该结构。例题exm7.2MATLAB控制流控制程序流的其他常用指令v=input(‘message’),v=input(‘message’,’s’)该指令执行时,“控制权”交给键盘。Message是提示用的字符串。keyboard用户从键盘输入M指令,遇return返回程序。break令循环终止或令程序中断continue跳过位于其后的循环中的其他指令,执行下一迭代pause,pause(n)程序暂停执行(n秒)error(‘message’)显示出错信息message,终止程序Lasterr显示最新出错原因,并终止程序Lastwarn显示MATLAB自动给出的最新警告程序继续运行warning(‘message’)显示警告信息message,程序继续运行7.3脚本文件和函数文件M脚本文件对比较简单的问题,从指令窗中直接输入指令进行计算十分简单。但随指令数增加或控制流复杂度的增加,以及重复计算要求的提出,直接从指令窗进行计算显得烦琐。故适宜脚本文件脚本文件运行后,所产生的所有变量都驻留在MATLAB基本工作空间(baseworkspace)中。只要用户不使用clear指令加以清除,且MATLAB指令窗不关闭,这些变量将一直保存在基本工作空间内。7.3脚本文件和函数文件M函数文件与脚本文件不同,函数文件(functionfile)犹如一个“黑箱”。从外界只能看到传给它的输入量和输出结果,而内部运作是藏而不见的。函数文件的第一行是以“function”引导的“函数声明行”。对“输入输出宗量”的标称数目没有限制。函数文件运行,MATLAB为之专门开辟临时工作空间(functionworkspace)。当执行完文件最后一条指令或遇return时,结束运行,并清除临时工作空间内所有中间变量。若在函数文件中调用某脚本文件,则该脚本文件运行产生的所有变量都存放于该函数空间中,而不存放在基本空间。7.3脚本文件和函数文件局部变量和全局变量局部变量:存在于函数空间内部的中间变量,产生于该函数运行过程中,影响范围仅限于该函数本身。全局变量:用global指令。每个共享全局变量的函数或MATLAB基本空间,必须逐个用global对具体变量加以专门定义。没采用global定义的函数或基本工作空间,无权享用全局变量。全局变量的定义必须在该变量被使用之前进行。为了提高M文件的可读性,选用大写字符命名全局变量。由于全局变量损害函数的封装性,故不提倡使用全局变量。7.3脚本文件和函数文件典型M函数文件的一般结构函数申明行:位于函数文件的首行,以function开头,函数名以及函数的输入输出宗量都在该行定义。H1行:紧随函数申明行之后以%开头的第一注释行。包括大写体的函数名,运用关键词简要描述的函数功能。在线帮助文本区:H1行及其之后的连续以%开头的所有注释行。包括函数输入输出宗量的含义,调用格式的说明。编写和修改记录:与在线帮助文本区相隔一个空行,以%开头,标志编写及修改该M文件的作者、日期、版本记录。函数体:与前面的注释行以空行相隔,由实现该M函数文件功能的MATLAB指令组成。例题exm7.4变量的检测传递和限权使用函数输入输出宗量检测指令nargin在函数体内,用于获取实际输入宗量nargout获取实际输出宗量nargin(‘fun’)获取‘fun’指定函数的标称输入宗量数nargout(‘fun’)获取‘fun’指定函数的标称输出宗量数inputname(n)给出第N个输入宗量的实际调用变量名跨空间变量传递跨空间计算串表达式的值evalin(‘workspace’,’expression’)evalin(‘workspace’,’expression1’,’expression2’)跨空间赋值assignin(‘workspace’,’VN’,x)跨空间向VN变量赋值。例题exm7.4变量的检测传递和限权使用函数子函数MATLAB允许一个M函数文件包含多个函数的代码。第一个出现的函数成为主函数,其他函数成为子函数。保存时所用函数文件名与主函数名相同。外部程序只能对主函数进行调用。每个子函数的第一行是其函数申明行。主函数的位置不可改变,子函数的排列次序可以任意改变。子函数只能被处于同一文件的主函数或其他子函数调用。子函数的优先级仅次于内装函数。同一文件的主函数、子函数的工作空间彼此独立。各函数间的信息,通过输入输出宗量传递,或通过全局变量传递,或通过跨空间指令传递。7.4变量的检测传递和限权使用函数私用函数指位于private目录上的M文件函数。只能被private目录的直接父目录上的M函数文件所调用。不能被其他目录上任何M函数、M脚本文件或MATLAB指令窗中的命令所调用,也不能被直接父目录上的M脚本文件调用。私用函数的优先级低于内装函数和子函数,高于其他任何目录上的函数。7.5串演算函数“宏”操作能力(GUI的回调函数,各种泛函指令)串演算函数y=eval(‘CEM’)执行CEM指定的计算[y1,y2,…]=eval(‘CEM’)执行对CEM的函数文件调用,输出结果[y1,y2,…]=feval(FH,arg1,arg2,…)执行函数句柄FH指定的计算例题exm7.5-3,7.5-4内联函数inline(‘CE’,arg1,arg2…)把串表达式转化为arg1,arg2等指定输入宗量的内联函数。inline(‘CE’,n)把串表达式转化为x,P1,P2,…,Pn等指定输入宗量的内联函数。例题exm7.6函数句柄是一种新的数据类型。特点a)使feval以及借助于它的泛函指令工作更加可靠;b)使“函数调用”像“变量调用”一样灵活方便;c)可迅速获得同名重载函数的位置、类型信息;d)可在更大范围内调用子函数和私用函数,提高软件的重用性;e)提高函数的调用速度,尤其在反复调用情况下。7.6函数句柄函数句柄的创建必须通过专门定义产生:利用@符号或利用转换函数str2func函数句柄的基本用法若一个函数的调用格式:[argout1,argout2,…,argoutn]=FunName(argin1,argin2,…)该函数句柄hfun已存在,通过函数句柄实现函数运算的调用格式:[argout1,argout2,…]=feval(Hfun,argin1,argin2,…)例题exm
本文标题:MATLAB及其在理工课程中的应用-5
链接地址:https://www.777doc.com/doc-2881933 .html