第四章的程序设计和调试优秀PPT.ppt
《第四章的程序设计和调试优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第四章的程序设计和调试优秀PPT.ppt(62页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章的程序设计和调试第一页,本课件共有62页4.3 脚本文件和函数文件脚本文件和函数文件4.3.1 M脚本文件脚本文件(一)脚本文件的特点:(一)脚本文件的特点:它只是一串按用户意图排列而成的(包括控制流它只是一串按用户意图排列而成的(包括控制流向指令在内的)向指令在内的)MATLAB指令集合指令集合脚本文件运行后,所产生的所有变量都驻留在脚本文件运行后,所产生的所有变量都驻留在MATLAB基本工作空间基本工作空间(Base Workspace)中。中。只要用户不使用只要用户不使用clear指令加以清除,且指令加以清除,且MATLAB指令窗不关闭,这些变量将一直保存在指令窗不关闭,这些变量将
2、一直保存在基本工作空间中。基本空间将随基本工作空间中。基本空间将随MATLAB的启动的启动而产生;只有关闭而产生;只有关闭MATLAB时,该基本工作空间时,该基本工作空间才被删除。才被删除。第二页,本课件共有62页(二)(二)M脚本文件的编写和运行脚本文件的编写和运行(1)编写)编写M脚本文件的步骤脚本文件的步骤点击点击MATLAB指令窗工具条上的指令窗工具条上的New File图标,就可打开图标,就可打开MATLAB文件编辑调试器文件编辑调试器MATLAB Editor/Debugger,其窗口名为,其窗口名为untitled,用户即可在空白窗口中编写程序。,用户即可在空白窗口中编写程序。编
3、辑完程序,点击编辑调试器工具条上的保存图标,编辑完程序,点击编辑调试器工具条上的保存图标,在弹出的在弹出的Windows标准风格的标准风格的“保存为保存为”对话框中,选择对话框中,选择保存文件夹,键入新编文件的文件名,点保存文件夹,键入新编文件的文件名,点【保存保存】键,就键,就完成了文件的保存。完成了文件的保存。(2)运行文件)运行文件使刚刚保存的文件所在的目录成为当前目录,或让该目录处使刚刚保存的文件所在的目录成为当前目录,或让该目录处在在MATLAB的搜索路径上。的搜索路径上。直接在命令窗口键入运行文件的文件名或在编辑器窗口中直直接在命令窗口键入运行文件的文件名或在编辑器窗口中直接点击工
4、具条上的运行按钮都可运行该接点击工具条上的运行按钮都可运行该M文件。文件。第三页,本课件共有62页4.3.2 M函数文件函数文件(一)(一)M函数文件的特点函数文件的特点从形式上看,与脚本文件不同,函数文件的第一从形式上看,与脚本文件不同,函数文件的第一行总是一行总是一“function”引导的引导的“函数申明行函数申明行(Function Declaration line)”。该行还罗列。该行还罗列出函数与外界的联系的全部出函数与外界的联系的全部“标称标称”输入输出宗输入输出宗量。但对量。但对“输入输出宗量输入输出宗量”的标称数目并没有限的标称数目并没有限制,既可以完全没有输入输出宗量,也可
5、以时任制,既可以完全没有输入输出宗量,也可以时任意数目。意数目。MATLAB允许使用比允许使用比“标称数目标称数目”较少的输入输较少的输入输出宗量,实现对函数的调用。出宗量,实现对函数的调用。第四页,本课件共有62页从运行上看,与脚本文件不同,每当函数文件运从运行上看,与脚本文件不同,每当函数文件运行,行,MATLAB就会专门为它开辟一个临时工作空就会专门为它开辟一个临时工作空间(间(Context workspace)。该空间称之为函数)。该空间称之为函数工作空间(工作空间(Function workspace)。所有中间)。所有中间变量都存放在函数工作空间中。当执行完文件最变量都存放在函数
6、工作空间中。当执行完文件最后一条指令时,或遇到后一条指令时,或遇到return指令,就结束该函指令,就结束该函数文件的运行,同时该临时函数空间及其所有的数文件的运行,同时该临时函数空间及其所有的中间变量就立即被清除。中间变量就立即被清除。函数空间随具体函数空间随具体M函数文件的被调用而产生,随函数文件的被调用而产生,随调用的结束而删除。函数空间是相对基本空间独调用的结束而删除。函数空间是相对基本空间独立的、临时的。在立的、临时的。在 MATLAB整个运行期间,可整个运行期间,可以产生任意多个临时函数空间。以产生任意多个临时函数空间。假如在函数文件中,发生对某脚本文件的调用,假如在函数文件中,发
7、生对某脚本文件的调用,那么该脚本文件运行产生的所有变量都存放于那那么该脚本文件运行产生的所有变量都存放于那函数空间之中,而不是存放在基本空间。函数空间之中,而不是存放在基本空间。第五页,本课件共有62页4.3.3 局部变量和全局变量局部变量和全局变量(1)局部()局部(Local)变量)变量 存在于函数空间内部的中间变量,产生于该存在于函数空间内部的中间变量,产生于该函数的运行过程中,其影响范围仅限于该函数本函数的运行过程中,其影响范围仅限于该函数本身。身。(2)全局()全局(Global)变量)变量 通过通过global指令,指令,MATLAB也允许几个不也允许几个不同的函数空间以及基本工作
8、空间共享同一个变量。同的函数空间以及基本工作空间共享同一个变量。这种被共享的变量称为全局变量。每个希望共享这种被共享的变量称为全局变量。每个希望共享全局变量的函数或全局变量的函数或MATLAB基本工作空间,必须基本工作空间,必须逐个用逐个用global对其具体变量加以专门定义。没采对其具体变量加以专门定义。没采用用global定义的函数或基本工作空间,将无权享定义的函数或基本工作空间,将无权享用全局变量。用全局变量。第六页,本课件共有62页补充说明:补充说明:如果某个函数的运作使全局变量的内容发生了变如果某个函数的运作使全局变量的内容发生了变化,那么其它函数空间以及基本工作空间中的同化,那么其
9、它函数空间以及基本工作空间中的同名变量也随之变化。名变量也随之变化。除非与全局变量联系的所有工作空间都被删除,除非与全局变量联系的所有工作空间都被删除,否则全局变量依然存在。否则全局变量依然存在。对全局变量的定义必须在该变量被使用之前进行。对全局变量的定义必须在该变量被使用之前进行。建议把全局变量的定义放在函数体的首行位置。建议把全局变量的定义放在函数体的首行位置。虽然虽然MATLAB对全局变量的名字并没有任何特别对全局变量的名字并没有任何特别的限制,但是为了提高的限制,但是为了提高M文件的可读性,建议使文件的可读性,建议使用大写字符命名全局变量。用大写字符命名全局变量。第七页,本课件共有62
10、页4.3.4 M文件的一般结构文件的一般结构典型典型M函数文件的结构如下:函数文件的结构如下:函数申明行(函数申明行(Function declaration line):位):位于函数文件的首行,以于函数文件的首行,以MATLAB关键字关键字function开头,函数名以及函数的输入输出宗量都在这一开头,函数名以及函数的输入输出宗量都在这一行被定义。行被定义。H1行(行(The first help text line);紧随函数声);紧随函数声明行之后以号开头的第一注释行。按明行之后以号开头的第一注释行。按MATLAB自身文件的规则,自身文件的规则,H1行包含:大写字体的函数行包含:大写字
11、体的函数文件名和运用关键词简要描述的函数功能。该文件名和运用关键词简要描述的函数功能。该H1行供行供lookfor关键词查询和关键词查询和help在线帮助使用在线帮助使用第八页,本课件共有62页在线帮助文本(在线帮助文本(Help text)区:)区:H1行及其之后行及其之后的连续的以开头的所有注释行构成整个在线帮的连续的以开头的所有注释行构成整个在线帮助文本。它通常包括:函数输入输出宗量的含义;助文本。它通常包括:函数输入输出宗量的含义;调用格式说明。调用格式说明。编写和修改记录:它与在线帮助文本区相隔一个编写和修改记录:它与在线帮助文本区相隔一个“空空”行;也以开头;标志编写及修改行;也以
12、开头;标志编写及修改M文件文件的作者和日期;版本记录。它用作软件档案管理。的作者和日期;版本记录。它用作软件档案管理。函数体(函数体(Function body):为清晰起见,它与):为清晰起见,它与前面的注释以前面的注释以“空空”行相隔。这部分内容由实现行相隔。这部分内容由实现M函数功能的函数功能的MATLAB指令组成。它接收输入宗指令组成。它接收输入宗量,进行程序流控制,得到输出宗量。其中为阅量,进行程序流控制,得到输出宗量。其中为阅读、理解方便,也配置适当的空行和注释。读、理解方便,也配置适当的空行和注释。若仅从运算的角度看,唯若仅从运算的角度看,唯“函数申明行函数申明行”和和“函函数体
13、数体”两部分是构成两部分是构成M函数文件所必不可少的。函数文件所必不可少的。第九页,本课件共有62页4.3.6 子函数和私用函数子函数和私用函数1.子函数子函数 MATLAB允许一个允许一个M函数文件包含函数文件包含多个函数的代码。其中第一个出现的多个函数的代码。其中第一个出现的那个函数称为主函数(那个函数称为主函数(Primary function),该文件中的其他函数则称),该文件中的其他函数则称为子函数(为子函数(Subfunction)。保存时所)。保存时所用函数名与主函数定义名相同。外部用函数名与主函数定义名相同。外部程序只能对主函数进行调用。程序只能对主函数进行调用。第十页,本课件
14、共有62页子函数的性质:子函数的性质:每个子函数的第每个子函数的第1行是其自己的函数申明行。行是其自己的函数申明行。在在M函数文件内,主函数的位置不可改变,但子函数文件内,主函数的位置不可改变,但子函数的排列次序可以任意改变。函数的排列次序可以任意改变。子函数智能被处于同一文件的主函数或其它其函子函数智能被处于同一文件的主函数或其它其函数调用。数调用。在在M函数文件中,任何指令通过函数文件中,任何指令通过“名字名字”对函数对函数进行调用时,子函数的优先级仅次于内装函数。进行调用时,子函数的优先级仅次于内装函数。同一文件的主函数、子函数的工作空间都是彼此同一文件的主函数、子函数的工作空间都是彼此
15、独立的。各函数间的信息,或通过输入输出变量独立的。各函数间的信息,或通过输入输出变量传递,或通过全局变量传递,或通过跨空间指令传递,或通过全局变量传递,或通过跨空间指令传递。传递。help,lookfor等帮助指令都不能提供关于子函等帮助指令都不能提供关于子函数的任何帮助信息。数的任何帮助信息。第十一页,本课件共有62页2.私用函数私用函数 所谓私用函数,是指位于所谓私用函数,是指位于private目录上的目录上的M文件函数。它有如下性质:文件函数。它有如下性质:私用函数的构造与普通私用函数的构造与普通M函数完全相同。函数完全相同。私用函数只能被私用函数只能被private直接父目录上的直接父
16、目录上的M文件所文件所调用,而不能被其它目录上的任何调用,而不能被其它目录上的任何M文件或文件或MATLAB指令窗中的命令所调用。指令窗中的命令所调用。M文件中,任何指令通过文件中,任何指令通过“名字名字”对函数进行调对函数进行调用时,私用函数的优先级虽低于内装函数和子函用时,私用函数的优先级虽低于内装函数和子函数,但高于其它任何目录上的函数。数,但高于其它任何目录上的函数。help,lookfor等指令都不能提供关于私用函数等指令都不能提供关于私用函数的任何帮助信息。的任何帮助信息。第十二页,本课件共有62页4.3.7 MATLAB的搜索过程的搜索过程 假设假设MATLAB在一个文件中碰到指
17、令在一个文件中碰到指令cow时,它将按以下步骤逐步进行检索:时,它将按以下步骤逐步进行检索:(1)检查)检查cow是否一个变量名;如果不是,执行是否一个变量名;如果不是,执行下一步;下一步;(2)检查)检查cow是不是内建函数(是不是内建函数(Built-in Function);假如不是,执行下一步;);假如不是,执行下一步;(3)检查)检查cow是不是是不是cow所在的所在的M文件中的一个文件中的一个子函数;假如不是,再往下执行子函数;假如不是,再往下执行(4)检查)检查cow是不是是不是cow所在的所在的M文件中的一个文件中的一个私用函数(先找私用函数(先找cow.p,然后是,然后是co
18、w.m);假如);假如不是,再往下执行;不是,再往下执行;第十三页,本课件共有62页(5)检查)检查cow是不是当前目录上的文件(先找是不是当前目录上的文件(先找cow.p,然后是,然后是cow.m);假如不是,再往下);假如不是,再往下执行;执行;(6)检查搜索路径上是否有)检查搜索路径上是否有cow存在(先找存在(先找cow.p,然后是,然后是cow.m)。)。MATLAB将使用最先找到的那个将使用最先找到的那个cow。如。如果一直找不到果一直找不到cow,MATLAB就给出错误提示就给出错误提示信息。信息。第十四页,本课件共有62页4.4 MATLAB控制流控制流4.4.1 for循环结
19、构循环结构for循环结构的语法形式:循环结构的语法形式:for x=array (commands)end说明:说明:循环体的执行次数由循环体的执行次数由for指令后面的数组指令后面的数组array的列数决定。的列数决定。在在for后面的表达式中的数组可以伪任何合法的后面的表达式中的数组可以伪任何合法的MATLAB数数组。组。循环结构可以嵌套使用。循环结构可以嵌套使用。为了得到高效代码,应尽量提高代码的向量化程度,而避免为了得到高效代码,应尽量提高代码的向量化程度,而避免使用循环结构。使用循环结构。为了得到高效代码,在循环指令之前应尽量对数组进行预定义。为了得到高效代码,在循环指令之前应尽量对
20、数组进行预定义。第十五页,本课件共有62页【例7.3.1-1】一个简单的for循环示例。for i=1:10;x(i)=i;end;x 第十六页,本课件共有62页4.4.2 while循环结构循环结构while循环结构的语法形式为:循环结构的语法形式为:while expression (commands)End说明:说明:在在while和和end之间的之间的“组命令组命令”被称为循被称为循环体。当环体。当MATLAB碰到碰到while指令时,首先检测指令时,首先检测expression的值,如其值为逻辑真(非的值,如其值为逻辑真(非0),则),则执行组命令。当组命令执行完毕,继续检测表达执行
21、组命令。当组命令执行完毕,继续检测表达式的值,若表达式值仍为真,循环执行组命令;式的值,若表达式值仍为真,循环执行组命令;而一旦表达式值为假时,结束循环。而一旦表达式值为假时,结束循环。第十七页,本课件共有62页【例7.3.2-1】Fibonacci数组的元素满足Fibonacci 规则:,;且 。现要求该数组中第一个大于10000的元素。a(1)=1;a(2)=1;i=2;while a(i)=10000 a(i),break;end;endi 第二十一页,本课件共有62页4.4.4 switch-case结构结构语法结构:语法结构:switch ex case test1 (command
22、s1)case test2 case testk (commandsk)otherwise (commands)end第二十二页,本课件共有62页说明:说明:switch指令后面的表达式应为一个标量或者为一指令后面的表达式应为一个标量或者为一个字符串。对于标量形式的表达式,比较这样进个字符串。对于标量形式的表达式,比较这样进行:表达式检测值行:表达式检测值i。而对于字符串,。而对于字符串,MATLAB将调用函数将调用函数strcmp来实现比较:来实现比较:strcmp(表达式,检测值表达式,检测值i)。case指令后面的检测值不仅可以为一个标量值或指令后面的检测值不仅可以为一个标量值或一个字符
23、串,还可以为一个元胞数组。如果一个一个字符串,还可以为一个元胞数组。如果一个检测值是一个元胞数组,检测值是一个元胞数组,MATLAB将把表达式的将把表达式的值和该元胞数组中的所有元素进行比较,如果元值和该元胞数组中的所有元素进行比较,如果元胞数组中的某个元素和表达式的值相等,胞数组中的某个元素和表达式的值相等,MATLAB认为此次比较结果为真,从而执行与该认为此次比较结果为真,从而执行与该检测值相应的一组命令。检测值相应的一组命令。第二十三页,本课件共有62页【例7.3.4-1】学生的成绩管理,用来演示switch结构的应用。clear;for i=1:10;ai=89+i;bi=79+i;c
24、i=69+i;di=59+i;end;c=d,c;Name=Jack,Marry,Peter,Rose,Tom;Mark=72,83,56,94,100;Rank=cell(1,5);S=struct(Name,Name,Marks,Mark,Rank,Rank);for i=1:5 switch S(i).Marks case 100 S(i).Rank=满分满分;case a S(i).Rank=优秀优秀;case b S(i).Rank=良好良好;case c S(i).Rank=及格及格;otherwise S(i).Rank=不及格不及格;endenddisp(学生姓名学生姓名 ,得
25、分得分 ,等级等级);disp()for i=1:5;disp(S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank);end;第二十四页,本课件共有62页4.4.5 try-catch结构结构语法结构:语法结构:try (commands1)catch (commands2)end说明:说明:只有当只有当MATLAB在执行组命令在执行组命令1时出现了错误后,组命令时出现了错误后,组命令2才会被执行。才会被执行。可调用可调用lasterr函数查询出错原因。如果函数函数查询出错原因。如果函数lasterr的运行的运行结果为一个空串
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 程序设计 调试 优秀 PPT
限制150内