第四章 Matlab编程基础a.ppt

上传人:qwe****56 文档编号:70015262 上传时间:2023-01-14 格式:PPT 页数:96 大小:1.01MB
返回 下载 相关 举报
第四章 Matlab编程基础a.ppt_第1页
第1页 / 共96页
第四章 Matlab编程基础a.ppt_第2页
第2页 / 共96页
点击查看更多>>
资源描述

《第四章 Matlab编程基础a.ppt》由会员分享,可在线阅读,更多相关《第四章 Matlab编程基础a.ppt(96页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第四章第四章 MATLABMATLAB编程基础编程基础本章详细讲解利用M语言进行编程的方法讲述的主要内容:流程控制脚本文件函数文件子函数私有函数M文件的调试MATLABMATLAB编程基础(续)编程基础(续)4.1 概述4.2 流程控制4.3 脚本文件4.4 函数文件4.5 M文件调试4.6 M文件性能分析4.7 小结4.1 4.1 概述概述nMATLAB的工作模式指令驱动模式通常MATLAB以指令驱动模式工作,即在MATLABM命令行窗口下用户输入单行指令时,MATLAB立即处理这条指令,并显示结果,这就是MATLAB命令行方式。命令行方式程序可读性差,而且不能存储,当处理复杂问题和大量数据

2、时很不方便。M文件模式将MATLAB语句构成的程序存储成以m为扩展名的文件,然后再执行该程序文件,这种工作模式称为程序文件模式。程序文件不能在指令窗口下建立,因为指令窗口只允许一次执行一行上的一个或几个语句。概述(续)概述(续)MATLAB通过M语言来实现完整的编写应用程序的能力 M语言 M语言是一种解释性语言,利用该语言编写的代码 仅能被MATLAB接受,被MATLAB解释、执行。M语言文件可以分为脚本文件和函数文件 一个M语言文件就是由若干MATLAB的命令组合在一 起构成的。M语言文件是标准的纯文本格式的文件,其文件扩 展名为.m。使用M文件可以将一组MATLAB命令组合起来,通过 一个

3、简单的指令就可以执行这些命令。概述(续)概述(续)MATLAB提供了meditor编辑器编辑M文件 在MATLAB命令行窗口中键入指令edit,则可启动 meditor编辑器 edit概述(续)概述(续)通过“File”菜单中的“New”子菜单下的“M-file”命令来启 动meditor编辑器 直接单击MATLAB用户界面工具栏上的新建按钮 来启动meditor编辑器概述(续)概述(续)M文件有两类独立的M文件 脚本(Scripts)可调用M文件 函数(Functions)MATLABMATLAB编程基础(续)编程基础(续)4.1 概述4.2 流程控制4.3 脚本文件4.4 函数文件4.5

4、M文件调试4.6 M文件性能分析4.7 小结4.4.2 2 流程控制流程控制程序流程控制包含控制程序的基本结构和语法 结构化的程序主要有三种基本的程序结构顺序结构 指所有组成程序源代码的语句按照由上至下的次序依次执行,直到程序的最后一个语句。选择结构 依照不同的判断条件进行判断,然后根据判断的结果选择某一种方法来解决某一个问题。循环结构 就是在程序中某一条语句或多条语句重复多次的运行。MATLAB语言的程序结构与其它高级语言是一致的,分为顺序结构、选择结构、循环结构流程控制(续)流程控制(续)4.2.1 选择结构4.2.2 循环结构4.2.3 break语句和continue语句4.2.4 提

5、高运算性能4.2.1 4.2.1 选择结构选择结构当判断某一条件是否满足,根据判断的结果来选择不同的解决方法时,就需要使用选择结构MATLAB的条件判断可以使用if语句或者switch语句4.2.1 4.2.1 选择结构选择结构4.2.1.1 if语句if语句的三种基本语法结构if(关系运算表达式)MATLAB语句 endif(关系运算表达式)MATLAB语句A else MATLAB语句B endif(关系运算表达式a)MATLAB语句A elseif(关系运算表达式b)MATLAB语句B else(关系运算表达式c)endif-elseif-else的语句结构可以嵌套使用 if(关系运算表

6、达式a)if(关系运算表达式b)MATLAB语句A else MATLAB语句B end else if(关系运算表达式c)MATLAB语句C else MATLAB语句D end end选择结构(续)选择结构(续)4.2.1.2 switch语句switch语句用于处理多分支的选择switch(表达式)case 常量表达式a:MATLAB语句A case 常量表达式b:MATLAB语句B case 常量表达式m:MATLAB语句M otherwise:MATLAB语句N end在MATLAB的switch语句中,程序仅仅执行符合条件的case分支如果需要对多个条件使用同一个case分支时,则

7、需要使用元胞数组与之配合4.2.2 4.2.2 循环结构循环结构在MATLAB中,包含两种循环结构循环次数不确定的while循环循环次数确定的for循环循环结构(续)循环结构(续)1、while循环结构while语句可以实现“当”型的循环结构格式 while(表达式)MATLAB语句 end特点是先判断循环条件,当循环条件成立,即表达式运算结果为“真”,再执行循环体在循环过程中一定要有能够改变关系表达式或者布尔类型变量的值循环结构(续)循环结构(续)2、for循环结构使用for语句循环需要预先知道循环体执行的次数格式 for index=start:increment:end MATLAB语句

8、 endindex的取值取决于start和end的值在for循环语句中,不仅可以使用行向量进行循环迭代的处理,也可以使用矩阵作为循环次数的控制变量循环的索引值将直接使用矩阵的每一列,循环的次数为矩阵的列数4.2.3 4.2.3 breakbreak语句和语句和continuecontinue语句语句break语句和continue语句的基本功能当break语句使用在循环体中的时候,其作用是能够在执行循环体的时候强迫终止循环,即控制程序的流程,使其提前退出循环使用方法:break;continue语句出现在循环体中的时候,其作用是能够中断本次的循环体运行,将程序的流程跳转到判断循环条件的语句处,

9、继续下一次的循环使用方法:continue;4.2.4 4.2.4 提高运算性能提高运算性能M语言和其他的高级语言不同,由于采用了解释型语言,其执行效率低于编译性语言提高运算性能向量化运算预分配存储空间MATLAB加速器提高运算性能(续)提高运算性能(续)1、向量化运算向量化运算不要使用循环结构操作矩阵的元素,应直接使用矩阵元素的索引或者矩阵运算的函数,即尽量将使用while循环或者for循环的语句结构转换成等价的向量或者矩阵运算提高运算性能(续)提高运算性能(续)2、预分配存储空间进行内存变量存储空间的预分配内存预分配函数数据类型函数例子数值数组zerosY=zeros(1,10000)元胞

10、数组cellY=cell(2,3)Y1,3=zeros(1:10000)Y2,3=string结构数组struct、repmatY=repmat(struct(field,value),2,3)提高运算性能(续)提高运算性能(续)例4-11disp(char(10),使用内存预分配:)pre_allo=zeros(10000,1);ticfor I=1:10000 pre_allo(I)=rand(1);endtocdisp(char(10),不使用内存预分配:)ticfor J=1:10000 not_pre_allo(J)=rand(1);endtoc提高运算性能(续)提高运算性能(续)使

11、用内存预分配MATLAB自动分配10000个连续的内存空间用于存储数据,MATLAB将一次创建足够的存储空间,然后依次赋值不使用内存预分配当I=1时,MATLAB将使用一块长度为一个单元大小的内存保存第一个随机数当I=2时,MATLAB将寻找一块两单元大小的内存区,一个单元保存第一个随机数,第二个单元存放另一个随机数 当I=10000时,MATLAB寻找一块容纳10000单元的内存存放以前的9999个随机数,同时把最新的一个随机数加入进去提高运算性能(续)提高运算性能(续)3、MATLAB加速器MATLAB性能加速器能够明显改善循环结构、内建函数调用等方面的运行效率。有些M语言元素不能被MAT

12、LAB性能加速器加速MATLABMATLAB编程基础(续)编程基础(续)4.1 概述4.2 流程控制4.3 脚本文件4.4 函数文件4.5 M文件调试4.6 M文件性能分析4.7 小结4.4.3 3 M M脚本文件脚本文件n包含MATLAB语言代码的文件称为 M文件,其扩展名为.m。n脚本文件就是由一系列的MATLAB指令和命令组成的纯文本格式的M文件。n脚本文件没有输入参数,也没有输出参数。n执行脚本文件时,文件中的指令或者命令按照出现在脚本文件中的顺序依次执行。M M脚本文件(续)脚本文件(续)脚本文件示例%注释行%M文件示例%“flower petal”%以下为代码行%计算theta=-

13、pi:0.01:pi;rho(1,:)=2*sin(5*theta).2;rho(2,:)=cos(10*theta).3;rho(3,:)=sin(theta).2;rho(4,:)=5*cos(3.5*theta).3;for k=1:4%图形输出 subplot(2,2,k)polar(theta,rho(k,:)enddisp(程序运行结束!)在脚本文件中,主要由注释行 和代码行组成 M文件的注释行需要使用%定义符注释定义符仅能影响一行代码 M文件的代码行是一些简 单的MATLAB指令或命令 命令可以完成相应的计算处理数据、绘制图形结果的操作 可以在脚本文件中调用其他的函数完成复杂的数

14、学运算M M脚本文件(续)脚本文件(续)在MATLAB命令行中运行该脚本文件:script_examp程序运行结束!MATLAB会出现相应的图形窗体MATLABMATLAB编程基础(续)编程基础(续)4.1 概述4.2 流程控制4.3 脚本文件4.4 函数文件4.5 M文件调试4.6 M文件性能分析4.7 小结4.4 4.4 函数文件函数文件M语言函数文件能够接受用户的输入参数,进行计算,并将计算结果作为函数的返回值返回给调用者在MATLAB中具有不同类型的函数文件内建函数文件系统M函数文件系统MEX函数文件用户自定义MEX函数文件用户自定义的M函数文件函数文件(续)函数文件(续)MATLAB

15、的内建函数文件MATLAB自定义的函数文件称内置函数文件。调用内置函数的方法:使用函数名并给出相应的入口、出口参数即可。例如:sin.m函数 调用格式:y=sin(2*x)指令驱动模式 例:x=0:2*pi/180:2*pi;y=sin(2*x);plot(x,y)M文件模式假设存储的文件名为nzhswj.m nzhswj用户自定义的M函数文件是由用户自己利用M语言编写的文件系统M函数文件是由MATLAB提供的M语言函数文件函数文件(续)函数文件(续)本节介绍4.4.1 基本结构4.4.2 输入输出参数4.4.3 子函数和私有函数4.4.4 局部变量和全局变量4.4.5 函数执行规则函数文件(

16、续)函数文件(续)M语言函数文件具有下面的不同部分函数定义行在线帮助注释行M语言代码4.4.1 4.4.1 基本结构基本结构函数m文件的格式:function 返回变量=函数名(输入变量)注释说明语句段 程序语句段特定规则:1)函数m文件第一行必须以单词function作为引导词,必须遵循如下形式:function=()2)程序中的变量均为局部变量,不保存在工作空间中,其变量只在函数运行期间有效。基本结构(续)基本结构(续)001 function y=average(x)002%AVERAGE 求向量元素的均值003%语法:004%Y=average(X)005%其中,X是向量,Y为计算得到

17、向量元素的均值006%若输入参数为非向量则出错007008%代码行009 m,n=size(x)010%判断输入参数是否为向量011 if(m=1)|(n=1)|(m=1&n=1)012%若输入参数不是向量,则出错013 error(Input must be a vector)014 end015%计算向量元素的均值016 y=sum(x)/length(x)基本结构(续)基本结构(续)函数定义行001 function y=average(x)包括关键字function 函数输出参数y 函数名称average 函数输入参数x函数名称定义要求必须以字符开头,后面可以用字符、数字和下划线的组合

18、构成函数名称MATLAB对函数名称的长度有限定函数的M文件名称最好和函数名称保持一致,若不一致,则调用函数时需要使用文件名称而非函数名称基本结构(续)基本结构(续)在线帮助M函数文件的在线帮助为紧随在函数定义行的注释行002%AVERAGE 求向量元素的均值003%语法:004%Y=average(X)005%其中,X是向量,Y为计算得到向量元素的均值006%若输入参数为非向量则出错基本结构(续)基本结构(续)若在MATLAB命令行窗口中键入指令help average 则 help average AVERAGE 求向量元素的均值 语法:Y=average(X)其中,X是向量,Y为计算得到向

19、量元素的均值 若输入参数为非向量则出错基本结构(续)基本结构(续)若在MATLAB命令行窗口中键入指令lookfor average 则 lookfor average AVERAGE 求向量元素的均值MEAN Average or mean value.MOVAVG Leading and lagging moving averages chart.MBSWAL Weighted Average Life of mortgage pool.由于H1帮助行的特殊作用,所以在用户自己定义M函数文件时,一定要编写相应的H1帮助行,对函数进行简明、扼要的说明或解释基本结构(续)基本结构(续)注释行0

20、08%代码行010%判断输入参数是否为向量012%若输入参数不是向量,则出错015%计算向量元素的均值注释行不会显示在在线帮助中,主要原因是这些注释行没有紧随在H1帮助行的后面基本结构(续)基本结构(续)M语言代码008%代码行009 m,n=size(x)010%判断输入参数是否为向量011 if(m=1)|(n=1)|(m=1&n=1)012%若输入参数不是向量,则出错013 error(Input must be a vector)014 end015%计算向量元素的均值016 y=sum(x)/length(x)代码行需要完成具体的算法,实现用户的具体功能基本结构(续)基本结构(续)M

21、ATLAB在定义输入输出参数时不需要指出变量的类型,而是将参数默认为双精度型MATLAB在定义参数时,没有确定输入参数的维数或者尺寸M语言的函数文件不仅可以有一个输入参数和一个返回值,还可以为M语言函数文件定义多个输入参数和多个输出参数4.4.2 4.4.2 输入输出参数输入输出参数例4-15 多个输入输出参数的M函数functionavg,stdev,r=ourstats(x,tol)%OURSTATS多输入输出参数示例%该函数计算处理矩阵,得到相应的均值、标准差和矩阵的秩m,n=size(x);if m=1 m=n;end%Averageavg=sum(x)/m;%Sandad devia

22、tionstdev=sqrt(sum(x.2)/m-avg.2);%Ranks=svd(x);r=sum(stol);输入输出参数(续)输入输出参数(续)运行例4-15 A=1 2 3;4 5 6A=1 2 3 4 5 6 a,s,r=ourstats(A,0.1)a=2.5000 3.5000 4.5000s=1.5000 1.5000 1.5000r=2 a,s=ourstats(A,0.1)a=2.5000 3.5000 4.5000s=1.5000 1.5000 1.5000输入输出参数(续)输入输出参数(续)a=ourstats(A,0.1)a=2.5000 3.5000 4.500

23、0 调用该函数时,将输出参数依次写在一个向量中,若输出参数的个数与函数定义的输出参数个数不一致时,将计算得到的前几个输出参数作为返回值,若输出参数的个数等于指定的输出参数个数时,计算结果依次赋值给不同的变量。例4-16 nargout和nargin示例function c=testarg(a,b)%TESTARG检测输入输出参数个数%该函数根据不同的输入输出参数个数进行相应的操作if(nargout=1)disp(使用该函数必须指定一个输出参数!);returnendswitch nargin case 0 disp(使用该函数必须指定一个输入参数!);c=;return case 1 c=a

24、.2;case 2 c=a+b;end输入输出参数(续)输入输出参数(续)函数nargin用来获取函数的输入参数个数函数nargout用来获取输出函数个数运行例4-16 A=1 2 3;B=2 3 5;testarg(A,B)使用该函数必须指定一个输出参数!C=testarg使用该函数必须指定一个输入参数!C=C=testarg(A)C=1 4 9 D=testarg(A,B)D=3 5 8 E=testarg(A,B,C)?Error using=testargToo many input arguments.输入输出参数(续)输入输出参数(续)MATLAB的M函数文件还可以具有个数不确定的

25、输入、输出参数在定义M函数文件时,不指明输入、输出参数的个数,而是在程序中通过编写程序完成具体参数的确定完成该功能主要依靠varargin和varargout函数当函数的定义具有以下形式时 function y=function_name(varargin)函数function_name可以接受任意个数的输入参数 使用varargin函数接受M函数参数时,将用户输入的所有参数构建成为一个元胞数组,该元胞数组中的元素为用户输入的参数当函数的定义具有以下形式时 function varargout=function_name(n)函数function_name可以输出任意个数的输出参数 使用var

26、argout函数输出M函数参数时,需要将所有必要的输出参数传递给元胞数组,在传递参数时,还需要注意参数的顺序输入输出参数(续)输入输出参数(续)例4-17 不确定的输入参数个数function y=varargin_example(varargin)%VARARGIN_EXAMPLE不确定输入参数例子str=sprintf(输入参数的个数:=%d,length(varargin);disp(str);y=0;%varargin的类型class(varargin)for i=1:length(varargin)%varargin为元胞数组 if(isnumeric(varargini)%将每个为

27、数值数组的输入参数的第一个元素累加求和 y=y+varargini(1);endend输入输出参数(续)输入输出参数(续)运行例4-17 不确定的输入参数个数 varargin_example输入参数的个数:=0ans=cellans=0 varargin_example(a,1 2 3,3,rand(2,5)输入参数的个数:=4ans=cellans=4.6154输入输出参数(续)输入输出参数(续)class(varargin)class(varargin)例4-18 不确定的输出参数个数function varargout=varargout_example(varargin)%VARAR

28、GOUT_EXAMPLE不确定个数的输出参数%判断输出参数的个数%下面注释行中的代码执行有错误%str=sprintf(输出参数的个数:=%d,length(varargout);%必须使用nargoutstr=sprintf(输出参数的个数:=%d,nargout);disp(str);if(nargout a b=varargout_example(1,2,3,4)输出参数的个数:=2a=4b=3输入输出参数(续)输入输出参数(续)if(nargout a b=varargout_example(3,4,5,9)输出参数的个数:=2a=9b=5输入输出参数(续)输入输出参数(续)if(na

29、rgout x=1:11;mean,mid=newstats(x)mean=6mid=6 x=1:10;a,b=newstats(x)a=5.5000b=5.5000子函数和私有函数(续)子函数和私有函数(续)私有函数私有函数被放置在名称为private的子目录中,仅能被那些位于private子目录的上一层目录中的函数调用假设MATLAB的搜索路径中包含路径ProjectA,那么所有位于ProjectAprivate路径下的函数,只能被在其上一层路径ProjectA中的函数文件调用不同父路径下的私有函数可以使用相同的函数名MATLAB搜索函数时优先搜索私有函数如果同时存在私有函数名func1.

30、m和非私有函数名func1.m,则私有函数func1.m被优先执行创建私有函数的方法将需要设置为私有的函数拷贝到一个private子目录中子函数和私有函数(续)子函数和私有函数(续)例4-21 私有函数示例function x=pmean(v,n)%MEAN私有函数例子%将该函数文件保存在private子目录中,则该函数仅能被在上层目录中的函数文件调用disp(私有函数 pmean);x=sum(v)/n;子函数和私有函数(续)子函数和私有函数(续)子函数和私有函数(续)子函数和私有函数(续)子函数和私有函数(续)子函数和私有函数(续)例4-21 调用私有函数的函数文件(newstats.m)

31、functionavg,med=newstats(u)%主函数%NEWSTATS计算均值和中间值n=length(u);avg=mean(u,n);%调用子函数avg1=pmean(u,n);%调用私有函数med=median(u,n);%调用子函数function a=mean(v,n)%子函数%计算平均值disp(子函数 mean);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子函数和私有函数(续)子函数和私有函数(续)

32、运行例4-21 调用私有函数的函数文件(newstats.m)x=1:10;a b=newstats(x)子函数 mean私有函数 pmeana=5.5000b=5.5000子函数和私有函数(续)子函数和私有函数(续)私有函数和子函数比较子函数和私有函数(续)子函数和私有函数(续)函数类型子函数私有函数作用范围 同一个M函数文件在上层路径中的函数文件内结构保存在同一个M语言函数文件中,在M语言文件可以不包含任何子函数保存在子目录private下局部变量:在M函数内部声明并使用的变量只在本函数范围内有效仅能在函数调用执行期间被使用,一旦函数结束运行,则变量占用的内存空间自动释放,变量的数值也不存

33、在了例4-22 局部变量的例子function local%LOCAL察看局部变量的例子x=rand(2,2);y=zeros(2,2);z=函数中的变量;u=x,y,z;disp(z)whos4.4.4 4.4.4 局部变量和全局变量局部变量和全局变量运行例4-22 局部变量的例子 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 using 332 byt

34、es 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关键字创建全局变量时有三种情况若声明为全局的变量在当前空间和全局空间都不存在,则创建一个新的变量,然后为这

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

36、sing 0 bytes%给全局变量赋值 myx=10myx=10%察看全局变量的信息 whos Name Size Bytes Class myx 1x1 8 double array(global)Grand total is 1 element using 8 bytes局部变量和全局变量(续)局部变量和全局变量(续)%清除变量 clear myx myx?Undefined function or variable myx.%察看信息 whos whos global Name Size Bytes Class myx 1x1 8 double array(global)Grand t

37、otal is 1 element using 8 bytes局部变量和全局变量(续)局部变量和全局变量(续)%在局部工作空间再次创建变量 myx=23myx=23%察看变量的信息 whosName Size Bytes Classmyx 1x1 8 double arrayGrand total is 1 element using 8 bytes whos globalName Size Bytes Classmyx 1x1 8 double array(global)Grand total is 1 element using 8 bytes局部变量和全局变量(续)局部变量和全局变量(续

38、)%将其修改为全局变量 global myxWarning: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.%察看变量的数值 myxmyx=10局部变量和全局变量(续)局部变量和全局变量(续)将局部变量转变为全局变量的过程中原来的局部变量的数值丢失了%清除当前的工作空间 clear w

39、hos whos globalName Size Bytes Classmyx 1x1 8 double array(global)Grand total is 1 element using 8 bytes%清除所有的工作空间 clear all whos whos global 局部变量和全局变量(续)局部变量和全局变量(续)保留变量这类变量在MATLAB中被声明为persistent这类变量在函数退出时不被释放,当函数再一次被调用时,变量保留上次退出时的值保留变量的特征变量仅能在声明变量的函数内使用,其他函数不能直接使用保留变量函数执行退出后,MATLAB不清除保留变量占用的内存当函数被

40、清除或者重新编辑后,保留的变量被清除局部变量和全局变量(续)局部变量和全局变量(续)例4-24:function y=persistent_example(x)%PERSISTENT_EXAMPLE 保留变量使用示例 for i=1:x y=myfun;end function y=myfun%子函数%persistent关键字的使用 persistent count;%count记录函数调用的次数 if(isempty(count)count=1;else count=count+1;end str=sprintf(第%d次调用该函数,count);disp(str);y=count;局部变

41、量和全局变量(续)局部变量和全局变量(续)运行例4-24:persistent_example(1)第1次调用该函数ans=1 persistent_example(3)第2次调用该函数第3次调用该函数第4次调用该函数ans=4局部变量和全局变量(续)局部变量和全局变量(续)在MATLAB命令行中键入指令:clear all则所有的变量都会被清除 persistent_example(3)第1次调用该函数第2次调用该函数第3次调用该函数ans=3当用户在MATLAB命令行窗口键入一条命令或者执行M语言文件中包含的一条语句或者指令时,MATLAB解释器就负责解析用户的输入,并且给出相应的答案MA

42、TLAB解释器解析命令按照一定的优先级进行首先判断输入的命令是否为变量若不是内存中的变量,判断输入的命令是否为MATLAB的内建函数若不是内建函数,则判断输入的命令是否为子函数若不是子函数,则判断输入的命令是否为私有函数若不是私有函数,则判断输入的命令是否为MATLAB搜索路径中所包含的某个文件或函数若在同一个路径下发现同名的三种类型的文件MEX文件、P代码文件和M代码文件,则优先执行MEX文件,其次是P代码文件,最后执行的是M语言文件4.4.5 4.4.5 函数执行规则函数执行规则例4-25 MATLAB命令解析的优先级 sin=This is a string!sin=This is a

43、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命令获取相应的信息MATLABMATLAB编程基础(续)编程基础(续)4.1 概述4.2 流程控制4.3 脚本文件4.4 函数文件4.5 M文件调试4.6 M文件性能分析4.7 小结4.5 4.5 M M文件调试文件调试M文件的调试可以在文件编辑器中进行M语言的文件编辑器不仅仅是一个文件编辑

44、器,还是一个可视化的调试开发环境可以在命令行中结合具体的命令进行M M文件调试(续)文件调试(续)应用程序的错误语法错误包括词法或者文法的错误运行时的错误指程序运行过程中得到的结果不是用户需要的结果程序的调试是在程序无法得到正确结果时进行程序修正的唯一手段M文件是一种解释型语言,只有在运行过程中才能发现应用程序的错误M M文件调试(续)文件调试(续)M语言文件编辑器提供Breakpoints菜单进行程序调试M M文件调试(续)文件调试(续)Breakpoints菜单中的命令用来设置各种断点,只有设置了断点的应用程序才能进行调试提供的自动断点Stop if ErrorStop if Warnin

45、gStop if NaN or InfStop if All Errors自动断点可以在程序中设置,当程序运行过程中发生了错误或警告,则程序运行中断,进如调试状态M M文件调试(续)文件调试(续)例4-26 M文件调试代码stats_error.m001 function totalsum,average=stats_error(input_vector)002%STATS_ERROR-Calculates cumulative total&average003 totalsum=sum(input_vector);004 average=ourmean(input_vector);00500

46、6 function y=ourmean(x)007%OUTMEAN-Calculates average008 m,n=size(x);009 if m=1010 m=n;011 end012 y=sum(input_vector)/m;M M文件调试(续)文件调试(续)进行调试在MATLAB环境中启动M文件编辑器,然后选择M文件编辑器中“Breakpoints”菜单下的“Stop if Error”命令注意:此时不一定要将stats_error.m文件打开M M文件调试(续)文件调试(续)1.在MATLAB命令行窗口中键入指令 sum avg=stats_error(rand(1,50)?

47、Undefined function or variable input_vector.Error in=D:MATLAB讲义stats_error.m(ourmean)On line 12 =y=sum(input_vector)/m;K MATLAB命令行窗口处于调试状态,其命令行提示符为“K”,在该命令行提示符中可以键入MATLAB指令进行运算和处理。M M文件调试(续)文件调试(续)K whosName Size Bytes Class m 1x1 8 double array n 1x1 8 double array x 1x50 400 double arrayGrand tota

48、l is 52 elements using 416 bytesK 如果要退出调试状态,则输入指令KdbquitM M文件调试(续)文件调试(续)应用与调试M文件的指令指令说明dbclear清除已经设置好的断点dbcont继续执行,等同于工具栏中的 按钮dbdown/dbup修改当前工作空间的上、下文关系dbquit退出调试状态dbstack显示当前堆栈的状态dbstatus显示所有的已经设置的断点dbstep执行应用程序的一行或者多行代码dbstop设置断点dbtype显示M文件代码和相应的行号MATLABMATLAB编程基础(续)编程基础(续)4.1 概述4.2 流程控制4.3 脚本文件4

49、.4 函数文件4.5 M文件调试4.6 M文件性能分析4.7 小结4.6 4.6 M M文件性能分析文件性能分析M文件性能分析器利用M文件性能分析器可以有效地帮助用户了解具体的哪一行或哪一段代码占用了最多的计算时间使用性能分析器的两种方法通过命令行通过图形用户界面1 1、通过图形用户界面通过图形用户界面打开M文件性能分析器的图形用户界面执行MATLAB的“Start”菜单中“MATLAB”子菜单下的“Profiler”命令,得到性能分析器的用户界面通过图形用户界面(续)通过图形用户界面(续)在MATLAB命令行窗口中键入指令 profview 则同样可以打开M文件性能分析器的图形界面通过图形用

50、户界面(续)通过图形用户界面(续)进行性能分析在“Run this code”下拉框中键入需要进行性能分析的MATLAB指令(array_vs_loops)指令等同于在MATLAB命令行窗口下键入的执行应用程序的指令,而不是简单地键入文件名称然后单击“Strat Profiling”按钮,则性能分析器通过运行指定的指令得出程序运行消耗的时间,并给出简要的总结2 2、通过命令行通过命令行主要用到的函数profile 函数使用方法:profile keywords使用的步骤首先在MATLAB命令行中键入指令 profile on关键字on的作用:打开性能分析器,并将前面的统计结果清除其次,运行需要

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com