《MATLAB程序设计函数文件和程序调试.ppt》由会员分享,可在线阅读,更多相关《MATLAB程序设计函数文件和程序调试.ppt(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、MATLAB 程序设计函数文件和程序调试,2,M文本文件介绍,MATLAB编写的程序文件称为M文件,M文件有脚本文件和函数文件两种。 脚本文件( M-script )不需要输入参数,也不输出参数,按照文件中制定的顺序执行命令序列。脚本文件适合于小规模运算。 函数文件接受其他数据为输入参数,并且可以返回数据。函数是MATLAB编程的主流方法。,3,脚本M文件介绍,脚本M文件通常仅仅由M文件正文和注释部分构成。正文主要是实现功能,注释则是给出代码说明。 例: g=0: 0.5: 20; %产生 一维向量 x=sin(g); % 计算正弦值 y=cos(g); % 计算余弦值 z=x; y; 保存脚
2、本文件时按照MATLAB标识符的要求起文件名 脚本文件的运行有两种方式:1. 在命令窗口中键入文件名; 2. 在M文件编辑窗口点击Debug菜单的Run,或者使用快捷键F5。,4,函数M文件介绍,函数M文件由function语句引导,格式为: function 输出形参列表= 函数名(输入形参列表) %注释说明部分(可选) 函数体语句 (必须) 注意: 第一行为引导行,表示该M文件是函数文件 函数名的命名规则与变量名相同( 必须以字母开头) 当输出形参多于一个时,用方括号括起来 函数必须是一个单独的M文件, 函数文件名建议与函数名一致,通常为函数名.m,不一致时以文件名为准。,5,函数M文件介
3、绍,形参 全称为“形式参数” 由于它不是实际存在变量,所以又称虚拟变量。形参是在定义函数的时候使用的参数,目的是用来接收调用该函数时传入的参数。 形参也可以理解为函数的自变量,其初值来源于函数的调用。只有在程序执行过程中调用了函数,形参才有可能得到具体的值,并参与运算求得函数值。 形参在整个函数体内都可以使用, 离开该函数则不能使用。,6,函数M文件介绍,%注释说明部分(可选) 第一注释行为大写的函数文件名和函数功能简要描述,供lookfor和help使用 第一注释行之后为函数输入/输出参数的含义及调用格式说明等信息,构成全部在线帮助文本 在线帮助文本后空一行 空一行之后的注释行,包括文件编写
4、和修改的信息,用于软件档案管理,7,函数M文件举例,编写函数文件计算圆柱体的表面积和体积 function s, v=colume (r, h) s=2*r*pi*h + 2*pi*r2; % calculate the surface area v=pi*r2*h; % calculate the volume 注意: 当函数具有多个输出变量时,则以方括号括起 当函数不含输出变量时,则直接略去输出部分或采用空方括号表示。,% r is the radius of the colume % h is the height of the colume 注释,8,函数的调用,函数文件不能直接运行,
5、要以函数调用的方式来调用,调用一般格式: 实参必须有确定的值。 函数调用时,先将实参传递给相应的形参,从而实现参数传递,然后再执行函数的功能。 函数调用时,实参的顺序和个数应与函数定义时的形参的顺序和个数一致。 函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。,输出实参列表 = 函数名(输入实参列表),9,函数的调用,例: s, v=colume (1, 1); 或者 r=1; h=1; s, v=colume (r, h);,10,函数变量,工作区 MATLAB将每个变量保存在一块内存空间中,这个空间称为工作区。主工作区包括所有通过命令窗口创建
6、的变量和脚本文件运行生成的变量。脚本文件没有独立的工作区,而每个函数都拥有独立的工作区,将该函数的所有变量都保存在该独立的工作区中。 根据变量的作用工作区,函数变量主要分为以下两种: 局部变量 全局变量,11,函数变量局部变量,局部变量: 每个函数都有自己的局部变量,这些变量存储在该函数独立的工作区中,与其他函数的变量及主工作区中的变量分开存储。当函数调用结束时,这些变量随之删除,不保存在内存中。并且,除了函数返回值,该函数不改变工作区中其他变量的值。 脚本文件没有独立的工作区,当通过命令窗口调用脚本文件时,脚本文件分享主工作区,当函数调用脚本文件时,脚本文件分享主调函数的工作区。需要注意的是
7、,如果脚本中改变了工作区中变量的值,则在脚本文件调用结束后,该变量的值发生改变。 在函数中,变量默认为局部变量。,12,函数变量全局变量,全局变量 局部变量只在一个工作区内有效,无论是函数工作区还是 MATLAB 主工作区。与局部变量不同,全局变量可以在定义该变量在全部工作区中有效。当在一个工作区内改变该变量的值时,该变量在其他工作区中的变量同时改变。 任何函数如果需要使用全局变量,则必须首先声明,声明格式为: global 变量名1 变量名2 变量名列表中的各个变量用空格隔开,不能用逗号!,13,函数变量全局变量,定义全局变量是M文件间传递信息的一种手段。 全局变量给函数间的数据传递带来了方
8、便,但却破坏了函数对变量的封装,降低了程序的可读性,因而在结构化程序设计中,全局变量是不受欢迎的。特别是当程序较大,子程序较多时,全局变量将个程序调试和维护带来不便,故不提倡使用全局变量。,14,函数类型,主函数 子函数 嵌套函数,15,函数类型主函数,通常每个 M 文件中的第一个函数为主函数,主函数可以被该文件之外的其他函数调用,而子函数只能被该文件内的函数调用。主函数的调用通过存储该函数的 M 文件的文件名调用。,16,函数类型子函数,一个 M 文件中可以包括多个函数,除主函数之外的其他函数称为子函数。子函数只能被主函数或该文件内的其他子函数调用。每个子函数以函数定义语句开头,直至下一个函
9、数的定义或文件的结尾。,17,函数类型嵌套函数,一个函数内部可以定义其他的函数,这种内部的函数称作嵌套函数。 定义嵌套函数时,只要在一个函数内部直接定义即可。需要注意的是当一个 M文件中存在嵌套函数时,该文件内的所有函数必须以 end 结尾。 例 嵌套函数的结构 function x = A(p1, p2) . function y = B(p3) . end . end,18,函数类型嵌套函数,每个函数中可以嵌套多个函数。 多个平行嵌套函数 function x = A(p1, p2) . function y = B(p3) . end function z = C(p4) . end .
10、 end,19,函数类型嵌套函数,多层嵌套函数 function x = A(p1, p2) . function y = B(p3) . function z = C(p4) . end . end . end 在这段程序中,函数 A 嵌套了函数 B,函数 B 嵌套了函数 C。,20,函数类型嵌套函数的调用,一个嵌套函数可以被下列函数调用: (1)该嵌套函数的上一层函数; (2)同一母函数下的同级嵌套函数; (3)被任一低级别的函数调用。,21,函数句柄,利用函数句柄可以实现对函数的间接操作,可以通过将函数句柄传递给其他函数实现对函数的操作,也可以将函数句柄保存在变量中,留待以后调用操作。
11、函数句柄是通过 符号创建的,格式为: fhandle = functionname。 例:求解方程ex-x=0 function fx=equation (x) fx=exp(x)-3*x; fzero(equation, 1) ; fminbnd(equation, 0,1) ;,22,程序的调试,应用程序的错误有两类 语法错误 包括词法或文法的错误,例如函数名的拼写错误、表达式书写错误等。 MATLAB能检测出大多数该类错误,给出错误信息,并指出出错的位置。 运行时的错误 程序的运行结果有错误,这类错误也称为程序逻辑错误。 MATLAB系统对程序逻辑错误无能为力,23,程序的调试,对于逻辑错误,可采用调试手段来发现 将程序执行的中间结果输出到命令窗口,以方便检查; 去掉分号 利用函数 disp 显示中间变量的值 使用调试菜单(debug),通过图形界面操作实现程序调试 单步运行 设置断点,24,MATLAB调试菜单,MATLAB的M文件编辑器中的Debug菜单提供了全部的调试选项。,25,程序的调试举例,x=200; while x0 if mod(x,7)=0 continue; end x=x-1; end,
限制150内