Matlab实训6-程序设计.ppt

上传人:牧羊曲112 文档编号:6511880 上传时间:2023-11-08 格式:PPT 页数:84 大小:713KB
返回 下载 相关 举报
Matlab实训6-程序设计.ppt_第1页
第1页 / 共84页
Matlab实训6-程序设计.ppt_第2页
第2页 / 共84页
Matlab实训6-程序设计.ppt_第3页
第3页 / 共84页
Matlab实训6-程序设计.ppt_第4页
第4页 / 共84页
Matlab实训6-程序设计.ppt_第5页
第5页 / 共84页
点击查看更多>>
资源描述

《Matlab实训6-程序设计.ppt》由会员分享,可在线阅读,更多相关《Matlab实训6-程序设计.ppt(84页珍藏版)》请在三一办公上搜索。

1、本章详细讲解利用M语言进行编程的方法讲述的主要内容:脚本文件流程控制函数文件子函数M文件的调试,实训六 MATLAB编程基础(二),MATLAB编程基础(续),6.1 概述6.2 脚本文件6.3 流程控制6.4 函数文件6.5 M文件调试6.6 M文件性能分析,6.4 函数文件,M语言函数文件能够接受用户的输入参数,进行计算,并将计算结果作为函数的返回值返回给调用者在MATLAB中具有不同类型的函数文件内建函数文件系统M函数文件系统MEX函数文件用户自定义MEX函数文件用户自定义的M函数文件,函数文件(续),MATLAB的内建函数文件MATLAB自定义的函数文件称内建函数文件。调用内建函数的方

2、法:使用函数名并给出相应的输入、输出参数即可。例如:sin.m函数 调用格式:y=sin(x)例:x=0:2*pi/180:2*pi;y=sin(2*x);plot(x,y),用户自定义的M函数文件是由用户自己利用M语言编写的文件系统M函数文件是由MATLAB提供的M语言函数文件,函数文件(续),本节介绍6.4.1 基本结构6.4.2 输入输出参数6.4.3 子函数6.4.4 局部变量和全局变量6.4.5 函数执行规则,函数文件(续),M语言函数文件具有下面的不同部分函数定义行在线帮助注释行M语言代码,6.4.1 基本结构,函数m文件的格式:function 返回变量=函数名(输入变量)注释说

3、明语句段 程序语句段特定规则:1)函数m文件第一行必须以单词function作为引导词,必须遵循如下形式:function=()2)程序中的变量均为局部变量,不保存在工作空间中,其变量只在函数运行期间有效。,基本结构(续),001 function y=average(x)002%AVERAGE 求向量元素的均值003%语法:004%Y=average(X)005%其中,X是向量,Y为计算得到向量元素的均值006%若输入参数为非向量则出错007008%代码行009 m,n=size(x);010%判断输入参数是否为向量011 if(m=1)|(n=1)|(m=1,例 函数文件示例,函数定义行0

4、01 function y=average(x)包括关键字function 函数输出参数y 函数名称average 函数输入参数x函数名称定义要求必须以字符开头,后面可以用字符、数字和下划线的组合构成函数名称MATLAB对函数名称的长度有限定函数的M文件名称最好和函数名称保持一致,若不一致,则调用函数时需要使用文件名称而非函数名称。,基本结构(续),在线帮助M函数文件的在线帮助为紧随在函数定义行的注释行002%AVERAGE 求向量元素的均值003%语法:004%Y=average(X)005%其中,X是向量,Y为计算得到向量元素的均值006%若输入参数为非向量则出错,基本结构(续),若在MA

5、TLAB命令行窗口中键入指令help average 则 help average AVERAGE 求向量元素的均值 语法:Y=average(X)其中,X是向量,Y为计算得到向量元素的均值 若输入参数为非向量则出错,基本结构(续),注释行008%代码行010%判断输入参数是否为向量012%若输入参数不是向量,则出错015%计算向量元素的均值注释行不会显示在在线帮助中,主要原因是这些注释行没有紧随在H1帮助行的后面,基本结构(续),M语言代码008%代码行009 m,n=size(x)010%判断输入参数是否为向量011 if(m=1)|(n=1)|(m=1&n=1)012%若输入参数不是向量

6、,则出错013 error(Input must be a vector)014 end015%计算向量元素的均值016 y=sum(x)/length(x)代码行需要完成具体的算法,实现用户的具体功能,基本结构(续),MATLAB在定义输入输出参数时不需要指出变量的类型,而是将参数默认为双精度型MATLAB在定义参数时,没有确定输入参数的维数或者尺寸M语言的函数文件不仅可以有一个输入参数和一个返回值,还可以为M语言函数文件定义多个输入参数和多个输出参数,6.4.2 输入输出参数,例 多个输入输出参数的M函数functionavg,stdev,r=ourstats(x,tol)%OURSTAT

7、S多输入输出参数示例%该函数计算处理矩阵,得到相应的均值、标准差和矩阵的秩m,n=size(x);if m=1 m=n;end%Averageavg=sum(x)/m;%Sandad deviationstdev=sqrt(sum(x.2)/m-avg.2);%Ranks=svd(x);r=sum(stol);,输入输出参数(续),运行 A=1 2 3;4 5 6A=1 2 3 4 5 6 a,s,r=outstats(A,0.1)a=2.5000 3.5000 4.5000s=1.5000 1.5000 1.5000r=2 outstats(A,0.1)ans=2.5000 3.5000 4

8、.5000,输入输出参数(续),a,s=outstats(A,0.1)a=2.5000 3.5000 4.5000s=1.5000 1.5000 1.5000,调用该函数时,将输出参数依次写在一个向量中,若输出参数的个数等于指定的输出参数个数时,计算结果依次赋值给不同的变量。若输出参数的个数小于函数定义的输出参数个数时,将计算得到的前几个输出参数作为返回值。,运行 A=1 2 3;4 5 6A=1 2 3 4 5 6 a,s,r=outstats(A,0.1)a=2.5000 3.5000 4.5000s=1.5000 1.5000 1.5000r=2 outstats(A,0.1)ans=2

9、.5000 3.5000 4.5000,输入输出参数(续),a,s,r,t=outstats(A,0.1)?,运行 A=1 2 3;4 5 6A=1 2 3 4 5 6 a,s,r=outstats(A,0.1)a=2.5000 3.5000 4.5000s=1.5000 1.5000 1.5000r=2 outstats(A,0.1)ans=2.5000 3.5000 4.5000,输入输出参数(续),a,s,r,t=outstats(A,0.1)?Error using=outstatsToo many output arguments.a,s,r=outstats(A,0.1,1)?Er

10、ror using=outstatsToo many input arguments.,若输出参数的个数大于函数定义的输出参数个数时,将提示出错。,若输入参数的个数大于函数定义的输入参数个数时,将提示出错。,输入输出参数(续),控制输入输出参数的个数还有一些方法:函数nargin用来获取当前调用函数时给定的输入参数个数函数nargout用来获取当前调用函数时给定的输出参数个数函数varargin用来获取当前调用函数时可变的输入参数个数函数varargout用来获取当前调用函数时可变的输出参数个数,例 nargout和nargin示例function c=testarg(a,b)%TESTARG

11、检测输入输出参数个数%该函数根据不同的输入输出参数个数进行相应的操作if(nargout=1)disp(使用该函数必须指定一个输出参数!);returnendswitch nargin case 0 disp(使用该函数必须指定一个输入参数!);c=;return case 1 c=a.2;case 2 c=a+b;end,输入输出参数(续),函数nargin用来获取函数的输入参数个数函数nargout用来获取函数输出函数个数,运行例4-15 A=1 2 3;B=2 3 5;testarg(A,B)使用该函数必须指定一个输出参数!C=testarg(A,B)C=3 5 8 C=testarg使

12、用该函数必须指定一个输入参数!C=C=testarg(A)C=1 4 9 C=testarg(A,B,C)?Error using=testargToo many input arguments.,输入输出参数(续),MATLAB的M函数文件还可以具有个数不确定的输入、输出参数在定义M函数文件时,不指明输入、输出参数的个数,而是在程序中通过编写程序完成具体参数的确定完成该功能主要依靠varargin和varargout函数当函数的定义具有以下形式时 function y=function_name(varargin)函数function_name可以接受任意个数的输入参数 使用varargin

13、函数接受M函数参数时,将用户输入的所有参数构建 成为一个元胞数组,该元胞数组中的元素为用户输入的参数当函数的定义具有以下形式时 function varargout=function_name(n)函数function_name可以输出任意个数的输出参数 使用varargout函数输出M函数参数时,需要将所有必要的输出参数 传递给元胞数组,在传递参数时,还需要注意参数的顺序,输入输出参数(续),例 不确定的输入参数个数function y=varargin_example(varargin)%VARARGIN_EXAMPLE不确定输入参数例子str=sprintf(输入参数的个数:=%d,le

14、ngth(varargin);disp(str);y=0;%varargin的类型class(varargin)for i=1:length(varargin)%varargin为元胞数组 if(isnumeric(varargini)%将每个为数值数组的输入参数的第一个元素累加求和 y=y+varargini(1);endend,输入输出参数(续),运行 不确定的输入参数个数 varargin_example输入参数的个数:=0ans=cellans=0 varargin_example(a,1 2 3,3,rand(2,5)输入参数的个数:=4ans=cellans=4.6154,输入输出

15、参数(续),class(varargin),class(varargin),y=y+varargini(1),例 不确定的输出参数个数function varargout=varargout_example(varargin)%VARARGOUT_EXAMPLE不确定个数的输出参数%判断输出参数的个数%下面注释行中的代码执行有错误%str=sprintf(输出参数的个数=%d,length(varargout);%必须使用nargoutstr=sprintf(输出参数的个数:=%d,nargout);disp(str);if(nargout=nargin)for k=1:nargout var

16、argoutk=vararginnargin-k+1;endend,输入输出参数(续),在程序中,判断输出参数的个数不能使用length函数,而需要使用nargout函数,运行 a b=varargout_example(3,4,5,9)输出参数的个数:=2a=9b=5,输入输出参数(续),if(nargout=nargin)for k=1:nargout varargoutk=vararginnargin-k+1;endendnargin=4,nargout=2 k=1 varargout1=varargin4-1+1=varargin4 a=9 k=2 varargout2=varargi

17、n4-2+1=varargin3 b=5,k=1:2,子函数同一个M函数文件可以包含多个函数,文件中的第一个M函数称为主函数,其余的函数称为子函数M函数文件的名称一般与主函数的名称保持一致每一个函数的开始都是函数定义行,函数的结尾是另一个函数的定义行的开始或者整个M文件的结尾(最后一个子函数的结尾是文件结束符)子函数没有在线帮助,且只能被那些在定义子函数的M文件中定义的函数(包括主函数和其他子函数)调用,不能被其他M文件定义的函数调用,6.4.3 子函数,例 子函数应用例子functionavg,med=newstats(u)%主函数%NEWSTATS计算均值和中间值n=length(u);a

18、vg=mean(u,n);%调用子函数meanmed=median(u,n);%调用子函数medianfunction a=mean(v,n)%子函数%计算平均值a=sum(v)/n;function m=median(v,n)%子函数%计算中间值w=sort(v);if rem(n,2)=1 m=w(n+1)/2);else m=(w(n/2)+w(n/2+1)/2;end,运行 x=1:11;mean,mid=newstats(x)mean=6mid=6 x=1:10;a,b=newstats(x)a=5.5000b=5.5000,子函数(续),help newstatsNEWSTATS计

19、算均值和中间值 help newstatsmedian计算中间值,子函数(续),functionavg,med=newstats(u)%NEWSTATS计算均值和中间值n=length(u);avg=mean(u,n);med=median(u,n);function a=mean(v,n)%计算平均值a=sum(v)/n;function m=median(v,n)%计算中间值w=sort(v);if rem(n,2)=1 m=w(n+1)/2);else m=(w(n/2)+w(n/2+1)/2;end,局部变量:在M函数内部声明并使用的变量只在本函数范围内有效仅能在函数调用执行期间被使用

20、,一旦函数结束运行,则变量占用的内存空间自动释放,变量的数值也不存在了例 局部变量的例子function local%LOCAL察看局部变量的例子x=rand(2,2);y=zeros(2,2);z=函数中的变量;u=x,y,z;disp(z)whos,6.4.4 局部变量和全局变量,运行局部变量的例子 local函数中的变量Name Size Bytes Class u 1x3 256 cell array x 2x2 32 double array y 2x2 32 double array z 1x6 12 char arrayGrand total is 31 elements usi

21、ng 332 bytes whos,全局变量:在函数之外定义的变量可以为本文件中其他函数所共用MATLAB将全局变量保存在特殊的工作空间进行统一维护、管理将变量声明为全局变量的方法在使用变量前,用关键字global声明例:声明全局变量XY global XY whos Name Size Bytes Class XY 0 x0 0 double array(global)Grand total is 0 elements using 0 bytes,局部变量和全局变量(续),使用global关键字创建全局变量时有三种情况若声明为全局的变量在当前空间和全局空间都不存在,则创建一个新的变量,然后为

22、这个变量赋值为空数组,该变量同时存在于局部工作空间和全局工作空间若声明为全局的变量已经存在于全局空间中,则不会在全局工作空间创建新的变量,其数值同时赋值给局部工作空间中的变量若声明为全局的变量存在于局部工作空间中,而全局工作空间不存在,则系统会提示一个警告信息,同时将局部的变量复制到全局工作空间中,局部变量和全局变量(续),例 全局变量的例子%创建全局变量 global myx%察看全局变量的信息 whos Name Size Bytes Class myx 0 x0 0 double array(global)Grand total is 0 elements using 0 bytes w

23、hos global Name Size Bytes Class myx 0 x0 0 double array(global)Grand total is 0 elements using 0 bytes,局部变量和全局变量(续),若声明为全局的变量在当前空间和全局空间都不存在,则创建一个新的变量,然后为这个变量赋值为空数组,该变量同时存在于局部工作空间和全局工作空间,例 全局变量的例子(续)%给全局变量赋值 myx=10myx=10%察看全局变量的信息 whos Name Size Bytes Class myx 1x1 8 double array(global)Grand total

24、is 1 element using 8 bytes whos global Name Size Bytes Class myx 1x1 8 double array(global)Grand total is 1 element using 8 bytes,局部变量和全局变量(续),其数值同时赋值给局部工作空间中的变量,例 全局变量的例子(续)myy=10myy=10 whosName Size Bytes Classmyy 1x1 8 double arrayGrand total is 1 element using 8 bytes whos global,局部变量和全局变量(续),若声

25、明为全局的变量存在于局部工作空间中,而全局工作空间不存在,则系统会提示一个警告信息,同时将局部的变量复制到全局工作空间中,global myyWarning:The value of local variables may have been changed to match the globals.Future versions of MATLAB will require that you declare a variable to be global before you use that variable.whosName Size Bytes Class myy 1x1 8 doub

26、le array(global)Grand total is 1 element using 8 bytes whos globalName Size Bytes Classmyy 1x1 8 double array(global)Grand total is 1 element using 8 bytes,例 全局变量的例子(续)%清除变量 clear myx%察看信息 whos whos global Name Size Bytes Class myx 1x1 8 double array(global)Grand total is 1 element using 8 bytes,局部变

27、量和全局变量(续),只是将局部工作空间中的变量清除,例 全局变量的例子(续)%在局部工作空间再次创建变量 myx=23myx=23%察看变量的信息 whos Name Size Bytes Class myx 1x1 8 double arrayGrand total is 1 element using 8 bytes,局部变量和全局变量(续),例 全局变量的例子(续)%将其修改为全局变量 global myxWarning:The value of local variables may have been changed to match the globals.Future versi

28、ons of MATLAB will require that you declare a variable to be global before you use that variable.%察看变量的数值 myxmyx=10,局部变量和全局变量(续),注意:在此例中将局部变量转变为全局变量的过程中原来的局部变量的数值丢失了,例 全局变量的例子(续)%清除当前的工作空间 clear whos whos globalName Size Bytes Classmyx 1x1 8 double array(global)Grand total is 1 element using 8 bytes

29、%清除所有的工作空间 clear all whos whos global,局部变量和全局变量(续),当用户在MATLAB命令行窗口键入一条命令或者执行M语言文件中包含的一条语句或者指令时,MATLAB解释器就负责解析用户的输入,并且给出相应的答案MATLAB解释器解析命令按照一定的优先级进行首先判断输入的命令是否为变量若不是内存中的变量,判断输入的命令是否为MATLAB的内建函数若不是内建函数,则判断输入的命令是否为子函数若在同一个路径下发现同名的三种类型的文件MEX文件、P代码文件和M代码文件,则优先执行MEX文件,其次是P代码文件,最后执行的是M语言文件,6.4.5 函数执行规则,例 M

30、ATLAB命令解析的优先级 sin=This is a string!sin=This is a string!sin(3)ans=i which sinsin is a variable.clear all sin(3)ans=0.1411 which sinsin is a built-in function.,函数执行规则(续),若需要了解具体调用的是哪一个对象,则可以使用which命令获取相应的信息,MATLAB编程基础(续),6.1 概述6.2 脚本文件6.3 流程控制6.4 函数文件6.5 M文件调试6.6 M文件性能分析,6.5 M文件调试,M文件的调试可以在文件编辑器中进行M语

31、言的文件编辑器不仅仅是一个文件编辑器,还是一个可视化的调试开发环境可以在命令行中结合具体的命令进行,6.5 M文件调试,一般调试过程条件断点错误断点命令行调试,6.5.1 一般调试过程,应用程序的错误语法错误包括词法或者文法的错误运行时的错误指程序运行过程中得到的结果不是用户需要的结果程序的调试是在程序无法得到正确结果时进行程序修正的唯一手段M文件是一种解释型语言,只有在运行过程中才能发现应用程序的错误,从MATLAB Release 14即MATLAB 7.0开始,如果程序运行过程中出现错误,则在MATLAB命令行窗体提示信息中,以超链接的方式来显示出现错误的代码行位置,用户只要单击超链接,

32、则可以打开M语言编辑器,并且自动定位到出现错误的代码。M语言编辑器既是M语言的文本编辑器,同时也是调试的可视化环境,在M语言编辑器下Debug菜单中的命令就能够完成程序调试的所有功能,默认情况下,大部分命令都是用来设置各种断点,只有设置了断点的应用程序才能够进行调试。,6.5.1 一般调试过程,6.5.1 一般调试过程,在MATLAB中,程序断点主要分为三类:n 标准断点。n 条件断点。n 错误断点。,6.5.1 一般调试过程,这些断点的设置都可以通过M语言编辑器下的Debug菜单中相应的菜单命令来创建,如下图所示。,6.5.1 一般调试过程,例 M文件调试代码stats_error.m001

33、 function totalsum,average=stats_error(input_vector)002%STATS_ERROR-Calculates cumulative total,6.5.1 一般调试过程,在MATLAB命令行窗体中尝试执行上面的函数:sum avg=stats_error(rand(1,50)?Undefined function or variable input_vector.Error in=stats_errorourmean at 12y=sum(input_vector)/m;Error in=stats_error at 4 average=ourm

34、ean(input_vector);,MATLAB首先提示程序运行有错误,并且指出错误发生的地点,单击Error in后面的超链接(具有下划线文字的),可以直接在M语言编辑器中打开相应的M代码文件,并且光标会停留在相应的代码行。,6.5.1 一般调试过程,这时,可以尝试几种不同的设置断点的方法,因为这里的示例代码在执行过程中出现了错误,可以设置错误断点,也可以直接在出现错误的代码行处设置标准断点。由于在前面的操作中,已经自动定位到了出现错误的代码行,故选择设置标准断点是比较好的选择。设置标准断点的方法如下:,6.5.1 一般调试过程,在M语言编辑器打开代码stats_error.m,将光标置于

35、代码的第12行,然后执行Debug菜单下的Set/Clear Breakpoint菜单命令。直接使用快捷键F12。用鼠标直接单击代码行左侧编辑器上的短横线通过M语言编辑器工具栏上的按钮来设置标准断点。此时将在出现错误的代码行(也就是代码的第12行)设置断点,设置断点处用红色的圆点标识,如图4-6所示。,6.5.1 一般调试过程,图4-6 设置断点,6.5.1 一般调试过程,设置好断点之后,再次在MATLAB命令行中运行函数,这次运行MATLAB不会报告代码运行错误,而是进入到调试状态:sum avg=stats_error(rand(1,50)12 y=sum(input_vector)/m;

36、K进入到调试状态后,MATLAB的命令行窗体中会显示当前断点的代码行,并且命令行窗体提示符变成“K”,表示当前MATLAB的状态为调试状态。,6.5.1 一般调试过程,此时,在M文件编辑器中第12行代码前有绿色的箭头,表示当前程序运行在此处中断,如图4-7所示。,图4-7 M语言编辑器的调试模式,6.5.1 一般调试过程,另外,部分按钮从编辑状态进入调试状态,如图4-8所示。,图4-8 调试程序的按钮,增加断点清除断点单步执行(Step)进入函数(Step in)跳出函数(Step out)运行(Run)退出调试模式,6.5.1 一般调试过程,通过M语言编辑器用户界面中的Stack下拉列表框可

37、以了解当前应用程序使用堆栈的状态,例如本例子中Stack下拉列表框包含ourmean,stats_error和Base,它们由下至上,分别为调用者和被调用者之间的关系,同时也显示了当前的工作空间。,6.5.1 一般调试过程,此时在MATLAB命令行窗体的“K”提示符下,可以任意键入MATLAB指令进行运算和处理,不过需要注意,此时执行指令的MATLAB工作空间就是当前Stack下拉列表框中选择的那个工作空间。例如,当Stack下拉列表框为ourmean时,在MATLAB命令行窗体下键入指令:K whos Name Size Bytes Class m 1x1 8 double array n

38、1x1 8 double array x 1x50 400 double array再来看看调用函数时,MATLAB命令行窗体显示的错误信息:?Undefined function or variable input_vector.,6.5.1 一般调试过程,可以看到,当前的工作空间下没有变量名input_vector,这也是该程序执行出错的原因,将程序中第12行的input_vector修改成为x就能得到正确的答案了。注意:如果需要修改代码,一定要退出调试模式。如果不退出调试模式而修改了代码,在保存代码时,MATLAB将提示用户,如下图所示。,6.5.1 一般调试过程,退出调试模式直接执行D

39、ebug菜单下的Exit Debug Mode菜单命令单击M语言编辑器上的按钮在调试模式的K提示符下键入指令dbquit清除设置好的断点先将光标设置在有断点的代码行,再执行Debug菜单下的Set/Clear Breakpoint命令单击M语言编辑器上的按钮通过Debug菜单下的Clear All Breakpoints in All Files,把当前编辑器的所有M文件中的断点清除执行clear all指令也可以清除断点,6.5.2 条件断点,所谓条件断点,就是当代码执行过程中,代码的某个条件满足时再进入到调试模式。这种条件断点对于调试那些循环结构代码时非常有效,因为循环体内的代码很有可能是

40、在循环的某个阶段才出现错误,也就是说,当循环变量达到某个数值时才出现错误。,6.5.2 条件断点,使用下面例子的代码演示设置条件断点的方法。(tjdd.m)001sum=0;002for i=1:1000003 sum=sum+i;004end005str=The result:,num2str(sum);006disp(str)条件断点其实可以设置在代码的任意行,只要能够满足相应的条件就会中断当前程序执行进入到调试模式,这里将断点设置在循环体内,也即是代码的003行。首先,把光标放置在需要设置断点的代码行,然后执行M语言编辑器中Debug菜单下的Set/Modify Condition Br

41、eakpoint菜单命令,此时将弹出断点设置对话框,如图4-10所示。,6.5.2 条件断点,图4-10 设置条件断点,在对话框中设置条件变量,当满足相应的条件就会中断当前程序执行进入到调试模式。在对话框中提示用户相应的条件将在执行该行代码之前被检测,如果满足,则立即进入到调试状态。,6.5.3 错误断点,所谓错误断点,就是在程序执行过程中,如果出现了错误或者警告信息,则自动中断当前程序执行,并且进入到调试模式下。由于这种断点是在程序执行出现错误的时候自动实现程序中断,并且进入调试模式,所以又叫做自动断点。设置错误断点,需要执行M语言编辑器中Debug菜单下的Stop if Errors/Wa

42、rnings命令,此时将弹出用于完成错误断点设置的对话框。在对话框中分别针对错误、Try-catch结构、警告以及Nan和Inf的情况进行设置。,6.5.3 错误断点,设置错误断点的对话框内容比较简单,例如针对错误情况设置断点的属性页,如图4-11所示。,图4-11 针对错误发生情况设置错误断点,6.5.3 错误断点,其中Use message identifiers选项允许针对特定的错误情况来设置错误断点,当选择这个选项之后单击Add按钮,并在弹出的对话框增加错误信息的标识,如图4-12所示。,图4-12 增加错误信息标识,6.5.3 错误断点,其中Use message identifie

43、rs选项允许针对特定的错误情况来设置错误断点,当选择这个选项之后单击Add按钮,并在弹出的对话框增加错误信息的标识,如图4-12所示。,图4-12 增加错误信息标识,MATLAB会为每一种错误信息定义一个错误标识,用户也可以针对自己的应用程序自定义错误标识。,6.5.3 错误断点,其中Use message identifiers选项允许针对特定的错误情况来设置错误断点,当选择这个选项之后单击Add按钮,并在弹出的对话框增加错误信息的标识,如图4-12所示。,图4-12 增加错误信息标识,MATLAB会为每一种错误信息定义一个错误标识,用户也可以针对自己的应用程序自定义错误标识。,错误断点一旦

44、设置,对整个MATLAB会话期间都会有效。,6.5.4 命令行调试,应用与调试M文件的指令,MATLAB编程基础(续),4.1 概述4.2 流程控制4.3 脚本文件4.4 函数文件4.5 M文件调试4.6 M文件性能分析4.7 小结,6.6 M文件性能分析,M文件性能分析器利用M文件性能分析器可以有效地帮助用户了解具体的哪一行或哪一段代码占用了最多的计算时间使用性能分析器的两种方法通过图形用户界面通过命令行,1、通过图形用户界面,打开M文件性能分析器的图形用户界面执行MATLAB的“Start”菜单中“MATLAB”子菜单下的“Profiler”命令,得到性能分析器的用户界面,通过图形用户界面

45、(续),在MATLAB命令行窗口中键入指令 profview 则同样可以打开M文件性能分析器的图形界面,通过图形用户界面(续),进行性能分析在“Run this code”下拉框中键入需要进行性能分析的MATLAB指令(array_vs_loops)指令等同于在MATLAB命令行窗口下键入的执行应用程序的指令,而不是简单地键入文件名称然后单击“Strat Profiling”按钮,则性能分析器通过运行指定的指令得出程序运行消耗的时间,并给出简要的总结,通过图形用户界面(续),单击总结报告中的“array_vs_loops”超链接,就能得到array_vs_loops文件运行的详细分析报告。在这

46、个超文本格式的报告中包含了如下内容:行代码消耗时间的排名:这里以表格的形式列出前一次代码运行过程中,最消耗系统时间的5行代码,如下图所示。,通过图形用户界面(续),覆盖度分析报告:考察当前代码的覆盖度,如下图所示。,通过图形用户界面(续),函数代码列表:列出每行代码具体消耗的时间,并且能够根据用户的需要按照代码执行时间、调用次数等重点显示内容。下图所示就是默认情况下查看每行代码消耗的时间。,通过图形用户界面(续),选择不同侧重点的列表框,如图4-19所示:,图4-19 性能信息的详细报告代码列表查看分类,通过图形用户界面(续),列表框的选项分别为:time:执行时间。numcalls:调用次数

47、。coverage:代码已经覆盖。noncoverage:代码未被覆盖。mlint:M-Lint Code分析结果。none:不显示任何信息。选择不同的选项,M文件性能分析器能够分别显示不同的代码信息。,2、通过命令行,主要用到的函数profile 函数使用方法:profile keywords使用的步骤首先在MATLAB命令行中键入指令 profile on关键字on的作用:打开性能分析器,并将前面的统计结果清除其次,运行需要分析的M文件 array_vs_loops最后,在MATLAB命令行中键入指令 profile report或 profile viewerprofile report指令执行后,MATLAB仍处于代码的性能分析状态profile viewer指令执行后就停止当前的性能分析状态,2、通过命令行,这时将打开M文件性能分析器,如图4-21所示。,图4-21 性能分析结果,通过命令行(续),profile函数的使用方法,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号