资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第一节,M,语言规则,一、基本规则概要,1,、变量和常量,字母开头,后跟字母数字或下划线;,大小写敏感。,2,、注释(,%,后),3,、语句的分隔:分号、续行符,4,、矩阵,标量、向量、数组(二维、三维、多维),5,、元素的访问,x(k,),、,a1(i,j),、,c(end,),、,xyz(i,:),、,y4z(:,j),二、运算,点运算有:,.*,./.,.,第二节,M,语言的流程控制,具体包括:,if,语句、,switch,语句,while,语句、,for,语句,break,语句,一、,if,语句,if,(,关系运算表达式,),MATLAB,语句,end,if,(,关系运算表达式,),MATLAB,语句,A,else,MATLAB,语句,B,end,if,(,关系运算表达式,a),MATLAB,语句,A,elseif,(,关系运算表达式,b),MATLAB,语句,B,else,(,关系运算表达式,c),MATLAB,语句,C,end,if,语句实例,clear all,I=1;,J=2;,if,I=J,A(I,J)=2;,elseif,abs(I,-J)=1,A(I,J)=1;,else,A(I,J)=0;,end,二、,switch,语句,switch,(,表达式,),case,常量表达式,a,:,MATLAB,语句,A,case,常量表达式,b,:,MATLAB,语句,B,case,常量表达式,m,:,MATLAB,语句,M,otherwise,:,MATLAB,语句,N,end,switch,语句实例,var,=,input(,Input,a Number:,);,switch,var,case,1,disp(,the,input is 1,),case,2,3,4,disp(,the,input is 2 or 3 or 4,),case,5,disp(,the,input is 5,),otherwise,disp(,something,else,),end,三、,while,语句,while,(,表达式,),MATLAB,语句,end,while,语句实例,例:使用,while,语句求解,i=1;,sum=0;,while,(i=1000),sum=,sum+i,;,i=i+1;,end,四、,for,语句,for,index=,start:step:end,MATLAB,语句,end,for,语句实例,例:使用,for,语句求解,sum=0;,for,i=1:1000,sum=,sum+i,;,end,五、其它流程控制命令,1,、,break,退出当前的循环结构运行,2,、,continue,用于结束本次,for,或,while,循环,与,break,命令不同的是,该命令只结束本次循环而继续下一次循环,3,、,input,提示用户从键盘输入数值、字符串和元胞数组,并接受该输入,如:,a=,input(input,a number)%,输入一个数值,b=,input(input,a,string,s,)%,输入一个字符串,break,语句实例,i=0;j=0;k=0;,for,i=1:2,for,j=1:2,for,k=1:2,if,(k=2),disp,(,退出循环,);,break,;,end,str,=,sprintf(,I,=%d,J=%d,K=%,d,i,j,k,);%,Write formatted data to string,disp(str,);,end,end,end,disp,(,程序运行结束,);,6,、错误捕捉语句(试探语句),try,语句段,1,catch,语句段,2,end,本语句结构先试探性的执行,try,和,catch,之间的语句,如果在此执行的过程中遇到了错误,则把错误信息赋值给,lasterr,变量,并放弃执行这段语句,转而执行,catch,和,end,之间的语句。,为程序员提供一种更为灵活的编程方法。,7,、常用的警示指令,(,1,),error(message,),显示出错信息,终止程序,(,2,),lasterr,显示,matlab,自动判断的最新出错原因并终止程序;,(,3,),warning(message,),显示警告信息,程序继续执行;,(,4,),lastwarn,显示,matlab,自动给出的最新警告程序继续运行,矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。,程序如下:,A=1,2,3;4,5,6;B=7,8,9;10,11,12;,try,C=A*B;,catch,C=A.*B;,end,C,lasterr,%,显示出错原因并退出,捕捉语句实例,第三节,M,文件,MATLAB,有两种工作方式,交互式的命令行工作方式:用于简单情形,M,文件的程序工作方式:用于复杂、重复多的情形,包括:,脚本文件(,没有输入参数,也不返回输出参数),函数文件(,可以输入参数,也可返回输出参数),M,文件的建立、编辑、保存和运行,建立:,File/new/M-file,或在命令窗口,edit,,可打开,M,文件窗口,编辑和保存:,M,文件窗口中完成,扩展名,.m,运行:,M,文件窗口中,debug/run,或,F5,即可,,完后即普通命令,一、脚,本文件,M,脚本文件(,script file,)特点:,是一串按用户意图排列成的,Matlab,指令集;,运行后所产生的变量都驻留在,Matlab,的基本工作空间。只要用户不使用,clear,指令加以清除,且,matlab,命令窗不关闭;,如果想运行脚本文件,只需在,Matlab,窗口下输入脚本文件名,按回车即可。,函数文件是另一种形式的,M,文件,每一个函数文件都定义一个函数。事实上,,MATLAB,提供的标准函数和命令大部分都是由函数文件定义的。,把一个比较大的任务分解为多个比较小的任务,它们之间通过调用实现参数传递。,1,、函数的定义,函数文件由,function,语句引导,其格式为:,out1,out2,=function(in1,in2,),2,、函数文件的规则,(,1,)函数名称和文件名必须相同;,(,2,)一个函数可以嵌套,也可以调用其它的函数,甚至调用自己(也就是递归调用)。,二、函数文件,3,、函数文件的一般结构,函数申明行(函数文件首行),H1,行,在线文件帮助区,版权区,函数体,紧随函数申明行之后,以,%,开头的第一注释行。根据,Matlab,自身文件的规则,该行包括:大写体的函数文件名和运用关键词简要描写函数的功能。,Matlab,的,lookfor,命令查询该行;,与,H1,行紧邻的以,%,开头的所有注释行,通常包括函数的功能、输入输出变量的含义、调用格式说明;,function r,p,rlo,rup=corrcoef(x,varargin);,以,%,开头;标记编写及修改该文件的作者和日期;版本记录,实现函数的功能,由一串,Matlab,指令组成(也可配置适当的空行和注释),4,、函数文件的几点说明,仅从运算的角度,函数申明行和函数体是必需的;,从结构上看,,M,脚本文件仅比,M,函数文件少一个“函数申明行”,其余部分的结构和作用都一样;,函数定义名和保存文件名应尽量一致。如不一样,,Matlab,将忽略函数申明的名字而以保存文件名为准;,函数命名的规则与变量命名规则同,须以字母开头,其后可以是字母、数字和下划线的组合;,建议编写,H1,行时,尽量采用英语,为以后的关键词检索方便。,5,、函,数的特点,函数文件犹如一个黑箱,从外界只能看到其输入输出,内部的处理藏而不见;,函数的输入输出变量的数量无限制,也可以没有输入和输出;,Matlab,允许使用比申明变量少的输入输出变量,实现对函数的调用;,函数运行时,,Matlab,为它开辟临时工作空间,所有变量均存放其中。执行完最后一条指令或者遇到,return,指令时,输出函数输出值,并清掉临时空间的所有中间变量;即函数空间相对基本空间而言是独立的、临时的。可以产生任意多个临时函数空间;,假如在函数文件中调用了一段脚本文件,那该脚本文件运行产生的所有变量都存放于该函数的临时空间内,而不是存放在基本空间。,注意函数文件的放置位置,一般自己的函数文件放在当前目录;如对一个专题有了足够多的函数,可以生成一个工具箱,放在一个固定的目录下,并在,MATLAB,中加入这个目录路径。,使用函数可以加快计算速度。,MATLAB,首次执行一个函数时,它将打开的文件编译为存储器内部形式,加速了执行速度。普通的,m,文件不被编译,在每次编译时,文件将逐行解释执行。,【,实例,】,利用函数的递归调用,求,n,!,function f=factor(n),if n=1,f=1;,else,f=factor(n-1)*n;,end,return;%,返回,程序运行结果是:,fac,=,Columns 1 through 6 1 2 6 24 120 720,Columns 7 through 10,504 40320 362880 3628800,在命令文件,main.m,中调用函数文件,factor.m,:,for i=1:10,fac(i,)=,factor(i,);,end,fac,三、参数传递,(一)参数传递有两种方式:,1,、形参与实参间的传递(形实结合),在,MATLAB,中,参数具有自己的专有工作空间。函数中的参数和命令行参数不在一个空间中,它们的唯一联系为函数的输入输出变量。输入参数在函数中是可读的,但任何改动不会传递回上一级空间。,2,、全局变量,使用,global,命令可以将变量说明为全局的,则在函数、命令行等都可以共享这些变量。,全局变量,定义语句,global A;,全局变量,A,允许不同的函数空间以及基本空间共享,但需要专门定义,否则被当为局部变量;允许在多个函数中对同名变量定义全局变量,所有的函数都可对其存取和修改。因此,定义全局变量是函数间传递信息的一种手段。,除非与全局变量关联的所有工作空间都被删除,否则全局变量依然存在;,对全局变量的定义必须在该变量被使用之前,并建议把全局变量的定义放在函数的首行位置。,为提高函数文件的可读性,建议用大写字符命名全局变量;,因全局变量损害了函数的封装特性,建议尽量不用。,【,例,】,全局变量应用示例,先建立函数文件,wadd.m,,该函数将输入的参数加权相加。,function f=,wadd(x,y,),%add two variable,global ALPHA BETA,f=ALPHA*,x+BETA,*y;,在命令窗口中输入:,global ALPHA BETA,ALPHA=1;,BETA=2;,s=wadd(1,2),输出为:,s=,5,注意:两个变量间为空格,(二)变量的检测和传递,1,、输入输出的检测,MATLAB,函数的输入输出数目都可以变化,通过这个特性,可以实现一些自定义的功能。,nargin,(Number of arguments input),:输入变量数;,nargout,:,输出变量数;,nargin(fun,):,获取指定函数的标称输入变量数;,nargout(fun,):,获取指定函数的标称输出变量数;,inputname(n,):,给出第,n,个输入变量的实际调用变量名。,函数调用中可以使用少于规定的输入输出参数数目,但是不能更多。,nargin,、,nargout,和,inputname,本身都是函数,而不是变量,用户不能使用赋值语句改变他们的值。,目的:与程序流程控制指令配合,对于不同数目的输入输出变量,函数可完成不同的任务;,【,例,】,nargin,用法示例,函数文,件,charray,.m,:,function fout=charray(a,b,c),if nargin=1,fout=a;,elseif nargin=2,fout=a+b;,elseif nargin=3,fout=(a*b*c)/2;,end,命令文件,exp,.m,:,x=1:3;y=1;2;3;,charray,(x),charray,(,x,y,),charray,(x,y,3),执行后的输出是:,ans,=,1 2 3,ans,=,2 4 6,ans,=,21,四、子,函数和私有函数,1,、子函数,Matlab,中允许,1,个文件中包含多个函数的代码;,第一个出现的函数成为主函数,其他函数为子函数;,保存时所用函数文件名应与主函数同名;,外部程序只能调用主函数。,2,、子函数的性质,每个子函数的第一行是申明行;,主函数的位置只能在最上面,但子函数的排列位置可以任意改变;,子函数只能被处于同一文件的主函数和其他子函数调用;,同一文件的主函数、子函数的工作空间都是彼此独立的。,Help,lookfor,等帮助指令都找不到子函数的任何帮助信息,3,、私,有函数,位于名为,private,子目录的函数,他只能被上一层目录的函数访问,对其他目录的函数是不可见的,私有函数可以和其他目录函数重名。,一般的,matlab,函数是全局可见的。,五、,M-file,其它,1,、,P,码文件(,pcode,),一个,M,文件被首次调用时,,Matlab,将首先对该,M,文件进行语法分析,并生成相应的内部伪代码(,psedocode,);,当再次调用该,M,文件时,直接调用内存中的,P,码文件,而不再进行语法分析;,Matlab,分析器总是把,M,文件及其调用的函数,M,文件一起变换成,P,码文件。,P,码文件运行速度快,采用二进制格式保存,程序保密性好。,2,、提高,Matlab,运行速度的措施,循环的向量化,A=0:0.1:2*pi;,sin(A,),尽可能采用,Matlab,提供的函数指令,循环内大数组预先定义,尽量采用,M,函数文件替代,M,脚本文件,尽量使用,saveload,读写数据,减少低级文件格式的使用,再见,
展开阅读全文