您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > matlab > ch07.MATLAB2007程序设计
MATLABR2007基础教程清华大学出版社2020年9月20日第1页第7章MATLAB2007程序设计MATLABR2007基础教程清华大学出版社教学目标教学重点教学内容MATLABR2007基础教程清华大学出版社2020年9月20日第2页教学目标熟悉MATLAB的编程环境掌握MATLAB的变量类型掌握MATLAB中的流程控制语句掌握MATLAB的函数类型和函数操作了解MATLAB中的错误处理了解MATLAB程序调试方法了解MATLAB代码优化方法MATLABR2007基础教程清华大学出版社2020年9月20日第3页教学重点MATLAB的编程环境MATLAB的变量类型MATLAB中的流程控制语句MATLAB的函数类型和函数操作MATLAB程序调试方法MATLABR2007基础教程清华大学出版社2020年9月20日第4页教学内容M文本文件介绍函数流程控制函数变量函数类型函数操作MATLAB编程错误处理程序设计的辅助函数调试程序优化程序MATLABR2007基础教程清华大学出版社2020年9月20日第5页M文本文件介绍一个M文件通常包含五个部分,函数定义语句、H1帮助行、帮助文本、函数体或者脚本文件语句和注释语句。H1行为紧随函数定义语句后面的一行注释语句。当用户通过help命令查询该函数的说明信息时H1行显示为第一行,另外lookfor函数只检索和显示H1行。帮助文本为H1行后面连续的注释行,当在命令窗口中通过help命令查询该函数的说明信息时则在窗口中显示这些内容。函数体为M文件的主要部分,是函数的执行代码。除上面的H1行和帮助文本外,为了易于理解,可以在书写代码时添加注释语句。这些注释语句在编译程序时会被忽略,因此不会影响编译速度和程序运行速度,但是能够增加程序的可读性。MATLABR2007基础教程清华大学出版社2020年9月20日第6页一个完整的M文件的结构为:functionf=fact(n)函数定义语句%Computeafactorialvalue.H1行%FACT(N)returnsthefactorialofN,帮助文本%usuallydenotedbyN!%Putsimply,FACT(N)isPROD(1:N).注释语句f=prod(1:n);函数体函数定义语句只在函数文件中存在,定义函数名称、输入输出参数的数量和顺序。函数定义语句的格式为:functiony=fact(x)。MATLABR2007基础教程清华大学出版社2020年9月20日第7页函数式M文件函数式M文件比脚本式M文件相对复杂一些,脚本文件不需要自带参数,也不一定返回结果,而函数文件一般要自带参数,并且有返回结果,以便于更好的把整个程序连为一段。函数文件也可以不带参数,此时文件中一般使用一些全局变量来实现与外界和其他函数之间的数据交换。函数文件的第一行以function开始,说明此文件是一个函数。其实质为用户向MATLAB函数库中添加的子函数。在默认情况下,函数文件中的变量都是局部变量,仅在函数运行期间有效,函数运行结束后,这些变量将从工作区中清除。MATLABR2007基础教程清华大学出版社2020年9月20日第8页函数流程控制顺序结构判断语句(if…else…end)分支语句循环语句try…catch…end语句其他流程控制函数MATLABR2007基础教程清华大学出版社2020年9月20日第9页顺序结构顺序结构是最简单的程序结构,系统在编译程序时,按照程序的物理位置顺序执行。这种程序容易编制,但是结构单一,能够实现的功能有限。MATLABR2007基础教程清华大学出版社2020年9月20日第10页判断语句(if…else…end)if…endif…else…endif…elseif…else…endMATLABR2007基础教程清华大学出版社2020年9月20日第11页if…end此时的程序结构如下:if表达式执行代码块end这是最简单的判断语句,只有一个判断语句,其中的表达式为逻辑表达式,当表达式为真时,执行相应的语句,否则,直接跳到下一段语句。MATLABR2007基础教程清华大学出版社2020年9月20日第12页if…else…end当程序有两个选择时,可以选择if…else…end结构,此时程序结构为:if表达式执行代码块1else执行代码块2end当判断表达式为真时,执行代码块1,否则执行代码块2。MATLABR2007基础教程清华大学出版社2020年9月20日第13页if…elseif…else…end上面的两种形式中,分别包含一个选择和两个选择,当判断包含多个选择时,可以采用elseif语句,结构为:if表达式1执行代码块1elseif表达式2执行代码块2elseif..................else执行代码块end其中可以包含任意多个elseif语句。MATLABR2007基础教程清华大学出版社2020年9月20日第14页分支语句上一节中的if…elseif…else…end语句可以适用于多种选择的流程控制,此时对else之外的每一个选择语句设置一个表达式,表达式为真时则执行该模块。MATLAB中的另一种多选择语句为分支语句。分支语句的结构为:switch分支语句case条件语句执行代码块case{条件语句1,条件语句2,条件语句3,...}执行代码块otherwise执行代码块endMATLABR2007基础教程清华大学出版社2020年9月20日第15页其中的分支语句为一个变量,可以是数值变量或者字符串变量,如果该变量的值与某一条件相符,则执行相应的语句,否则,执行otherwise后面的语句。在每一个条件中,可以包含一个条件语句,可以包含多个条件,当包含多个条件时,将条件以单元数组的形式表示。MATLAB的分支语句类似于C语言的分支语句,但是又不完全相同:MATLAB语句从上到下依次判断条件,条件符合则执行相应的代码块,之后退出该分支语句,因此在代码块后面不需要添加“break”语句。MATLABR2007基础教程清华大学出版社2020年9月20日第16页循环语句for语句while语句MATLABR2007基础教程清华大学出版社2020年9月20日第17页1.for语句for语句将相同的代码执行预定义的次数。for语句的结构为:for循环变量=表达式执行代码块endfor循环的语句在前面的例子中已经有所涉及,上节的例子中,第二个程序中也涉及到了for循环语句。下面为for循环的更多例子。MATLABR2007基础教程清华大学出版社2020年9月20日第18页2.while语句while语句用于将相同的代码块执行多次,但是次数并不预先指定,当while的条件表达式为真时,执行代码块,直到条件表达式为假。while语句的结构为:while表达式执行代码块endMATLABR2007基础教程清华大学出版社2020年9月20日第19页6.2.5try…catch…end语句MATLAB中的另一种判断语句为try…catch语句,这种语句可以包容程序运行中的错误,并返回错误类型。这种语句的结构为:try运行代码块catch运行代码块end该语句首先从上到下依次执行,如果遇到程序错误则运行下一个catch中的语句,依次向下进行。如果程序运行成功,则退出该判断语句。如果在catch和end之间的程序运行出错,则程序运行终止,或者如果存在其他的try…catch结构,则运行下一个try…catch结构。可以利用lasterr命令查看发生错误的原因。MATLABR2007基础教程清华大学出版社2020年9月20日第20页6.2.6其他流程控制函数continue:continue语句通常用在循环控制中,包括for循环和while循环,用于结束当次循环,继续执行下一次循环,但是不结束当前循环。一般continue语句与if语句相结合,当满足一定的条件时,执行continue语句。break:与continue相同的是,break函数也是用于循环控制,中断当前循环。与continue不同,break跳出当前循环,不再执行该循环的任何操作。return:结束该程序的执行,返回到调用函数或者键盘。MATLABR2007基础教程清华大学出版社2020年9月20日第21页6.3函数变量6.3.1变量类型局部变量全局变量永久变量MATLABR2007基础教程清华大学出版社2020年9月20日第22页局部变量每个函数都有自己的局部变量,这些变量存储在该函数独立的工作区中,与其他函数的变量及主工作区中的变量分开存储。当函数调用结束时,这些变量随之删除,不保存在内存中。并且,除了函数返回值,该函数不改变工作区中其他变量的值。然而脚本文件没有独立的工作区,当通过命令窗口调用脚本文件时,脚本文件分享主工作区,当函数调用脚本文件时,脚本文件分享主调函数的工作区。需要注意的是,如果脚本中改变了工作区中变量的值,则在脚本文件调用结束后,该变量的值发生改变。在函数中,变量默认为局部变量。MATLABR2007基础教程清华大学出版社2020年9月20日第23页全局变量局部变量只在一个工作区内有效,无论是函数工作区还是MATLAB主工作区。与局部变量不同,全局变量可以在定义该变量的全部工作区中有效。当在一个工作区内改变该变量的值时,该变量在其他工作区中的变量同时改变。任何函数如果需要使用全局变量,则必须首先声明,声明格式为:global变量名1变量名2如果一个M文件中包含的子函数需要访问全局变量,则需在子函数中声明该变量,如果需要在命令行中访问该变量,则需在命令行中声明该变量。MATLABR2007基础教程清华大学出版社2020年9月20日第24页永久变量除局部变量和全局变量外,MATLAB中还有一种变量类型为永久变量。永久变量的特点为:–只能在M文件内部定义;–只有该变量从属的函数能够访问该变量;–当函数运行结束时,该变量的值保留在内存中,因此当该函数再次被调用时,可以再次利用这些变量。永久变量的定义方法为:persistent变量名1变量名2。MATLABR2007基础教程清华大学出版社2020年9月20日第25页6.4函数类型6.4.1匿名函数6.4.2主函数6.4.3子函数6.4.4嵌套函数6.4.5私有函数6.4.6重载函数MATLABR2007基础教程清华大学出版社2020年9月20日第26页匿名函数关于匿名函数在前面“MATLAB的数学运算”一章中已有初步涉及,在“函数运算”一节的示例中用到了大量的匿名函数。本节对匿名函数做进一步的介绍。匿名函数提供了一种创建简单程序的方法,使用它用户可以不必每次都编写M文件。用户可以在MATLAB的命令窗口或是其他任意M文件和脚本文件中使用匿名函数。匿名函数的格式为:fhandle=@(arglist)expr其中fhandle是为该函数创建的函数句柄;@符号用于创建函数句柄;arglist为用逗号分隔的参数列表;expr为函数主体,为MATLAB表达式。MATLABR2007基础教程清华大学出版社2020年9月20日第27页主函数通常每个M文件中的第一个函数为主函数,主函数可以被该文件之外的其他函数调用,而子函数只能被该文件内的函数调用。主函数的调用通过存储该函数的M文件的文件名调用。我们在前面几节中编写的实验程序,大多为主函数,如例6-7。因此,这里不再过多介绍。MATLABR2007基础教程清华大学出版社2020年9月20日第28页子函数一个M文件中可以包括多个函数,除主函数之外的其他函数称为子函数。子函数只能被主函数或该文件内的其他子函数调用。每个子函数以函数定义语句开头,直至下一个函数的定义或文件的结尾。当函数中调用函数时,系统判断其函数类型的顺序为:首先判断是否为子函数,然后判断是否为私有函数,最后判断其是否为当前
本文标题:ch07.MATLAB2007程序设计
链接地址:https://www.777doc.com/doc-7028106 .html