Matlab实训6-程序设计.ppt
《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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 实训 程序设计

链接地址:https://www.31ppt.com/p-6511880.html