第11讲:函数与程序的调试_第1页
第11讲:函数与程序的调试_第2页
第11讲:函数与程序的调试_第3页
第11讲:函数与程序的调试_第4页
第11讲:函数与程序的调试_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第11讲讲 函数与程序的调试函数与程序的调试2n本讲教学目标本讲教学目标 掌握函数文件的基本结构掌握函数文件的基本结构 掌握掌握Matlab函数的调用方法函数的调用方法 了解函数参数的可调性了解函数参数的可调性 掌握函数的句柄和常用的程序调试方法掌握函数的句柄和常用的程序调试方法 了解各种不同类型的函数了解各种不同类型的函数3n11.1 函数函数11.1.1 函数文件基本结构函数文件基本结构n由由function语句引导,其基本结构为:语句引导,其基本结构为: function 输出形参表输出形参表=函数名函数名(输入形参表输入形参表) 注释说明部分注释说明部分 函数体语句函数体语句n函数名

2、的命名规则与变量名相同。函数名的命名规则与变量名相同。n输入形参为函数的输入参数,输出形参为函数的输输入形参为函数的输入参数,输出形参为函数的输出参数。出参数。n当输出形参多于一个时,则应该用方括号括起来。当输出形参多于一个时,则应该用方括号括起来。 4n例例1:编写函数文件求半径为编写函数文件求半径为 r 的圆的面积的圆的面积和周长。和周长。 函数文件如下:函数文件如下: % calculate the area and perimeter of a circle of radii r function s,p=fcircle(r)% r 圆半径圆半径, s 圆面积圆面积, p 圆周长圆周长

3、 s=pi*r*r; p=2*pi*r;5n11.1.2 函数调用函数调用函数调用的一般格式是:函数调用的一般格式是: 输出实参表输出实参表=函数名函数名(输入实参表输入实参表)n注意:函数调用时各实参出现的顺序和个数,应与注意:函数调用时各实参出现的顺序和个数,应与函数定义时形参的顺序和个数一致,否则会出错。函数定义时形参的顺序和个数一致,否则会出错。n函数调用时,先将实参传递给相应的形参,从而实函数调用时,先将实参传递给相应的形参,从而实现参数传递,然后再执行函数的功能。现参数传递,然后再执行函数的功能。在在MATLAB中,函数可以嵌套调用,即函数可中,函数可以嵌套调用,即函数可以调用别的

4、函数,甚至调用它自身。一个函数以调用别的函数,甚至调用它自身。一个函数调用它自身称为递归调用。调用它自身称为递归调用。6n例例2:利用函数文件,实现直角坐标利用函数文件,实现直角坐标(x, y)与极坐标与极坐标(rho, theta)之间的转换。之间的转换。 函数文件函数文件tran.m:nfunction rho,theta=tran(x,y) rho=sqrt(x*x+y*y); theta=atan(y/x); 调用调用tran.m的命令文件的命令文件main1.m:n x=input(Please input x=:); y=input(Please input y=:); rho,t

5、he=tran(x,y)7n例例3:利用函数的递归调用,求利用函数的递归调用,求n!。递归调用函数文件递归调用函数文件factor.m如下:如下:nfunction f=factor(n) if n trigFun = sin, cos, tan; plot(trigFun2(-pi:0.01:pi)12n函数句柄的操作函数句柄的操作 13n11.1.5 匿名函数匿名函数匿名函数提供了一种创建简单程序的方法,可匿名函数提供了一种创建简单程序的方法,可以使用户不必每次都编写以使用户不必每次都编写M文件,可以在命令文件,可以在命令窗口或其他任意窗口或其他任意 M 文件和脚本文件中使用。文件和脚本文

6、件中使用。格式为:格式为: fhandle = (arglist) expr其中其中fhandle为该函数创建的函数句柄;为该函数创建的函数句柄; 符符号用于创建函数句柄;号用于创建函数句柄;arglist为用逗号分隔的为用逗号分隔的参数列表;参数列表;expr为函数主体,一般为表达式。为函数主体,一般为表达式。14n11.1.6 主函数主函数通常通常M文件中的第一个函数为主函数,主函数文件中的第一个函数为主函数,主函数之后可以是任意数量的子函数,它们可以作为之后可以是任意数量的子函数,它们可以作为主程序的子程序。主程序的子程序。一般来说,主函数可被该文件之外的其他函数一般来说,主函数可被该文

7、件之外的其他函数调用,而子函数只能被该文件内的函数调用。调用,而子函数只能被该文件内的函数调用。在命令窗口或在命令窗口或M文件种只能调用主函数,调用文件种只能调用主函数,调用的时候是通过存储该函数的的时候是通过存储该函数的M文件名进行。文件名进行。15n11.1.7 子函数子函数与其他语言一样,在与其他语言一样,在MATLAB 7语言中也可以语言中也可以很方便地定义子函数,用来扩充函数的功能。很方便地定义子函数,用来扩充函数的功能。在函数文件中题头定义的函数为主函数,而在在函数文件中题头定义的函数为主函数,而在函数体内定义的其他函数都被视为子函数。每函数体内定义的其他函数都被视为子函数。每个子

8、函数以函数定义语句开头,直至下一个函个子函数以函数定义语句开头,直至下一个函数的定义或文件的结尾。数的定义或文件的结尾。子函数只能为主函数或同一主函数下的其他子子函数只能为主函数或同一主函数下的其他子函数所使用。函数所使用。16n11.1.8 嵌套函数嵌套函数 一个函数内部可以定义其他的函数,这种内部一个函数内部可以定义其他的函数,这种内部的函数称作嵌套函数。的函数称作嵌套函数。定义嵌套函数时,只要在一个函数内部直接定定义嵌套函数时,只要在一个函数内部直接定义嵌套函数即可。义嵌套函数即可。注意:当一个注意:当一个 M文件中存在嵌套函数时,该文文件中存在嵌套函数时,该文件内的所有函数必须以件内的

9、所有函数必须以 end 结尾。结尾。17n例例6:嵌套函数的结构嵌套函数的结构 function x = A(p1, p2) . function y = B(p3) . end . endn每个函数中可以嵌套多个函数。每个函数中可以嵌套多个函数。18n11.1.9 私有函数私有函数 这类函数位于名为这类函数位于名为“private”的子文件夹中,只能的子文件夹中,只能被上一级文件夹中的函数或者这些函数所调用的被上一级文件夹中的函数或者这些函数所调用的 M 文件调用。文件调用。如当前文件夹为如当前文件夹为math,其中包含,其中包含private文件夹,文件夹,则则 private 中的函数只

10、能被中的函数只能被 math 根目录下的函数根目录下的函数及这些函数调用的及这些函数调用的M文件调用。文件调用。用户可开发自己的函数库,其名称可以与系统标用户可开发自己的函数库,其名称可以与系统标准准 M函数库名称相同,而不必担心在函数调用时函数库名称相同,而不必担心在函数调用时发生冲突,因为发生冲突,因为 MATLAB 首先查找私有函数,再首先查找私有函数,再查找标准函数。查找标准函数。19n11.1.10 重载函数重载函数函数重载为程序编写和用户调用都提供了很大函数重载为程序编写和用户调用都提供了很大的方便。的方便。函数重载允许多个函数使用相同的函数名,不函数重载允许多个函数使用相同的函数

11、名,不同的输入参数类型。同的输入参数类型。在函数调用时,系统根据输入参数的情况自动在函数调用时,系统根据输入参数的情况自动选择相应的函数执行。选择相应的函数执行。20n11.2 程序的调试和优化程序的调试和优化 11.2.1 程序的调试程序的调试 n程序的错误种类程序的错误种类 n错误的识别和程序调试错误的识别和程序调试 11.2.2 程序的优化程序的优化 n程序优劣的分析程序优劣的分析 n程序优化的技巧程序优化的技巧 n有效地使用内存有效地使用内存 21n11.2.1 程序的调试程序的调试 程序的错误种类程序的错误种类 n在在MATLAB的表达式中存在两种类型的错误:的表达式中存在两种类型的

12、错误:n(1) 语法错误语法错误 n语法错误发生在语法错误发生在M文件程序代码的生成过程中,一文件程序代码的生成过程中,一般是由函数参数输入类型有误或是矩阵运算阶数不般是由函数参数输入类型有误或是矩阵运算阶数不符等引起。符等引起。 n(2) 运行错误运行错误 n运行错误一般指在程序运行过程中,出现溢出或是运行错误一般指在程序运行过程中,出现溢出或是死循环等异常现象。死循环等异常现象。 22n11.2.1 程序的调试程序的调试 错误的识别和程序调试错误的识别和程序调试 n错误识别函数及其功能错误识别函数及其功能 23n11.2.1 程序的调试程序的调试 错误的识别和程序调试错误的识别和程序调试

13、n程序断点的设置程序断点的设置 24n11.2.2 程序的优化程序的优化 程序优劣的分析程序优劣的分析n在在MATLAB 7语言中,使用语言中,使用profile函数以及计时函函数以及计时函数数tic和和toc来分析程序中各个部分的耗时情况,从来分析程序中各个部分的耗时情况,从而帮助用户找出程序中需要改进的地方。而帮助用户找出程序中需要改进的地方。n其中其中profile在计算相对耗时以及查找文件执行过程在计算相对耗时以及查找文件执行过程中瓶颈问题时更为有效,而中瓶颈问题时更为有效,而tic和和toc函数在计算绝函数在计算绝对耗时时更为有效。对耗时时更为有效。 25n11.2.2 程序的优化程序的优化 程序优化的技巧程序优化的技巧 n(1) 程序的向量化操作程序的向量化操作 n循环运算是循环运算是MATLAB中的最大弱点,在程序设计中,中的最大弱点,在程序设计中,应当尽量避免使用

温馨提示

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

评论

0/150

提交评论