第二单元 第3课 Matlab命令执行方式 1.Matlab命令执行方式 2.程序调试
1. Matlab命令的执行方式 1、交互式命令执行方式(命令窗口) 2、M文件的程序执行方式 (1)用Matlab语言编写的程序,称为M文件:是由若干Matlab命令组合在一起构成的,它可以完成某些操作,也可以实现某种算法。 M文件根据调用方式的不同分为两类: 命令文件(Script File) 函数文件(Function File) 它们的扩展名都是.m
(2)命令文件没有输入参数,也不返回输出参数;函数文件可以带输入参数,也可以返回输出参数。命令文件对工作空间中的变量进行操作,文件中所有命令的执行结果也返回工作空间中;函数文件中定义的变量为局部变量,当函数文件执行完毕时,这些变量也被清除。命令文件可以直接运行;函数文件不能直接运行,要以函数调用的方式来调用它。
例7.1 :命令文件: clear; a = 1:10; b = [11,12,13,14;15,16,17,18]; c = a; a = b; b = c; a b 3、M文件的建立与打开 M文件是一个文本文件,可以用任何编辑程序来建立和编辑,一般最常用的是使用Matlab提供的文本编辑器。该编辑器是一个集编辑和调试于一体的工作环境。
4、函数文件的基本结构 函数文件由function语句引导,其基本结构为: function 输出形参表 = 函数名(输入形参表) 注释说明部分 函数体语句 end 其中,以function开头的一行为引导行,表示该M文件是一个函数文 件。当输出形参多于一个时,应该用方括号括起来。
说明: (1).关于函数文件名 函数文件名通常由函数名再加上扩展名.m组成。 当函数文件名与函数名不同时,Matlab将忽略函数名而确认文件名 因此调用时使用函数文件名。
(2). 关于注释说明部分 注释说明包括3部分: ① 紧随引导行之后以%开头的第一注释行。 这一行一般包括大写的函数文件名和函数功能简要描述,供lookfor关键词查询和help在线帮助时使用。 ② 第一注释行及之后连续的注释行。 通常包括函数输入/输出参数的含义及调用格式说明等信息,构成全部在线帮助文本。 ③与在线帮助文本相隔一空行的注释行。 包括函数文件编写和修改的信息,如作者和版本等。
(3)、关于return语句 如果在函数文件中插入了return语句,则执行到该语句就结束函数 的执行,流程转至调用该函数的位置。通常也不使用return语句。 例7.2 :函数文件 %fexch.m function [a,b] = exch(a,b) c = a; a = b; b = c; end
(4)、函数调用 函数调用的一般格式是: [输出实参表] = 函数名(输入实参表) 注意:函数调用时,各实参出现的顺序、个数,应与函数定义时相同。 %将例7.2函数文件以文件名fexch.m保存,然后在命令窗口调用该函数文件: clear; x = 1:10; y = [11,12,13,14;15,16,17,18]; [x,y] = fexch(x,y)
(5)函数的嵌套调用 在Matlab中,函数可以嵌套调用,即一个函数可以调用别的函数。一个函数调用自身称为函数的递归调用。 例7.3 利用函数的递归调用,求n!。 n!本身就是以递归的形式定义的: function f = factor(n) if n<=1 f = 1; else f = factor(n-1)*n; %递归调用求(n-1)! end
(6)函数的嵌套调用 例7.4 在命令文件中调用例6.3函数文件,求s=1!+2!+3!+4!+5!的程序: s = 0; for i = 1:5 s = s + factor(i); end s
(6)函数参数的可调性 Matlab在函数调用上有一个与一般高级语言不同之处: 函数所传递参数数目的可调性,即参数的数量可以改变。在调用函数时Matlab用两个预定义变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数。
例7.5 nargin用法示例 函数文件examp.m: function fout = charray(a,b,c) if nargin == 1 fout = a; end if nargin == 2 fout = a+b; if nargin == 3 fout = (a*b*c)/2; end
5、全局变量与局部变量 Matlab中,函数文件中的变量是局部变量。如在若干函数中,都把某一变量定义为全局变量,那么这些函数将共用这个变量。全局变量的作用域是整个Matlab的工作空间,所有函数都可以对它进行存取和修改。
全局变量用global命令定义,格式为: 例7.6 全局变量应用示例。 先建立函数文件wadd.m,该函数将输入的参数加权相加: function f = wadd(x,y) global ALPHA,BETA f = ALPHA*x + BETA*y; end
在命令窗口中输入: global ALPHA BETA ALPHA = 1; BETA =2; s = wadd(1,2) 输出为:s = 5
3.程序调试 1、程序调试概述 程序调试是程序设计的重要环节,也是程序设计人员必须掌握的重要技能。Matlab提供了相应的程序调试功能,即可以通过文本编辑器对程序进行调试,又可以在命令窗口结合具体的命令进行。 一般说来,应用程序的错误有两类,一类是语法错误,另一类是运行时的错误。语法错误,给出相应的错误信息,并标出错误在程序中的行号。
例7.7: 输入下列程序: A = 87; B = 9.3; C = A+*B; 系统将给出错误信息: ???Error: File: Untitled1.m Line: 3 Column: 7 UnexpectedMATLAB operator. 通过分析Matlab给出的错误信息,不难排查程序中的语法错误。
2、Matlab调试菜单 尽管Matlab对程序逻辑错误时无能为力的,不会给出任何提示信息,但还是可以通过调试手段来发现。 采取的方法如下: ①将程序的一些主要中间结果输出到命令窗口,从而确定错误的区段。 ② 使用Matlab的调试菜单(debug),通过图像界面操作来实现程序调试。 step:单步运行,不进入函数; step in: 单步运行,进入函数; step out:停止单步运行; save and run:存储文件并开始运行。
stop if error/warnings: 断点操作,在程序执行出现错误或警告时,停止程序运行,进入调试状态。 ③或使用命令方式来实现程序
例7.8程序的调试 有一个求水仙花数的程序ex.m,试设置断点来控制程序执行。 调试步骤如下: ① 在if语句处设置断点:将插入点移至if语句所在行,选择Debug菜单的 Set/Clear Breakpoint命令,在该行前面有一个红色圆点,程序运行时 将在断点处暂停。 ② 运行程序,检查中间结果。在命令窗口输入命令: ex 在窗口命令的K>>后输入变量名,检查变量的值。可以分析判断程序 的正确性。
③ 选择Debug菜单中的Continue命令,程序继续运行,在断点处又暂停,再检查变量的值,一直到发现问题为止。 ④ 切换工作空间,结束对程序的调试。打开编辑窗口中的Stack下拉列表框,从中选择Base,即将工作空间切换到主工作空间。然后选择Debug菜单中的Set Clear Breakpoint 命令清楚已设置的断点,在选择Continue命令,去除白色箭头,完成调试。