ch07.MATLAB程序设计谷风详析

上传人:痛*** 文档编号:165814730 上传时间:2022-10-30 格式:PPT 页数:74 大小:919.50KB
收藏 版权申诉 举报 下载
ch07.MATLAB程序设计谷风详析_第1页
第1页 / 共74页
ch07.MATLAB程序设计谷风详析_第2页
第2页 / 共74页
ch07.MATLAB程序设计谷风详析_第3页
第3页 / 共74页
资源描述:

《ch07.MATLAB程序设计谷风详析》由会员分享,可在线阅读,更多相关《ch07.MATLAB程序设计谷风详析(74页珍藏版)》请在装配图网上搜索。

1、MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社第第7章章 MATLAB 2007程序设计程序设计 MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社教学目标教学重点教学内容第1页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社教学目标l熟悉熟悉 MATLAB 的编程环境的编程环境l掌握掌握 MATLAB 的变量类型的变量类型l掌握掌握 MATLAB 中的流程控制语句中的流程控制语句l掌握掌握 MATLAB 的函数类型和函数操作的函数类型和函数操作l了解了解 MATLAB 中的错误处理中的错误处理l了解了解 MATLAB

2、程序调试方法程序调试方法l了解了解 MATLAB 代码优化方法代码优化方法第2页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社教学重点lMATLAB 的编程环境的编程环境lMATLAB 的变量类型的变量类型lMATLAB 中的流程控制语句中的流程控制语句lMATLAB 的函数类型和函数操作的函数类型和函数操作l MATLAB 程序调试方法程序调试方法第3页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社教学内容lM文本文件介绍文本文件介绍 l函数流程控制函数流程控制 l函数变量函数变量 l函数类型函数类型 l函数操作函数操作 lMA

3、TLAB 编程错误处理编程错误处理 l程序设计的辅助函数程序设计的辅助函数 l调试程序调试程序 l优化程序优化程序 第4页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社M文本文件介绍文本文件介绍l一个一个 M 文件通常包含五个部分,函数定义语句、文件通常包含五个部分,函数定义语句、H1 帮助帮助行、帮助文本、函数体或者脚本文件语句和注释语句。行、帮助文本、函数体或者脚本文件语句和注释语句。H1 行为紧随函数定义语句后面的一行注释语句。当用户行为紧随函数定义语句后面的一行注释语句。当用户通过通过 help 命令查询该函数的说明信息时命令查询该函数的说明信息时 H1

4、 行显示为第行显示为第一行,另外一行,另外 lookfor 函数只检索和显示函数只检索和显示 H1 行。帮助文本行。帮助文本为为 H1 行后面连续的注释行,当在命令窗口中通过行后面连续的注释行,当在命令窗口中通过 help 命令查询该函数的说明信息时则在窗口中显示这些内容。命令查询该函数的说明信息时则在窗口中显示这些内容。函数体为函数体为 M 文件的主要部分,是函数的执行代码。除上文件的主要部分,是函数的执行代码。除上面的面的 H1 行和帮助文本外,为了易于理解,可以在书写代行和帮助文本外,为了易于理解,可以在书写代码时添加注释语句。这些注释语句在编译程序时会被忽略,码时添加注释语句。这些注释

5、语句在编译程序时会被忽略,因此不会影响编译速度和程序运行速度,但是能够增加程因此不会影响编译速度和程序运行速度,但是能够增加程序的可读性。序的可读性。第5页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社l一个完整的一个完整的 M 文件的结构为:文件的结构为:function f=fact(n)函数定义语句函数定义语句%Compute a factorial value.H1 行行%FACT(N)returns the factorial of N,帮助文本帮助文本%usually denoted by N!%Put simply,FACT(N)is PROD(1

6、:N).注释语句注释语句f=prod(1:n);函数体函数体l函数定义语句只在函数文件中存在,定义函数名函数定义语句只在函数文件中存在,定义函数名称、输入输出参数的数量和顺序。函数定义语句称、输入输出参数的数量和顺序。函数定义语句的格式为:的格式为:function y=fact(x)。第6页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社l函数式函数式M文件文件 l函数式函数式 M 文件比脚本式文件比脚本式 M 文件相对复杂一些,脚本文件文件相对复杂一些,脚本文件不需要自带参数,也不一定返回结果,而函数文件一般要不需要自带参数,也不一定返回结果,而函数文件一般要

7、自带参数,并且有返回结果,以便于更好的把整个程序连自带参数,并且有返回结果,以便于更好的把整个程序连为一段。函数文件也可以不带参数,此时文件中一般使用为一段。函数文件也可以不带参数,此时文件中一般使用一些全局变量来实现与外界和其他函数之间的数据交换。一些全局变量来实现与外界和其他函数之间的数据交换。l函数文件的第一行以函数文件的第一行以 function 开始,说明此文件是一个开始,说明此文件是一个函数。其实质为用户向函数。其实质为用户向 MATLAB 函数库中添加的子函数。函数库中添加的子函数。在默认情况下,函数文件中的变量都是局部变量,仅在函在默认情况下,函数文件中的变量都是局部变量,仅在

8、函数运行期间有效,函数运行结束后,这些变量将从工作区数运行期间有效,函数运行结束后,这些变量将从工作区中清除。中清除。第7页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社 函数流程控制函数流程控制 l顺序结构顺序结构 l判断语句(判断语句(ifelseend)l分支语句分支语句 l循环语句循环语句 ltrycatchend语句语句 l其他流程控制函数其他流程控制函数 第8页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社顺序结构顺序结构 l顺序结构是最简单的程序结构,系统在编顺序结构是最简单的程序结构,系统在编译程序时,按照程序的物

9、理位置顺序执行。译程序时,按照程序的物理位置顺序执行。这种程序容易编制,但是结构单一,能够这种程序容易编制,但是结构单一,能够实现的功能有限。实现的功能有限。第9页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社判断语句(判断语句(ifelseend)lifendlifelseendlifelseifelseend第10页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社lifend l此时的程序结构如下:此时的程序结构如下:if 表达式表达式 执行代码块执行代码块endl这是最简单的判断语句,只有一个判断语句,其这是最简单的判断语句,

10、只有一个判断语句,其中的表达式为逻辑表达式,当表达式为真时,执中的表达式为逻辑表达式,当表达式为真时,执行相应的语句,否则,直接跳到下一段语句。行相应的语句,否则,直接跳到下一段语句。第11页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社lifelseend l当程序有两个选择时,可以选择当程序有两个选择时,可以选择 ifelseend 结构,此时程序结构为:结构,此时程序结构为:if 表达式表达式 执行代码块执行代码块1else 执行代码块执行代码块2endl当判断表达式为真时,执行代码块当判断表达式为真时,执行代码块1,否则执行,否则执行代码块代码块2。第1

11、2页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社lifelseifelseend l上面的两种形式中,分别包含一个选择和两个选择,当判断包含多个上面的两种形式中,分别包含一个选择和两个选择,当判断包含多个选择时,可以采用选择时,可以采用elseif 语句,结构为:语句,结构为:if 表达式表达式1 执行代码块执行代码块1elseif 表达式表达式2 执行代码块执行代码块2elseif.else 执行代码块执行代码块endl其中可以包含任意多个其中可以包含任意多个 elseif 语句。语句。第13页特制分析MATLAB R2007基础教程基础教程 清华大学出版社

12、清华大学出版社 分支语句分支语句 l上一节中的上一节中的 ifelseifelseend 语句可以适用于多种语句可以适用于多种选择的流程控制,此时对选择的流程控制,此时对 else之外的每一个选择语句设之外的每一个选择语句设置一个表达式,表达式为真时则执行该模块。置一个表达式,表达式为真时则执行该模块。MATLAB 中的另一种多选择语句为分支语句。分支语句的结构为:中的另一种多选择语句为分支语句。分支语句的结构为:switch 分支语句分支语句 case 条件语句条件语句 执行代码块执行代码块 case 条件语句条件语句1,条件语句条件语句2,条件语句条件语句3,.执行代码块执行代码块 oth

13、erwise 执行代码块执行代码块end第14页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社l其中的分支语句为一个变量,可以是数值变量或其中的分支语句为一个变量,可以是数值变量或者字符串变量,如果该变量的值与某一条件相符,者字符串变量,如果该变量的值与某一条件相符,则执行相应的语句,否则,执行则执行相应的语句,否则,执行 otherwise 后面后面的语句。在每一个条件中,可以包含一个条件语的语句。在每一个条件中,可以包含一个条件语句,可以包含多个条件,当包含多个条件时,将句,可以包含多个条件,当包含多个条件时,将条件以单元数组的形式表示。条件以单元数组的形式

14、表示。lMATLAB 的分支语句类似于的分支语句类似于 C 语言的分支语句,语言的分支语句,但是又不完全相同:但是又不完全相同:MATLAB 语句从上到下依次语句从上到下依次判断条件,条件符合则执行相应的代码块,之后判断条件,条件符合则执行相应的代码块,之后退出该分支语句,因此在代码块后面不需要添加退出该分支语句,因此在代码块后面不需要添加“break”语句。语句。第15页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社循环语句循环语句 lfor 语句语句lwhile 语句语句第16页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社1

15、for 语句语句lfor 语句将相同的代码执行预定义的次数。语句将相同的代码执行预定义的次数。for 语句的结构为:语句的结构为:for 循环变量循环变量=表达式表达式 执行代码块执行代码块 endlfor 循环的语句在前面的例子中已经有所涉循环的语句在前面的例子中已经有所涉及,上节的例子中,第二个程序中也涉及及,上节的例子中,第二个程序中也涉及到了到了 for 循环语句。下面为循环语句。下面为 for 循环的更多循环的更多例子。例子。第17页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社2while 语句语句lwhile 语句用于将相同的代码块执行多次,语句用

16、于将相同的代码块执行多次,但是次数并不预先指定,当但是次数并不预先指定,当 while 的条件的条件表达式为真时,执行代码块,直到条件表表达式为真时,执行代码块,直到条件表达式为假。达式为假。while 语句的结构为:语句的结构为:while 表达式表达式 执行代码块执行代码块end 第18页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社6.2.5 trycatchend语句语句lMATLAB 中的另一种判断语句为中的另一种判断语句为 trycatch 语句,这种语句可以包语句,这种语句可以包容程序运行中的错误,并返回错误类型。这种语句的结构为:容程序运行中的错

17、误,并返回错误类型。这种语句的结构为:try 运行代码块运行代码块catch运行代码块运行代码块endl该语句首先从上到下依次执行,如果遇到程序错误则运行下一个该语句首先从上到下依次执行,如果遇到程序错误则运行下一个 catch 中的语句,依次向下进行。如果程序运行成功,则退出该判断中的语句,依次向下进行。如果程序运行成功,则退出该判断语句。如果在语句。如果在 catch 和和 end之间的程序运行出错,则程序运行终止,之间的程序运行出错,则程序运行终止,或者如果存在其他的或者如果存在其他的 trycatch 结构,则运行下一个结构,则运行下一个 trycatch 结结构。可以利用构。可以利用

18、 lasterr 命令查看发生错误的原因。命令查看发生错误的原因。第19页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社6.2.6 其他流程控制函数其他流程控制函数lcontinue:continue 语句通常用在循环控制中,语句通常用在循环控制中,包括包括 for 循环和循环和 while 循环,用于结束当次循环,循环,用于结束当次循环,继续执行下一次循环,但是不结束当前循环。一继续执行下一次循环,但是不结束当前循环。一般般 continue 语句与语句与 if 语句相结合,当满足一定语句相结合,当满足一定的条件时,执行的条件时,执行 continue 语句。

19、语句。lbreak:与:与 continue 相同的是,相同的是,break 函数也是函数也是用于循环控制,中断当前循环。与用于循环控制,中断当前循环。与 continue 不不同,同,break 跳出当前循环,不再执行该循环的任跳出当前循环,不再执行该循环的任何操作。何操作。lreturn:结束该程序的执行,返回到调用函数或:结束该程序的执行,返回到调用函数或者键盘。者键盘。第20页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社6.3 函数变量函数变量l6.3.1 变量类型变量类型l局部变量局部变量l全局变量全局变量l永久变量永久变量第21页特制分析MATLA

20、B R2007基础教程基础教程 清华大学出版社清华大学出版社局部变量局部变量l每个函数都有自己的局部变量,这些变量存储在该函数独每个函数都有自己的局部变量,这些变量存储在该函数独立的工作区中,与其他函数的变量及主工作区中的变量分立的工作区中,与其他函数的变量及主工作区中的变量分开存储。当函数调用结束时,这些变量随之删除,不保存开存储。当函数调用结束时,这些变量随之删除,不保存在内存中。并且,除了函数返回值,该函数不改变工作区在内存中。并且,除了函数返回值,该函数不改变工作区中其他变量的值。中其他变量的值。l然而脚本文件没有独立的工作区,当通过命令窗口调用脚然而脚本文件没有独立的工作区,当通过命

21、令窗口调用脚本文件时,脚本文件分享主工作区,当函数调用脚本文件本文件时,脚本文件分享主工作区,当函数调用脚本文件时,脚本文件分享主调函数的工作区。需要注意的是,如时,脚本文件分享主调函数的工作区。需要注意的是,如果脚本中改变了工作区中变量的值,则在脚本文件调用结果脚本中改变了工作区中变量的值,则在脚本文件调用结束后,该变量的值发生改变。束后,该变量的值发生改变。l在函数中,变量默认为局部变量。在函数中,变量默认为局部变量。第22页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社全局变量全局变量l局部变量只在一个工作区内有效,无论是函数工作区还是局部变量只在一个工作

22、区内有效,无论是函数工作区还是 MATLAB 主工作区。与局部变量不同,全局变量可以在主工作区。与局部变量不同,全局变量可以在定义该变量的全部工作区中有效。当在一个工作区内改变定义该变量的全部工作区中有效。当在一个工作区内改变该变量的值时,该变量在其他工作区中的变量同时改变。该变量的值时,该变量在其他工作区中的变量同时改变。l任何函数如果需要使用全局变量,则必须首先声明,声明任何函数如果需要使用全局变量,则必须首先声明,声明格式为:格式为:global 变量名变量名1 变量名变量名2l如果一个如果一个 M 文件中包含的子函数需要访问全局变量,则文件中包含的子函数需要访问全局变量,则需在子函数中

23、声明该变量,如果需要在命令行中访问该变需在子函数中声明该变量,如果需要在命令行中访问该变量,则需在命令行中声明该变量。量,则需在命令行中声明该变量。第23页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社永久变量永久变量l除局部变量和全局变量外,除局部变量和全局变量外,MATLAB 中还有一种中还有一种变量类型为永久变量。永久变量的特点为:变量类型为永久变量。永久变量的特点为:只能在只能在 M 文件内部定义;文件内部定义;只有该变量从属的函数能够访问该变量;只有该变量从属的函数能够访问该变量;当函数运行结束时,该变量的值保留在内存中,因此当函数运行结束时,该变量的

24、值保留在内存中,因此当该函数再次被调用时,可以再次利用这些变量。当该函数再次被调用时,可以再次利用这些变量。l永久变量的定义方法为:永久变量的定义方法为:persistent 变量名变量名1 变量名变量名2。第24页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社6.4 函数类型函数类型l6.4.1 匿名函数匿名函数l6.4.2 主函数主函数l6.4.3 子函数子函数l6.4.4 嵌套函数嵌套函数l6.4.5 私有函数私有函数l6.4.6 重载函数重载函数第25页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社匿名函数匿名函数l关于匿

25、名函数在前面关于匿名函数在前面“MATLAB 的数学运算的数学运算”一章中已一章中已有初步涉及,在有初步涉及,在“函数运算函数运算”一节的示例中用到了大量的一节的示例中用到了大量的匿名函数。本节对匿名函数做进一步的介绍。匿名函数。本节对匿名函数做进一步的介绍。l匿名函数提供了一种创建简单程序的方法,使用它用户可匿名函数提供了一种创建简单程序的方法,使用它用户可以不必每次都编写以不必每次都编写 M 文件。用户可以在文件。用户可以在 MATLAB 的命令的命令窗口或是其他任意窗口或是其他任意 M 文件和脚本文件中使用匿名函数。文件和脚本文件中使用匿名函数。l匿名函数的格式为:匿名函数的格式为:fh

26、andle=(arglist)exprl其中其中 fhandle 是为该函数创建的函数句柄;是为该函数创建的函数句柄;符号用于符号用于创建函数句柄;创建函数句柄;arglist 为用逗号分隔的参数列表;为用逗号分隔的参数列表;expr 为函数主体,为为函数主体,为 MATLAB 表达式。表达式。第26页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社主函数主函数 l通常每个通常每个 M 文件中的第一个函数为主函数,文件中的第一个函数为主函数,主函数可以被该文件之外的其他函数调用,主函数可以被该文件之外的其他函数调用,而子函数只能被该文件内的函数调用。主而子函数只能

27、被该文件内的函数调用。主函数的调用通过存储该函数的函数的调用通过存储该函数的 M 文件的文文件的文件名调用。我们在前面几节中编写的实验件名调用。我们在前面几节中编写的实验程序,大多为主函数,如例程序,大多为主函数,如例 6-7。因此,这。因此,这里不再过多介绍。里不再过多介绍。第27页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社子函数子函数 l一个一个 M 文件中可以包括多个函数,除主函数之外文件中可以包括多个函数,除主函数之外的其他函数称为子函数。子函数只能被主函数或的其他函数称为子函数。子函数只能被主函数或该文件内的其他子函数调用。每个子函数以函数该文件内

28、的其他子函数调用。每个子函数以函数定义语句开头,直至下一个函数的定义或文件的定义语句开头,直至下一个函数的定义或文件的结尾。结尾。l当函数中调用函数时,系统判断其函数类型的顺当函数中调用函数时,系统判断其函数类型的顺序为:首先判断是否为子函数,然后判断是否为序为:首先判断是否为子函数,然后判断是否为私有函数,最后判断其是否为当前目录下的私有函数,最后判断其是否为当前目录下的 M 文文件函数或者系统内置函数。由于子函数具有最高件函数或者系统内置函数。由于子函数具有最高的优先级别,因此,在定义子函数时,可以采用的优先级别,因此,在定义子函数时,可以采用已有的其他外部函数的名称。已有的其他外部函数的

29、名称。第28页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社嵌套函数嵌套函数 l一个函数内部可以定义其他的函数,这种一个函数内部可以定义其他的函数,这种内部的函数称作嵌套函数。内部的函数称作嵌套函数。l1嵌套函数的书写嵌套函数的书写l定义嵌套函数时,只要在一个函数内部直定义嵌套函数时,只要在一个函数内部直接定义嵌套函数即可。需要注意的是当一接定义嵌套函数即可。需要注意的是当一个个 M文件中存在嵌套函数时,该文件内的文件中存在嵌套函数时,该文件内的所有函数必须以所有函数必须以 end 结尾。结尾。第29页特制分析MATLAB R2007基础教程基础教程 清华大学出

30、版社清华大学出版社l例例 6-14 嵌套函数的结构嵌套函数的结构function x=A(p1,p2).function y=B(p3).end.end第30页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社l每个函数中可以嵌套多个函数。每个函数中可以嵌套多个函数。l例例 6-15 多个平行嵌套函数多个平行嵌套函数function x=A(p1,p2).function y=B(p3).end function z=C(p4).end.end第31页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社l在这个程序中,函数在这个程序中,函数

31、 A 嵌套了函数嵌套了函数 B 和函数和函数 C。另外,嵌套函数还。另外,嵌套函数还可以包含嵌套函数,其结构如例可以包含嵌套函数,其结构如例 6-16。l例例 6-16 多层嵌套函数多层嵌套函数function x=A(p1,p2).function y=B(p3).function z=C(p4).end .end.Endl在这段程序中,函数在这段程序中,函数 A 嵌套了函数嵌套了函数 B,函数,函数 B 嵌套了函数嵌套了函数 C。第32页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社l2嵌套函数的调用嵌套函数的调用l一个嵌套函数可以被下列函数调用:一个嵌套函

32、数可以被下列函数调用:(1)该嵌套函数的上一层函数,如上面例)该嵌套函数的上一层函数,如上面例 6-13 中函数中函数 A 可以调用函数可以调用函数 B,函数,函数 B 可以调可以调用函数用函数 C,但是函数,但是函数 A 不能调用函数不能调用函数 C;(2)同一母函数下的同级嵌套函数,如上面)同一母函数下的同级嵌套函数,如上面例例 6-12 中函数中函数 B 可以调用函数可以调用函数 C;(3)被任一低级别的函数调用。)被任一低级别的函数调用。第33页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社l在这段程序中,函数在这段程序中,函数 A 包含了嵌套函数包含了

33、嵌套函数 B 和嵌套和嵌套函数函数 D,函数,函数 B 和函数和函数 D 分别嵌套了函数分别嵌套了函数 C 和和函数函数 E。这段程序中函数间的调用关系为:。这段程序中函数间的调用关系为:(1)函数)函数 A 为主函数,可以调用函数为主函数,可以调用函数 B 和函数和函数 D,但是不能调用函数但是不能调用函数 C 和函数和函数 E;(2)函数)函数 B 和函数和函数 D 为一级嵌套函数,为一级嵌套函数,B 可以调用可以调用函数函数 D 和函数和函数 C,但是不能调用函数,但是不能调用函数 E;D 可以调用可以调用函数函数 B 和函数和函数 E,但是不能调用,但是不能调用 C;(3)函数)函数

34、C 和函数和函数 E 为分属两个函数的嵌套函数,为分属两个函数的嵌套函数,可以调用函数可以调用函数 B 和函数和函数 D,但是不能互相调用。,但是不能互相调用。第34页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社私有函数私有函数 l私有函数是私有函数是 MATLAB 中的另一类函数,这类函中的另一类函数,这类函数位于名为数位于名为“private”的子文件夹中,只能被上的子文件夹中,只能被上一级文件夹中的函数或者这些函数所调用的一级文件夹中的函数或者这些函数所调用的 M 文文件调用。如,当前文件夹为件调用。如,当前文件夹为 matlabmath,matlabm

35、ath 中包含子文件夹中包含子文件夹 private,则,则 private 中的函数只能被中的函数只能被 matlabmath 根目录下根目录下的函数及这些函数调用的的函数及这些函数调用的 M 文件调用。文件调用。l私有函数只能被其父文件夹中的函数调用,因此,私有函数只能被其父文件夹中的函数调用,因此,用户可以开发自己的函数库,函数的名称可以与用户可以开发自己的函数库,函数的名称可以与系统标准系统标准 M 函数库名称相同,而不必担心在函数函数库名称相同,而不必担心在函数调用时发生冲突,因为调用时发生冲突,因为 MATLAB 首先查找私有首先查找私有函数,再查找标准函数。函数,再查找标准函数。

36、第35页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社重载函数重载函数 l函数重载为程序编写和用户调用都提供了函数重载为程序编写和用户调用都提供了很大的方便。函数重载允许多个函数使用很大的方便。函数重载允许多个函数使用相同的函数名,不同的输入参数类型。在相同的函数名,不同的输入参数类型。在函数调用时,系统根据输入参数的情况自函数调用时,系统根据输入参数的情况自动选择相应的函数执行。动选择相应的函数执行。第36页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社 函数操作函数操作 l函数句柄函数句柄 l利用函数句柄可以实现对函数的间接操

37、作,利用函数句柄可以实现对函数的间接操作,可以通过将函数句柄传递给其他函数实现可以通过将函数句柄传递给其他函数实现对函数的操作,也可以将函数句柄保存在对函数的操作,也可以将函数句柄保存在变量中,留待以后调用操作。变量中,留待以后调用操作。l函数句柄是通过函数句柄是通过 符号创建的,格式为:符号创建的,格式为:fhandle=functionname。第37页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社l若要保存函数句柄,可以使用单元数组,若要保存函数句柄,可以使用单元数组,如下:如下:trigFun=sin,cos,tan;l通过函数句柄实现对函数的间接调用,

38、其通过函数句柄实现对函数的间接调用,其调用格式与直接调用函数的格式相同:调用格式与直接调用函数的格式相同:fhandle(arg1,arg2,.,argn),其中,其中 fhandle 为函数句柄。为函数句柄。第38页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社函数参数函数参数 l当调用函数时,主调函数通过函数参数的当调用函数时,主调函数通过函数参数的形式向被调函数传递数据,被调函数通过形式向被调函数传递数据,被调函数通过函数返回值的形式向主调函数返回数据。函数返回值的形式向主调函数返回数据。本节介绍函数参数,内容包括:输入参数本节介绍函数参数,内容包括:输入

39、参数数目确定、输入可变数目的参数、向嵌套数目确定、输入可变数目的参数、向嵌套函数输入可选参数和修改参数值并返回。函数输入可选参数和修改参数值并返回。第39页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社l1函数参数数目确定函数参数数目确定l函数函数 nargin 和函数和函数 nargout 分别用于确定分别用于确定函数的输入输出参数个数。在函数体内部函数的输入输出参数个数。在函数体内部用用 nargin(nargout)确定输入输出参数)确定输入输出参数后可以用条件语句确定需要执行的操作。后可以用条件语句确定需要执行的操作。第40页特制分析MATLAB R20

40、07基础教程基础教程 清华大学出版社清华大学出版社l函数函数 nargin 和函数和函数 nargout 允许函数接收或返允许函数接收或返回任意数目的参数。本节介绍参数数目可变的函回任意数目的参数。本节介绍参数数目可变的函数。数。l在在 MATLAB 中,输入输出参数是以单元数组的中,输入输出参数是以单元数组的形式进行传输的:输入参数以单元数组的形式传形式进行传输的:输入参数以单元数组的形式传递给函数,单元数组的每个元素为相应的参数,递给函数,单元数组的每个元素为相应的参数,同样,输出参数也是以单元数组的形式组织的。同样,输出参数也是以单元数组的形式组织的。如此的参数组织形式便于函数接受任意数

41、目的参如此的参数组织形式便于函数接受任意数目的参数。见下面的例子。数。见下面的例子。第41页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社l在调用该函数时可以输入任意数目的参数,参数在调用该函数时可以输入任意数目的参数,参数可以为二元数组或者表示线型的字符串,该函数可以为二元数组或者表示线型的字符串,该函数将用指定的线型绘制输入数据的图像。指定线型将用指定的线型绘制输入数据的图像。指定线型的字符串可以在任意位置输入,并且可以输入多的字符串可以在任意位置输入,并且可以输入多个,但是需要注意的是,只有最后一个字符串起个,但是需要注意的是,只有最后一个字符串起作用。作

42、用。l在上面的程序中,将所有输入参数作为一个单元在上面的程序中,将所有输入参数作为一个单元数组,利用花括号和圆括号对数组元素进行访问,数组,利用花括号和圆括号对数组元素进行访问,实现输入参数的调用。实现输入参数的调用。第42页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社l在嵌套函数中也可以使用可变参数。但是需要注意的是,在嵌套函数中也可以使用可变参数。但是需要注意的是,varargin、varargout、nargin 和和 nargout 的意义可能有的意义可能有所不同。下面介绍这四个元素的应用规则。所不同。下面介绍这四个元素的应用规则。varargin 和

43、和 varargout 这两个元素为变量,与 MATLAB 其他变量的作用范围相同。由于嵌套函数与主函数使用相同的工作区,因此 varargin 和 varargout 既可以表示嵌套函数的输入输出参数,也可以是主函数的输入输出函数,具体值取决于程序中的变量声明:如果嵌套函数在函数声明中包含 varargin 或者 varargout,则在该函数内部调用这两个变量时,变量内容为该函数的输入输出参数;如果嵌套函数声明中没有包含 varargin 或者 varargout,而在该函数的上层函数声明中包含 varargin 或者 varargout,则当在该嵌套函数内部调用这两个变量时,变量内容为上

44、层函数的输入输出参数。第43页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社 nargin 和和 nargout nargin 和 nargout 是函数,当在函数中调用这两个函数时,其值为该函数的输入或输出参数,而不需要进行声明。如上面的例子中,在函数 A 中调用 nargin(B(nargin,y*rand(4))表示函数 A 的输入参数个数,在函数 C 中调用 nargin 表示函数 C 的输入参数个数。第44页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社MATLAB 编程错误处理编程错误处理 l通过通过 try-catc

45、h 语句检测错误语句检测错误 l对错误进行处理并且从错误中恢复对错误进行处理并且从错误中恢复 l消息标志符消息标志符 l警告处理警告处理 第45页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社通过通过 try-catch 语句检测错误语句检测错误l无论程序的编写多么谨慎,在不同的环境下运行时都有可能产生意外的错误。无论程序的编写多么谨慎,在不同的环境下运行时都有可能产生意外的错误。因此,有必要在程序中添加错误检测语句,保证程序在所有的条件下都能够因此,有必要在程序中添加错误检测语句,保证程序在所有的条件下都能够正常运行。正常运行。lMATLAB 中的中的 try

46、-catch 语句可用于错误检测。如果程序中的一些语句可能语句可用于错误检测。如果程序中的一些语句可能会产生非预计的结果,可以将这些语句放在会产生非预计的结果,可以将这些语句放在 try-catch 块中。块中。try-catch 语句语句可以检测所有错误,并且分别进行处理。格式如下:可以检测所有错误,并且分别进行处理。格式如下:try 表达式表达式1catch 表达式表达式2endl一个一个 try-catch 块分为两个部分。第一个部分以块分为两个部分。第一个部分以 try 开始,第二个部分以开始,第二个部分以 catch 开始,整个块以开始,整个块以 end 结束。程序首先正常执行第一部

47、分,如果有错误结束。程序首先正常执行第一部分,如果有错误发生,则停止执行该部分的其他语句,转而执行发生,则停止执行该部分的其他语句,转而执行 catch 中的语句。中的语句。catch 部部分对错误进行处理,可以显示错误提示、执行默认语句等。分对错误进行处理,可以显示错误提示、执行默认语句等。第46页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社l在在 try-catch 语句中,可以嵌套其他的语句中,可以嵌套其他的 try-catch 语句,其格式为:语句,其格式为:try 表达式表达式 1%执行表达式执行表达式 1catch try 表达式表达式 2%尝试从

48、错误中恢复尝试从错误中恢复 catch disp Operation failed%处理错误处理错误 endend第47页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社对错误进行处理并且从错误中恢复对错误进行处理并且从错误中恢复 l1发出错误报告发出错误报告lMATALB 中中 error 函数可以报告错误并且函数可以报告错误并且中断程序运行。用户可以通过指定中断程序运行。用户可以通过指定 error 函数参数的方式指定将要发出的错误信息。函数参数的方式指定将要发出的错误信息。第48页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社

49、l2识别错误发生的原因识别错误发生的原因l当错误发生时,用户需要知道错误发生的位置及错误原因,当错误发生时,用户需要知道错误发生的位置及错误原因,以便能够正确处理错误。以便能够正确处理错误。lasterror 函数可以返回最后发函数可以返回最后发生的错误的相关信息,辅助用户识别错误。生的错误的相关信息,辅助用户识别错误。llasterror 返回结果为一个结构体,该结构体包含三个域,返回结果为一个结构体,该结构体包含三个域,分别为分别为 message、identifier、stack。message 为字符为字符串,起内容为最近发生的错误的相关文本信息;串,起内容为最近发生的错误的相关文本信

50、息;identifier 也是一个字符串,内容为错误消息的类别标志;也是一个字符串,内容为错误消息的类别标志;stack 为一结构体,其内容为该错误的堆栈中的相关信息。为一结构体,其内容为该错误的堆栈中的相关信息。stack 包含三个域,为包含三个域,为 file、name 和和 line,分别为文件,分别为文件名、函数名和错误发生的行数。名、函数名和错误发生的行数。第49页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社l3错误重现错误重现l在一些情况下,需要重现已经抛出过的错误,以便于对错误进行分析。在一些情况下,需要重现已经抛出过的错误,以便于对错误进行分析

51、。MATLAB 中函数中函数 rethrow 可以重新抛出指定的错误。该函数的格式可以重新抛出指定的错误。该函数的格式为为 rethrow(err),其中输入参数,其中输入参数 err 用于指定需要重现的错误。该语用于指定需要重现的错误。该语句执行后程序运行中断,将控制权转给键盘或句执行后程序运行中断,将控制权转给键盘或 catch 语句的上一层模语句的上一层模块。输入参数块。输入参数 err 需为需为 MATLAB 结构体,包含结构体,包含 message、identifier、stack 中至少一个域,这三个域的类型与中至少一个域,这三个域的类型与 lasterror 返回返回结果相同。结

52、果相同。lrethrow 函数通常与函数通常与 try-catch 语句一起使用。如:语句一起使用。如:try 表达式表达式 1catch do_cleanup rethrow(lasterror)end第50页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社消息标志符消息标志符 l1消息标志符的格式消息标志符的格式l标志符为一个字符串,指定错误或警告消息的类别(标志符为一个字符串,指定错误或警告消息的类别(component)及详细信)及详细信息(息(mnemonic)。通常为)。通常为“类别类别:详细信息详细信息”的格式。如:的格式。如:MATLAB:divi

53、deByZeroSimulink:actionNotTakenTechCorp:notFoundInPathl等。两个部分都需要满足如下的规则:等。两个部分都需要满足如下的规则:(1)不能包含空格)不能包含空格(2)第一个字符必须为字母)第一个字符必须为字母(3)后面的字符可以为数字或下划线)后面的字符可以为数字或下划线l类别部分指定错误或警告可能发生的大体位置,通常为某一产品的名字或者类别部分指定错误或警告可能发生的大体位置,通常为某一产品的名字或者工具箱的名字,如工具箱的名字,如 MATLAB 或者或者 Control。MATLAB 支持使用多层次的类支持使用多层次的类别名称。别名称。l详

54、细信息用于指定消息的具体内容,如除数为详细信息用于指定消息的具体内容,如除数为 0 等。等。l如下面的例子为一个完整的标志符:如下面的例子为一个完整的标志符:error(MATLAB:ambiguousSyntax,Syntax%s could be ambiguous.n,inputstr)。第51页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社l2标志符的应用标志符的应用l消息标志符通常与消息标志符通常与 lasterror 函数一起应用,使得函数一起应用,使得 lasterror 函数和函数和 lasterr 函数能够识别错误的原因。函数能够识别错误的原因

55、。lasterror 函数和函数和 lasterr 函数返函数返回消息标志符,用户可以通过其类别信息和详细信息分别获取错误的回消息标志符,用户可以通过其类别信息和详细信息分别获取错误的总体类别及具体信息。总体类别及具体信息。l使用消息标志符的第一步为确定目的信息并为其指定标志符。消息标使用消息标志符的第一步为确定目的信息并为其指定标志符。消息标志符通过志符通过 error 函数指定,格式为:函数指定,格式为:error(msg_id,errormsg)error(msg_id,formatted_errormsg,arg1,arg2,.)l其中的消息标志符可以省略。如果其中的消息标志符可以省略

56、。如果 lasterror 函数不使用该信息,上函数不使用该信息,上面的语句可以简写为:面的语句可以简写为:error(errormsg)l下面以两个实例说明消息标志符与下面以两个实例说明消息标志符与 lasterror 的使用。的使用。第52页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社函数功能catch指定对 try 部分发生的错误做出如何的操作error显示错误消息并听出程序运行ferror获取文件输入输出中的错误信息intwarning返回整数警告的控制状态lasterror上一个错误的信息rethrow重新抛出上一个错误try试图运行一个代码块,并捕

57、捉错误warning警告信息第53页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社警告处理警告处理l 警告用于提示用户在程序运行中出现异常情况。与错误警告用于提示用户在程序运行中出现异常情况。与错误不同的是,警告并不中断程序的运行,而是显示警告内容不同的是,警告并不中断程序的运行,而是显示警告内容并继续执行。警告通过函数并继续执行。警告通过函数 warning 发出,格式与发出,格式与 error 函数相同,如:函数相同,如:warning(Input must be a string)warning(formatted_warningmsg,arg1,arg2

58、,.)warning(Ambiguous parameter name,%s.,param)l另外,与错误相同,警告也可以使用消息标志符,用以显另外,与错误相同,警告也可以使用消息标志符,用以显示该警告信息的类别及具体信息。警告处理的方式与错误示该警告信息的类别及具体信息。警告处理的方式与错误处理的方式类似这里不再赘述。处理的方式类似这里不再赘述。第54页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社程序设计的辅助函数程序设计的辅助函数 l表达式与函数的评估表达式与函数的评估 l计时器函数计时器函数 第55页特制分析MATLAB R2007基础教程基础教程 清华

59、大学出版社清华大学出版社函数功能arrayfun对数组的每个元素应用函数builtin以重载方式执行嵌套函数cellfun对单元数组的每个单元应用函数echo在执行中显示当前运行行eval执行包含 MATLAB 表达式的字符串evalc评估 MATLAB 表达式evalin在指定工作区中运行表达式feval函数评估iskeyword判断输入字符串是否为 MATLAB 关键字isvarname判断输入字符串是否为 MATLAB 有效变量名pause暂停,等待用户反应run运行非当前路径下的脚本script脚本文件描述structfun对结构体的每个域运行函数symvar判断表达式中的符号变量ti

60、c,toc采用计数器评估函数的运行第56页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社计时器函数计时器函数 函数功能delete删除内存中的计时器对象disp显示计时器对象的相关信息get获取计时器对象的属性isvalid判断计时器对象是否有效set设置或显示计时器对象的属性start开启计时器startat在指定时间启动计时器stop关闭计时器timer生成计时器对象timerfind查找计时器对象timerfindall查找计时器对象,包括不可见对象wait等待,直至计时器停止第57页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学

61、出版社调试程序调试程序 l直接调试法直接调试法 l利用调试工具利用调试工具 采用命令行调试程序采用命令行调试程序 采用调试界面调试程序采用调试界面调试程序 第58页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社直接调试法直接调试法lMATLAB 语言具有强大的运算能力,指令系统简单,因此程序通常语言具有强大的运算能力,指令系统简单,因此程序通常非常简洁。对于简单的程序可以采用直接调试的方法。非常简洁。对于简单的程序可以采用直接调试的方法。l在程序调试时,程序运行中变量的值为一个重要的线索。因此,查看在程序调试时,程序运行中变量的值为一个重要的线索。因此,查看变量

62、值为程序调试的重要线索,由于在函数调用时只返回最后的输出变量值为程序调试的重要线索,由于在函数调用时只返回最后的输出参数,而不返回中间变量,因此,可以选择下面的方法查看程序运行参数,而不返回中间变量,因此,可以选择下面的方法查看程序运行中的变量值。中的变量值。(1)通过分析后,将可能出错的语句后面的分号()通过分析后,将可能出错的语句后面的分号(;)删除,将结果显)删除,将结果显示在命令窗口中,与预期值进行比较;示在命令窗口中,与预期值进行比较;(2)利用函数)利用函数 disp 显示中间变量的值;显示中间变量的值;(3)在程序中的适当位置添加)在程序中的适当位置添加 keyboard 指令。

63、当指令。当 MATLAB 执行至此执行至此处时将暂停,等待用户反应。当程序运行至此时将暂停,在命令窗口中处时将暂停,等待用户反应。当程序运行至此时将暂停,在命令窗口中显示显示 k提示符,用户可以查看工作区中的变量,可以改变变量的值。提示符,用户可以查看工作区中的变量,可以改变变量的值。输入输入 return 指定返回程序,继续运行。指定返回程序,继续运行。(4)在调试一个单独的函数时,可以将函数改写为脚本文件,此时可以)在调试一个单独的函数时,可以将函数改写为脚本文件,此时可以直接对输入参数赋值,然后以脚本方式运行该直接对输入参数赋值,然后以脚本方式运行该 M 文件,这样可以保存中文件,这样可

64、以保存中间变量,在运行完成后,可以查看中间变量的值,对结果进行分析,查间变量,在运行完成后,可以查看中间变量的值,对结果进行分析,查找错误所在。找错误所在。第59页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社采用命令行调试程序采用命令行调试程序 函数功能dbstop设置断点dbclear删除断点dbcont重新开始dbdown恢复由 dbup 修改的变量值dbmex启动 MEX 文件调试dbstack列出调用关系dbstatus列出所有的断点dbstep执行一行或多行dbtype列出 M 文件并标出每行dbup修改工作区中变量的值dbquit退出调试模式第60

65、页特制分析MATLAB R2007基础教程基础教程 清华大学出版社清华大学出版社函数功能echo显示执行的脚本或函数代码disp显示指定变量的值或者其他信息sprintf,fprintf格式化输出不同类型的变量whos查看工作区中的变量size显示数组维数keyboard中断程序执行,将控制权交给键盘,允许键盘输入return在 keyboard 中断后继续返回程序执行warning显示指定的警告消息error显示指定的错误消息lasterr返回最后一条错误消息lasterror返回最后一条错误消息及相关信息lastwarn返回最后一条警告消息第61页特制分析MATLAB R2007基础教程基

66、础教程 清华大学出版社清华大学出版社l文本编辑器中的文本编辑器中的 Debug 菜单提供了全部的调菜单提供了全部的调试选项,另外,试选项,另外,MATLAB 主窗口中的主窗口中的 Debug 菜单提供了一些调试命令,方便调试时在命令菜单提供了一些调试命令,方便调试时在命令窗口中查看运行状态。调试选项及其功能如表窗口中查看运行状态。调试选项及其功能如表所示。所示。选项功能对应快捷键Open M-files when Debbuging选择该选项则在调试打开 M 文件无Step下一步F10Step In进入被调用函数内部F11Step Out跳出当前函数Shift+F11Continue执行,直至下一断点F5Go until Cursor执行至当前光标处无Set/Clear Breakpoint设置或删除断点F12Set/Modify Conditional Breakpoint设置或修改条件断点无Enable/Disable Breakpoint开启或关闭光标行的断点无Clear Breakpoints in All Files删除所有文件中的断点无Stop if Errors/Wari

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!