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

下载本文档

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

文档简介

关于函数与程序的调试第1页,讲稿共26页,2023年5月2日,星期三本讲教学目标

掌握函数文件的基本结构掌握Matlab函数的调用方法了解函数参数的可调性掌握函数的句柄和常用的程序调试方法了解各种不同类型的函数第2页,讲稿共26页,2023年5月2日,星期三11.1函数11.1.1函数文件基本结构由function语句引导,其基本结构为:

function输出形参表=函数名(输入形参表)注释说明部分函数体语句函数名的命名规则与变量名相同。输入形参为函数的输入参数,输出形参为函数的输出参数。当输出形参多于一个时,则应该用方括号括起来。

第3页,讲稿共26页,2023年5月2日,星期三例1:编写函数文件求半径为r的圆的面积和周长。

函数文件如下:

%calculatetheareaandperimeterof

acircleofradiirfunction[s,p]=fcircle(r)%r—圆半径,s—圆面积,p—圆周长s=pi*r*r;p=2*pi*r;第4页,讲稿共26页,2023年5月2日,星期三11.1.2函数调用函数调用的一般格式是:

[输出实参表]=函数名(输入实参表)注意:函数调用时各实参出现的顺序和个数,应与函数定义时形参的顺序和个数一致,否则会出错。函数调用时,先将实参传递给相应的形参,从而实现参数传递,然后再执行函数的功能。在MATLAB中,函数可以嵌套调用,即函数可以调用别的函数,甚至调用它自身。一个函数调用它自身称为递归调用。第5页,讲稿共26页,2023年5月2日,星期三例2:利用函数文件,实现直角坐标(x,y)与极坐标(rho,theta)之间的转换。函数文件tran.m:function[rho,theta]=tran(x,y)rho=sqrt(x*x+y*y);theta=atan(y/x);调用tran.m的命令文件main1.m:

x=input('Pleaseinputx=:');y=input('Pleaseinputy=:');[rho,the]=tran(x,y)第6页,讲稿共26页,2023年5月2日,星期三例3:利用函数的递归调用,求n!。递归调用函数文件factor.m如下:functionf=factor(n)ifn<=1f=1;elsef=factor(n-1)*n;%递归调用求(n-1)!endn!本身就是以递归的形式定义的,即求n!需要求(n-1)!,这时可采用递归调用。第7页,讲稿共26页,2023年5月2日,星期三11.1.3函数参数的可调性函数nargin和函数nargout分别用于确定函数的输入输出参数个数。函数nargin和函数nargout允许函数接收或返回任意数目的参数。只要在函数文件中包含这两个函数,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理。第8页,讲稿共26页,2023年5月2日,星期三例4:nargin用法示例。

函数文件examp.m:functionfout=charray(a,b,c)ifnargin==1fout=a;elseifnargin==2fout=a+b;elseifnargin==3fout=(a*b*c)/2;end命令文件my.m:

x=[1:3];y=[1;2;3];examp(x)examp(x,y')examp(x,y,3)第9页,讲稿共26页,2023年5月2日,星期三11.1.4函数句柄函数句柄可以实现对函数的间接操作,可以通过将函数句柄传递给其他函数实现对函数的操作,也可以将函数句柄保存在变量中,留待以后调用操作。函数句柄的创建格式如下:

fhandle=@functionname其中fhandle为创建的函数functionname的函数句柄。

第10页,讲稿共26页,2023年5月2日,星期三若要保存函数句柄,可以使用单元数组,如下:

trigFun={@sin,@cos,@tan};通过函数句柄实现对函数的间接调用,其调用格式与直接调用函数的格式相同:

fhandle(arg1,arg2,...,argn)其中fhandle为函数句柄。例5:函数句柄操作。

>>trigFun={@sin,@cos,@tan};>>plot(trigFun{2}(-pi:0.01:pi))第11页,讲稿共26页,2023年5月2日,星期三函数句柄的操作

第12页,讲稿共26页,2023年5月2日,星期三11.1.5匿名函数匿名函数提供了一种创建简单程序的方法,可以使用户不必每次都编写M文件,可以在命令窗口或其他任意M文件和脚本文件中使用。格式为:

fhandle=@(arglist)expr其中fhandle为该函数创建的函数句柄;@符号用于创建函数句柄;arglist为用逗号分隔的参数列表;expr为函数主体,一般为表达式。第13页,讲稿共26页,2023年5月2日,星期三11.1.6主函数通常M文件中的第一个函数为主函数,主函数之后可以是任意数量的子函数,它们可以作为主程序的子程序。一般来说,主函数可被该文件之外的其他函数调用,而子函数只能被该文件内的函数调用。在命令窗口或M文件种只能调用主函数,调用的时候是通过存储该函数的M文件名进行。第14页,讲稿共26页,2023年5月2日,星期三11.1.7子函数与其他语言一样,在MATLAB7语言中也可以很方便地定义子函数,用来扩充函数的功能。在函数文件中题头定义的函数为主函数,而在函数体内定义的其他函数都被视为子函数。每个子函数以函数定义语句开头,直至下一个函数的定义或文件的结尾。子函数只能为主函数或同一主函数下的其他子函数所使用。第15页,讲稿共26页,2023年5月2日,星期三11.1.8嵌套函数

一个函数内部可以定义其他的函数,这种内部的函数称作嵌套函数。定义嵌套函数时,只要在一个函数内部直接定义嵌套函数即可。注意:当一个M文件中存在嵌套函数时,该文件内的所有函数必须以end结尾。第16页,讲稿共26页,2023年5月2日,星期三例6:嵌套函数的结构functionx=A(p1,p2)...functiony=B(p3)...end...end每个函数中可以嵌套多个函数。第17页,讲稿共26页,2023年5月2日,星期三11.1.9私有函数这类函数位于名为“private”的子文件夹中,只能被上一级文件夹中的函数或者这些函数所调用的M文件调用。如当前文件夹为math,其中包含private文件夹,则private中的函数只能被math根目录下的函数及这些函数调用的M文件调用。用户可开发自己的函数库,其名称可以与系统标准M函数库名称相同,而不必担心在函数调用时发生冲突,因为MATLAB首先查找私有函数,再查找标准函数。第18页,讲稿共26页,2023年5月2日,星期三11.1.10重载函数函数重载为程序编写和用户调用都提供了很大的方便。函数重载允许多个函数使用相同的函数名,不同的输入参数类型。在函数调用时,系统根据输入参数的情况自动选择相应的函数执行。第19页,讲稿共26页,2023年5月2日,星期三11.2程序的调试和优化11.2.1程序的调试程序的错误种类错误的识别和程序调试

11.2.2程序的优化程序优劣的分析程序优化的技巧有效地使用内存第20页,讲稿共26页,2023年5月2日,星期三11.2.1程序的调试

程序的错误种类在MATLAB的表达式中存在两种类型的错误:(1)语法错误语法错误发生在M文件程序代码的生成过程中,一般是由函数参数输入类型有误或是矩阵运算阶数不符等引起。(2)运行错误运行错误一般指在程序运行过程中,出现溢出或是死循环等异常现象。第21页,讲稿共26页,2023年5月2日,星期三11.2.1程序的调试

错误的识别和程序调试错误识别函数及其功能第22页,讲稿共26页,2023年5月2日,星期三11.2.1程序的调试

错误的识别和程序调试程序断点的设置第23页,讲稿共26页,2023年5月2日,星期三11.2.2程序的优化

程序优劣的分析在MATLAB7语言中,使用profile函数以及计时函数tic和toc来分析程序中各个部分的耗时情况,从而帮助用户找出程序中需要改进的地方。其中profile在计算相对耗时以及查找文件执行过程中瓶颈问题时更为有效,而tic和toc函数在计算绝对耗时时更为有效。

第24页,讲稿共26页,2023年5月2日,星期三11.2.2程序的优化

程序优化的技巧(1)

温馨提示

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

评论

0/150

提交评论