《第八章程序设计.ppt》由会员分享,可在线阅读,更多相关《第八章程序设计.ppt(47页珍藏版)》请在优知文库上搜索。
1、第八章第八章 M文件程序设计基础文件程序设计基础M文本编辑器文本编辑器M文件文件MATLAB的数据类型的数据类型MATLAB控制流控制流程序调试程序调试函数句柄函数句柄一、一、M文件文件M脚本(命令)文件脚本(命令)文件M函数文件函数文件局部变量和全局变量局部变量和全局变量M文件的一般结构文件的一般结构变量的检测传递和限权使用函数变量的检测传递和限权使用函数1、M脚本(命令)文件(脚本(命令)文件(Script)“脚本脚本”本身反映这样一个事实:本身反映这样一个事实:MATLAB只是只是按文件所写的指令执行。按文件所写的指令执行。M脚本(命令)文件的构成较简单,其脚本(命令)文件的构成较简单,
2、其特点特点是:是:n它只是一串按用户意图排列而成的(包括控制流向指它只是一串按用户意图排列而成的(包括控制流向指令在内的)令在内的)MATLAB指令集。指令集。n脚本文件运行后,所产生的所有变量都驻留在脚本文件运行后,所产生的所有变量都驻留在MATLAB基本工作空间基本工作空间(Base workspace)中。只要不中。只要不使用使用clear指令加以清除,且指令加以清除,且MATLAB指令窗不关闭,指令窗不关闭,这些变量将一直保存在基本工作空间中。基本工作空这些变量将一直保存在基本工作空间中。基本工作空间随间随MATLAB的启动而产生;只有关闭的启动而产生;只有关闭MATLAB时,时,该基
3、本空间才被删除。该基本空间才被删除。2、M函数文件(函数文件( Function)与脚本(命令)文件不同,函数文件与脚本(命令)文件不同,函数文件(Function file)犹如一个犹如一个“黑箱黑箱”。从外界只能看到传给。从外界只能看到传给它的输入量和送出来的计算结果,而内部运作它的输入量和送出来的计算结果,而内部运作是藏而不见的。是藏而不见的。函数文件的函数文件的特点特点:从形式上看,与脚本文件不同,函数文件的第一行总是以从形式上看,与脚本文件不同,函数文件的第一行总是以“function”引导的引导的“函数申明行函数申明行”(Function declaration line)。该行还
4、罗列出函数。该行还罗列出函数与外界联系的全部与外界联系的全部“标称标称”输入输出宗量。但对输入输出宗量。但对“输入输出宗量输入输出宗量”的的标称数目并没有限制,即可以完全没有输入输出宗量,也可以是任意标称数目并没有限制,即可以完全没有输入输出宗量,也可以是任意数目。数目。MATLAB允许使用比允许使用比“标称数目标称数目”较少的输入输出宗量,实现对函数较少的输入输出宗量,实现对函数的调用。的调用。从运行上看,与脚本文件运行不同,每当函数文件运行,从运行上看,与脚本文件运行不同,每当函数文件运行,MATLAB就就会专门为它开辟一个临时工作空间,称之谓会专门为它开辟一个临时工作空间,称之谓函数工作
5、空间函数工作空间(Function workspace)。所有中间变量都存放在函数工作空间中。当执行完文件。所有中间变量都存放在函数工作空间中。当执行完文件最后一条指令或遇到最后一条指令或遇到return时,就结束该函数文件的运行,同时该临时,就结束该函数文件的运行,同时该临时函数空间及其所有的中间变量就立即被清除。时函数空间及其所有的中间变量就立即被清除。函数空间随具体函数空间随具体M函数文件的被调用而产生,随调用结束而删除。函函数文件的被调用而产生,随调用结束而删除。函数空间是数空间是相对独立的相对独立的、临时的临时的。在。在MATLAB整个运行期间,可以产生整个运行期间,可以产生任意多个
6、临时函数空间。任意多个临时函数空间。假如在函数文件中,发生对某脚本文件的调用,那么该脚本文件运行假如在函数文件中,发生对某脚本文件的调用,那么该脚本文件运行产生的所有变量都存放于该函数空间之中,而不是存放在基本空间。产生的所有变量都存放于该函数空间之中,而不是存放在基本空间。3、局部变量和全局变量、局部变量和全局变量局部(局部(Local)变量)变量n它存在于函数空间内部的中间变量,产生于该函数的运行过程它存在于函数空间内部的中间变量,产生于该函数的运行过程中,其影响范围也仅限于该函数本身。中,其影响范围也仅限于该函数本身。全局(全局(Global)变量)变量n通过通过global指令,指令,
7、MATLAB也允许几个不同的函数空间以及基也允许几个不同的函数空间以及基本空间共享一个变量。这种被共享的变量称为全局变量。每个本空间共享一个变量。这种被共享的变量称为全局变量。每个希望共享全局变量的函数或希望共享全局变量的函数或MATLAB基本工作空间,必须逐基本工作空间,必须逐个用个用global对具体变量加以专门定义。没采用对具体变量加以专门定义。没采用global定义的函定义的函数或基本空间,将无权享用全局变量。数或基本空间,将无权享用全局变量。n如果某个函数的运作使全局变量的内容发生了变化,那么其他如果某个函数的运作使全局变量的内容发生了变化,那么其他函数空间以及基本工作空间中的同名变
8、量也就随之变化。函数空间以及基本工作空间中的同名变量也就随之变化。n除非与全局变量联系的所有工作空间都被删除,否则全局变量除非与全局变量联系的所有工作空间都被删除,否则全局变量依然存在。依然存在。n例例4、M文件的一般结构文件的一般结构由于从结构上看,脚本文件只是比函数文件少由于从结构上看,脚本文件只是比函数文件少一个一个“函数申明行函数申明行”。典型典型M函数文件的结构:函数文件的结构:n函数申明(定义)行函数申明(定义)行(Function declaration line):nH1行行(The first help text line):n在线帮助文本在线帮助文本(Help text)区
9、区:n编写和修改记录编写和修改记录:n函数体函数体(Function body):M函数文件示例函数文件示例函数申明(定义)行函数申明(定义)行(Function declaration line):n位于函数文件的首行,以位于函数文件的首行,以MATLAB关键字关键字function开头,函数名以及函数的输入输出开头,函数名以及函数的输入输出宗量都在这一行定义。宗量都在这一行定义。H1行行(The first help text line):n紧随函数申明行之后以紧随函数申明行之后以%开头的第一注释行。开头的第一注释行。按按MATLAB自身文件的规则,自身文件的规则,H1行包含:行包含:大写
10、体的函数文件名;运用关键词简要描述大写体的函数文件名;运用关键词简要描述的函数功能。该的函数功能。该H1行供行供lookfor关键词查询关键词查询和和help在线帮助使用。在线帮助使用。在线帮助文本在线帮助文本(Help text)区区:nH1行及其之后的连续以行及其之后的连续以%开头的所有注释开头的所有注释行构成整个在线帮助文本。它通常包括:函行构成整个在线帮助文本。它通常包括:函数输入输出宗量的含义,调用格式说明。数输入输出宗量的含义,调用格式说明。编写和修改记录编写和修改记录:n与在线帮助文本区相隔一个空行,也以与在线帮助文本区相隔一个空行,也以%开开头,标志编写及修改该头,标志编写及修
11、改该M文件的作者和日期、文件的作者和日期、版本记录。它用于软件档案管理。版本记录。它用于软件档案管理。函数体函数体(Function body):n为清晰起见,它与前面的注释行以空行相隔。为清晰起见,它与前面的注释行以空行相隔。这部分内容由实现该这部分内容由实现该M函数文件功能的函数文件功能的MATLAB指令组成。它接收输入宗量,进指令组成。它接收输入宗量,进行程序流控制,得到输出宗量。其中为阅读、行程序流控制,得到输出宗量。其中为阅读、理解方便,也配置适当的空行和注释。若仅理解方便,也配置适当的空行和注释。若仅从运算角度看,惟有函数申明行和函数体两从运算角度看,惟有函数申明行和函数体两部分是
12、构成部分是构成M函数文件所必不可少的。函数文件所必不可少的。5、变量的检测传递和限权使用函数变量的检测传递和限权使用函数 输入输出宗量检测指令输入输出宗量检测指令跨空间变量传递跨空间变量传递子函数和私用函数子函数和私用函数输入输出宗量检测指令输入输出宗量检测指令nargin在函数体内,用于获取实际输入宗量在函数体内,用于获取实际输入宗量nargout在函数体内,用于获取实际输出宗量在函数体内,用于获取实际输出宗量nargin(fun)获取获取fun指定函数的标称输入宗量指定函数的标称输入宗量数数nargout(fun)获取获取fun指定函数的标称输指定函数的标称输出出宗量数宗量数inputna
13、me(n)在函数体内使用,给出第在函数体内使用,给出第n个个输入宗量的实际调用变量名输入宗量的实际调用变量名跨空间变量传递跨空间变量传递跨空间计算串表达式的值跨空间计算串表达式的值跨空间赋值跨空间赋值跨空间计算串表达式的值跨空间计算串表达式的值前面已介绍了实现不同工作空间之间变量传递的两种前面已介绍了实现不同工作空间之间变量传递的两种渠道:函数的输入输出宗量和全局变量。下面介绍第渠道:函数的输入输出宗量和全局变量。下面介绍第三个传递渠道:跨空间计算串表达式值的指令。三个传递渠道:跨空间计算串表达式值的指令。evalin(workspace,expression)跨空间计算串表达式值跨空间计算串
14、表达式值说明:说明:nworkspace可取两个值:可取两个值:base和和callern该调用格式的执行机理:该调用格式的执行机理:n当当workspace取取base表示计算表示计算eval(expression)时,)时,将从基本工作空间获得变量值。将从基本工作空间获得变量值。n当当workspace取取caller表示计算表示计算eval(expression)时,)时,将从主调函数工作空间获得变量值。主调函数是相对被调将从主调函数工作空间获得变量值。主调函数是相对被调函数而言的。这里,被调函数是指函数而言的。这里,被调函数是指evalin所在的函数。所在的函数。evalin(work
15、space,expression1, expression2)跨空间计算替代串表达式值跨空间计算替代串表达式值说明:说明:nworkspace可取两个值:可取两个值:base和和callern该调用格式的执行机理:该调用格式的执行机理:n先从所在函数空间获得变量值用先从所在函数空间获得变量值用eval(expression1)计算)计算原串表达式;若该计算失败,则在从原串表达式;若该计算失败,则在从workspace 指定的指定的(基本或主调函数)工作空间获取变量值,再通过(基本或主调函数)工作空间获取变量值,再通过eval(expression2)计算替代串表达式)计算替代串表达式 。例:例
16、: evalin运行机理与运行机理与eval的异同。的异同。跨空间赋值跨空间赋值实现不同工作空间之间变量传递的第四个实现不同工作空间之间变量传递的第四个传递渠道是跨空间赋值指令:传递渠道是跨空间赋值指令:assignin(workspace,VN,x)跨空间向跨空间向VN变量赋值变量赋值说明:把当前工作空间内变量说明:把当前工作空间内变量x的值赋给的值赋给workspace指定空间名的指定空间名的VN变量。变量。例:例:assignin运作机理示范运作机理示范子函数和私用(局部)函数子函数和私用(局部)函数子函数子函数私用(局部)函数私用(局部)函数子函数子函数MATLAB允许一个允许一个M函数文件包含多个函数文件包含多个函数的代码。其中,第一个出现的函数函数的代码。其中,第一个出现的函数称为称为主函数主函数(Primary function),该文件,该文件中的其他函数称为中的其他函数称为子函数子函数(Subfunction)。保存时所用的函数名与主函数定义名相保存时所用的函数名与主函数定义名相同。外部程序只能对主函数进行调用。同。外部程序只能对主函数进行调用。子函数的性质子函数的性