函数与程序的调试.ppt_第1页
函数与程序的调试.ppt_第2页
函数与程序的调试.ppt_第3页
函数与程序的调试.ppt_第4页
函数与程序的调试.ppt_第5页
免费预览已结束,剩余17页可下载查看

下载本文档

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

文档简介

1、本讲教学目标 掌握函数文件的基本结构 掌握Matlab函数的调用方法 了解函数参数的可调性 掌握函数的句柄和常用的程序调试方法 了解各种不同类型的函数,11.1 函数 11.1.1 函数文件基本结构 由function语句引导,其基本结构为: function 输出形参表=函数名(输入形参表) 注释说明部分 函数体语句 函数名的命名规则与变量名相同。 输入形参为函数的输入参数,输出形参为函数的输出参数。 当输出形参多于一个时,则应该用方括号括起来。,例1:编写函数文件求半径为 r 的圆的面积和周长。 函数文件如下: % calculate the area and perimeter of a

2、 circle of radii r function s,p=fcircle(r) % r 圆半径, s 圆面积, p 圆周长 s=pi*r*r; p=2*pi*r;,11.1.2 函数调用 函数调用的一般格式是: 输出实参表=函数名(输入实参表) 注意:函数调用时各实参出现的顺序和个数,应与函数定义时形参的顺序和个数一致,否则会出错。 函数调用时,先将实参传递给相应的形参,从而实现参数传递,然后再执行函数的功能。 在MATLAB中,函数可以嵌套调用,即函数可以调用别的函数,甚至调用它自身。一个函数调用它自身称为递归调用。,例2:利用函数文件,实现直角坐标(x, y)与极坐标(rho, th

3、eta)之间的转换。 函数文件tran.m: function rho,theta=tran(x,y) rho=sqrt(x*x+y*y); theta=atan(y/x); 调用tran.m的命令文件main1.m: x=input(Please input x=:); y=input(Please input y=:); rho,the=tran(x,y),例3:利用函数的递归调用,求n!。 递归调用函数文件factor.m如下: function f=factor(n) if n=1 f=1; else f=factor(n-1)*n; %递归调用求(n-1)! end n!本身就是以递

4、归的形式定义的,即求n!需要求(n-1)!,这时可采用递归调用。,11.1.3 函数参数的可调性 函数 nargin 和函数 nargout 分别用于确定函数的输入输出参数个数。 函数 nargin 和函数 nargout 允许函数接收或返回任意数目的参数。 只要在函数文件中包含这两个函数,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理。,例4:nargin用法示例。 函数文件examp.m: function fout=charray(a,b,c) if nargin=1 fout=a; elseif nargin=2 fout=a+b; elseif nar

5、gin=3 fout=(a*b*c)/2; end,命令文件my.m: x=1:3; y=1;2;3; examp(x) examp(x,y) examp(x,y,3),11.1.4 函数句柄 函数句柄可以实现对函数的间接操作,可以通过将函数句柄传递给其他函数实现对函数的操作,也可以将函数句柄保存在变量中,留待以后调用操作。 函数句柄的创建格式如下: fhandle=functionname 其中fhandle为创建的函数functionname的函数句柄。,若要保存函数句柄,可以使用单元数组,如下: trigFun = sin, cos, tan; 通过函数句柄实现对函数的间接调用,其调用格

6、式与直接调用函数的格式相同: fhandle(arg1, arg2, ., argn) 其中 fhandle 为函数句柄。 例5:函数句柄操作。 trigFun = sin, cos, tan; plot(trigFun2(-pi:0.01:pi),函数句柄的操作,11.1.5 匿名函数 匿名函数提供了一种创建简单程序的方法,可以使用户不必每次都编写M文件,可以在命令窗口或其他任意 M 文件和脚本文件中使用。 格式为: fhandle = (arglist) expr 其中fhandle为该函数创建的函数句柄; 符号用于创建函数句柄;arglist为用逗号分隔的参数列表;expr为函数主体,一

7、般为表达式。,11.1.6 主函数 通常M文件中的第一个函数为主函数,主函数之后可以是任意数量的子函数,它们可以作为主程序的子程序。 一般来说,主函数可被该文件之外的其他函数调用,而子函数只能被该文件内的函数调用。 在命令窗口或M文件种只能调用主函数,调用的时候是通过存储该函数的M文件名进行。,11.1.7 子函数 与其他语言一样,在MATLAB 7语言中也可以很方便地定义子函数,用来扩充函数的功能。 在函数文件中题头定义的函数为主函数,而在函数体内定义的其他函数都被视为子函数。每个子函数以函数定义语句开头,直至下一个函数的定义或文件的结尾。 子函数只能为主函数或同一主函数下的其他子函数所使用

8、。,11.1.8 嵌套函数 一个函数内部可以定义其他的函数,这种内部的函数称作嵌套函数。 定义嵌套函数时,只要在一个函数内部直接定义嵌套函数即可。 注意:当一个 M文件中存在嵌套函数时,该文件内的所有函数必须以 end 结尾。,例6:嵌套函数的结构 function x = A(p1, p2) . function y = B(p3) . end . end 每个函数中可以嵌套多个函数。,11.1.9 私有函数 这类函数位于名为“private”的子文件夹中,只能被上一级文件夹中的函数或者这些函数所调用的 M 文件调用。 如当前文件夹为math,其中包含private文件夹,则 private

9、 中的函数只能被 math 根目录下的函数及这些函数调用的M文件调用。 用户可开发自己的函数库,其名称可以与系统标准 M函数库名称相同,而不必担心在函数调用时发生冲突,因为 MATLAB 首先查找私有函数,再查找标准函数。,11.1.10 重载函数 函数重载为程序编写和用户调用都提供了很大的方便。 函数重载允许多个函数使用相同的函数名,不同的输入参数类型。 在函数调用时,系统根据输入参数的情况自动选择相应的函数执行。,11.2 程序的调试和优化 11.2.1 程序的调试 程序的错误种类 错误的识别和程序调试 11.2.2 程序的优化 程序优劣的分析 程序优化的技巧 有效地使用内存,11.2.1 程序的调试 程序的错误种类 在MATLAB的表达式中存在两种类型的错误: (1) 语法错误 语法错误发生在M文件程序代

温馨提示

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

最新文档

评论

0/150

提交评论