单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,M文件及程序调试,在MATLAB入门阶段,通常在命令窗口的行命令下工作键入一行命令后,让系统立即执行该命令用这种方法时,程序的可读性很差且难以存储对于复杂的问题,我们可以将其编成可存储的程序文本,再让MATLAB执行该程序文件,这种工作模式称为程序文件模式即M文件模式10/6/2024,补.1 M文件,一、M文件的建立,M文件是由命令或函数构成的文本文件,可以用任何文本编辑程序来建立和编辑,一般常用且最为方便的是使用MATLAB提供的文本编辑器M文件有命令文件(也称主程序文件)和函数文件两种,命令文件可包含多个函数文件1打开文本编辑器,打开MATLAB文本编辑器有以下三种方法:,1)菜单操作:单击操作桌面的File菜单,再单击NewM-file命令;,2)命令操作:在命令窗口输入命令edit,单击Enter键;,3)命令按钮操作:单击操作桌面工具栏上的新建文件按钮 10/6/2024,2建立新的M文件,在文本编辑器的文档窗口输入文件内容,输入完毕后,选择文本编辑器窗口File菜单的Save或Save As命令存盘,默认名字是Untitled。
注意,M文件存放位置一般是MATLAB缺省的用户工作目录,如果要选择别的目录,则应该将该目录设定为当前目录或将其加到搜索路径中,以便于文件查找3运行M文件,输入文件内容并检查后,单击F5或文本编辑器的Debug Save and Run,在出现的Save file as对话框中,输入文件名*.m,单击“保存”,M文件自动存盘后运行10/6/2024,4打开已有的M文件,打开已有的M文件,也有三种方法:,1)菜单操作:单击操作桌面或文本编辑器的File Open选项,则打开Open或Open File窗口,再选择要打开的文件;,2)命令操作:在命令窗口输入命令edit ,回车后则打开指定的M文件如果文件不在当前路径下,还需在文件名前加上路径例如打开上例的文件,可在命令窗口的提示符后输入edit myfile.m;,3)命令按钮操作:单击操作桌面工具栏上的打开文件按钮 ,则打开Open或Open File窗口,再选择要打开的文件10/6/2024,二、M文件的调试,1直接调试法,1)如果在错误信息中指出了出错的行号,可先根据错误信息检查该语句是否存在,语法错误,或运行中,变量尺寸不一致,等情况。
2)检查所调用函数或命令的,拼写是否正确,,,括号(包括方括号和圆括号)是否配对,,各种,流程控制语句是否匹配(如for与end、while与end、switch与end等)3)检查所调用的函数或载入的,数据文件是否在当前目录或搜索路径上,4),将重点怀疑的命令行后的分号删除,,,使得计算结果能够实时地显示在屏幕上,作为查错的依据,,根据显示的结果判断问题的所在10/6/2024,2文本编辑器的编辑功能,(1)Go To.,当选定Go To.选项时,弹出如图2-2所示的对话框,输入行号单击【OK】后,光标自动移到指定的行上,并将该行作为当前行2)Set/Clear Bookmark,该选项为“设置或清除书签”10/6/2024,3文本编辑器的调试功能,(1)设置断点,设置断点是高级语言中程序调试的重要手段之一,断点是在程序特定位置设置的中断点,,当程序运行至断点处时会暂停运行,,此时可通过检查相关变量的内容等方法确定程序的运行是否正确图中的红色菱形点即为设置的断点10/6/2024,(2)Debug菜单,1)Step:单步执行每单击一次,程序运行一次,但不进入函数2)Step in:单步运行。
遇到函数时进入函数内,仍单步运行3)Step out:停止单步运行如果是在函数中,跳出函数;如果不在函数中,直接运行到下一个断点处4)Save and Run:存储文件并从第1行开始执行程序,当遇到第1个断点时暂停运行,并变为Continue;单击F5或【Continue】则继续运行5)Go Until Cursor:从当前位置运行到光标所在的位置10/6/2024,补.2 函数文件,一、基本结构,函数文件由function关键字引导,其基本结构为:,function 输出形参表函数名(输入形参表),注释说明部分,函数体语句,return,说明,:,以function开头的一行为引导行,表示该文件是一个函数文件函数名的命名规则与变量名相同输入形参表是函数的输入参数,可以有多个,用“逗号”来分隔;,输出形参表为函数的输出参数,,当输出形参只有一个时,直接输入变量名而不用方括号,,多个输出形参用“逗号”来分隔注意:,函数文件编辑结束后,不能像M文件那样单击F5或单击Debug Save and Run选项运行,而是要直接存盘10/6/2024,(1)函数文件名,函数文件名通常由函数名再加上扩展名.m组成,不过函数文件名与函数名也可以不相同。
2)注释说明,注释说明包括以下三部分内容:,a.紧随函数文件定义行之后,以开头的第一行这一行一般包括大写的函数文件名和函数功能的简要描述,供lookfor关键词查询和help帮助用b.第一行之后连续的注释行通常包括函数输入、输出参数的含义及调用格式说明等信息,构成全部帮助文本c.与帮助文本相隔一个空行的注释行包括函数文件编写和修改的信息,如作者、修改日期、版本等内容,用于软件档案管理3)return语句,如果在函数文件中插入了return语句,则执行到该语句就结束函数的执行,程序流程转到调用该函数的位置10/6/2024,二、函数调用,函数文件编制好后,就可以调用函数进行计算了函数调用的一般格式为:,输出实参表函数名(输入实参表),需要注意的是,函数调用时各实参出现的顺序、个数,应与函数定义时形参的顺序、个数一致,否则会出错函数调用时,先将实参传递给相应的形参,从而实现参数传递,然后再执行函数的功能三、参数的可调性,MATLAB在函数调用上有一个与一般高级语言不同之处,就是函数所传递参数数目的可调性凭借这一点,一个函数可完成多种功能在调用函数时,MATLAB用两个永久变量,nargin和nargout,分别记录调用函数时的输入实参和输出实参的个数。
只要在函数文件中包含这两个变量,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理10/6/2024,编写一个函数文件test,比较输入一个参数、两个参数和三个参数时的结果function apple=test(a,b,c),if nargin=1,apple=a;%,当只有一个输入实参时,返回参数a,elseif nargin=2,apple=a+b;%,当有两个实参时,返回参数为a+b,elseif nargin=3,apple=a+b+c;%,当有三个输入实参时,返回实参a+b+c,end,10/6/2024,补.3 编程技巧,一、测定程序执行时间,测定程序执行时间通常是使用tic和toc函数,tic用于启动秒表,toc用于停止秒表例】建立一个100100的魔方矩阵,并测定运行时间clear,clc,tic%开始计时,A=magic(100);%运行程序,magic为魔方矩阵函数,toc%结束计时,并显示所耗时间,在命令窗口观察运行结果为:,Elapsed time is 0.006427 seconds.,10/6/2024,二、程序的优化,(1)避免使用循环,编程时,尽量对矩阵或向量编程,,把循环向量化,,这样不仅能缩短程序长度,还能提高程序执行效率。
在必须使用多重循环的情况下,,若两个循环执行的次数不同,则应在循环的内层执行次数多的,外层执行次数少的2)对大型矩阵预先定义维数,在程序执行过程中,有时要动态改变矩阵的维数,这将非常浪费时间因此,应在定义大矩阵时,首先用函数(如zeros或ones)对矩阵定义好维数,然后再进行赋值,这样会提高程序的运行效率10/6/2024,二、程序的优化,(3)优先使用内层函数,矩阵运算要优先考虑使用MATLAB内层函数,因为内层函数是由更底层的C语言构成,执行速度快于使用循环的矩阵运算4)考虑接口语言,MATLAB支持同其他语言进行编译连接,若编程时已采取相应措施,而程序执行速度仍然很慢,则应考虑使用C语言等其他语言进程编程,然后编译连接,这样能显著提高程序的运行速度10/6/2024,。