资源描述
,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第二讲,M,文件及函数的编写,1,MATLAB,语言特点:,高度简洁,封装化,一种解释型的编程语言,“读一句,执行一句”,效率不高,特别在遇到循环语句时,程序运行时离不开,MATLAB,环境,M,文件及函数的编写,2,M,文件其实是一个像命令集一样的,ASCII(,纯文本,),码文件。正是,M,文件的这个特点造就了,MATLAB,强大的可开发性和可扩展性。,M,文件的两种形式,命令式,(M_Script),函数式,(Function),。,命令式文件就是命令行的简单叠加,,MATLAB,会,自动按顺序执行文件中的命令。,函数式文件主要用以解决参数传递和函数调用的,问题。,M,文件及函数的编写,3,1.M-script,文件的编写,新建,M,文件,编写指令,调试运行,一般过程,用户在编制此类文件时,只需把所要执行的命令,按行编辑到指定的文件中,程序运行时,,MATLAB,按行执行这些指令。,M,文件及函数的编写,4,几点规则:,建立好的书写风格,保持程序的可读性。,m,为文件的扩展名,在低版本的,MATLAB,中,还要注意文件名不超过,8,位,文件名和变量的命,名规则相同。,以符号引导的行是注释行、不可执行,,可供,heIp,命令查询;,不需要用,end,语句作为,M,文件的结束标志;,M,文件及函数的编写,5,在运行此函数之前,需要把它所在目录加到,MATLAB,的搜索路径上去或将文件所在目录设为当前日录。新版本会提示,老版本则出错。,运行一个程序,有多种方式。,M,文件及函数的编写,6,MATLAB,控制流,for v,=,expression(,表达式,),commands,(,执行语勾,),end,for,循环语句的一 般格式如下:,(,1,),for,循环结构,循环变量,一般为数组,循环体,成对出现,M,文件及函数的编写,7,While expression,(条件式),statements,End,(,2,),while,循环结构,成对出现,M,文件及函数的编写,8,【,例,1】,用循环求解,s=0;,for i=1:100,s=s+i;,end,s=0;i=1;,while i=100,s=s+i;,i=i+1;,end,不用循环的方法:,M,文件及函数的编写,s=sum(1:100),9,【,例,2】,用循环求解求最小的,m,在这种情况下,最好用,while.,s=0;i=0;,while s A=;,for k=1:5,for j=1:5,if k=j,A(k,k)=5;,elseif abs(k-j)=1,A(k,j)=1;,else,A(k,j)=0;,end,end,end,M,文件及函数的编写,12,Switch expression,case case_1,(commands 1),case case_2,(commands 2),case case_k,(commands k),otherwise,(commands),end,(,4,)分支语句,switch-case-otherwise,注意 在执行过程中,只执行一个,case,后面的命令并跳出开关,,程序在,end,后继续执行。,M,文件及函数的编写,13,【,例,4】,检测掷一次骰子所得的点数是单数还是双数:,switch result,case1,3,5,disp(odd numbers),case2,4,6,disp(even numbers),otherwise,disp(mistake!),end,.(,前面可能有一些语句),M,文件及函数的编写,14,分支语句和,C,语言的区别:,case,语句中条件不能重复,否则列在后面的条件将不能执行,当开关表达式的值等于某表达式,执行该语句,后结束该结构,不用,break,otherwise,语句,不是,default,程序的执行结果和各个,case,顺序无关,M,文件及函数的编写,15,(,5,),try-catch,结构,try,(,commands1,),catch,(,commands2,),end,该命令总被执行,若正确,则跳出此结构,仅当组命令,1,出现执行错误,才执行该命令。,M,文件及函数的编写,16,3.,交互式输入,(1),用户输入提示命令,input,input,命令用来接收用户从键盘输入数据、字符串或表达式,并接收输入值。其常用格式:,运行此命今后,将给出文字提示,并等待键盘输入。,R,input(what is your name?,s),运行此命令后,,MATLAB,将等待输入,并把输入,当做字符串,赋给变量,R,。,R,input(How many apples),M,文件及函数的编写,17,Pause,暂停程序等待回应;,Pause(n),程序运行中等待,n,秒后继续运行;,Pause on,显示其后的,Pause,命令,并且执行,pause,命令;,Pause off,显示其后的,pause,命令,但不执行该命令。,(,2,)等待用户反应命令,pause,此命令用于使程序暂时终止运行,等待用户按任,意键后继续运行。,此函数的调用形式如下:,M,文件及函数的编写,18,(,3,)中断命令,break,break,语句常常用在循环语句中。通过使用,break,语句,可不必等待循环的自然结束,而根据循环只设的条件来判断是否跳出循环。,testinput.m,(,4,)等待键盘输入,keyboard,使程序进入暂时等待状态,但并没退出执行,可以修改参数,和运行其他指令等。,(,5,)显示文字或数组,disp,M,文件及函数的编写,19,4.,MATLAB,函数的编写,【,例,5】,若最大值不为,10000,,需修改程序对,m,和,10000,值的设置,不适合于,M-script.,函数是,MATLAB,编程的主流方法,除了函数外,还可以采用,M-script,文件,M-script,适合于小规模,M,文件及函数的编写,20,(1)MATLAB,语言的函数的基本结构,若一个,function,作为一个,M,文件存储,切记其存储文件名应和函数名一样!,(,1,)函数定义行(关键字,function,),function,out1,out2,.=funcname(in1,in2,.),注释段,输入返回变量的检测,函数体语句,输入和输出(返回)的参数个数分别由,nargin,和,nargout,两个,MATLAB,保留的变量来给出。,(,2,)第一行帮助行,,以(,%,)开头,作为,lookfor,指令搜索的行,M,文件及函数的编写,21,(,3,)函数体说明及有关注解以(,%,)开头,用以说明函数的作用及有关内容,(,4,)函数体语句,函数体内使用的除返回和输入变量这些在,function,语句中直接引用的变量以外的所有变量都是局部变量,即在该函数返回之后,这些变量会自动在,MATLAB,的工作空间中清除掉。如果希望这些中间变量成为在整个程序中都起作用的变量,则可以将它们设置为全局变量。,M,文件及函数的编写,22,【,例,6】,前面的要求,,m,10000,无需修改程序,1.,写好程序,存成,findsum.m,文件,function s,m=findsum(k),s=0;,m=0;,while(s1,k=n*my_fact(n-1);,elseif n=0|n=1,k=1;,else,error(U input a wrong parameter!),end,2.,在,command window,中调用:,num=my_fact(11),M,文件及函数的编写,1.,写好程序,存成,my_fact.m,文件,prod(1:1000),24,使用,tic,和,toc,函数,,测试一下该函数的运行效率。,显式程序运行的时间。,tic;,num=my_fact(500);,toc,tic;,num=prod(1:1000);,toc,25,函数的函数名与存储名要一致。,函数名首字符必须为字母。其后可为字母数字下划线等。长度小于,31,个字符。,不推荐在同一文件中,写多个函数。,建议每个函数单独写成一个文件,由主程序调用,主程序不要写成函数形式。,函数编写注意事项:,M,文件及函数的编写,26,5,程序设计的优化,虽然,MATLAB,程序语言高度集成,但由于,MATLAB,属于解释型语言,在执行效率方面还是存在一些不足,因此,如何优化程序,特别是在大型的运算与仿真中,是一个很重要的话题。,M,文件及函数的编写,27,(1),以矩阵作为操作主体,循环运算是,MATLAB,语言的最大弱点。,在程序设计时应当尽可能避免循环运算,尽量,用向量化的运算来代替循环操作多重循环,,将执行次数少循环的放在外环;,在,MATLAB,编程过程中应当强调对矩阵本身,整体的运算,避免对矩阵元素的操作。,绝大多数的循环运算是可以转换为向量运算;,尽量使用内部函数,M,文件及函数的编写,28,举些简单的例子,说明,c,语言和,matlab,的区别:,例,1,找出数组,A=2,5,7,8,4,9,12,中,所有大于,6,的元素及其下标,x=find(A6);%,找出下标,B=A(x);,找出所有大于,6,的元素,例,2,找出一个数组中为素数的元素,isprime(A),29,虽然在,MATLAB,语言中没有规定变虽使用时必须预先定义,但是对于未定义的变量,如果操作过程中出现越界赋值时,系统将不得不对变量进行扩充,这样的操作大大降低了程序运行的效率,所以,对于可能出现变量维数不断扩大的问题,应当预先估计变量可能出现的最大维数,进行预定义。,(2),数据的预定义,M,文件及函数的编写,(3),充分利用,matlab,中已经集成的函数,30,对存储的合理操作及管理也会提高程序运行的效率。,MATLAB,语言提供了一系列的函数用以管理内存。,函数名,说明,clear,从内存中清除所有变量及函数,pack,重新分配内存,quit,退出,MATLAB,环境,释放所有内存,save,把指定变量存储至磁盘,load,从磁盘中调出指定变量,(3),内存的管理,M,文件及函数的编写,31,执行错误的发生是由于在程序运行过程中,出现溢出或死循环等引起的,这些错误都与程序本身有关,并且较难发现解决。,(,1,),M,文件错误的种类,M,文件一般有语法错误和执行错误两种。,语法错误发生在,M,文件程序代码的解释过程中,,一般是由函数参数输入类型有误或矩阵运算阶数,不符等引起的。,6,程序调试,M,文件及函数的编写,32,避免出现,NaN,、,Inf,或空矩阵等;,在可能出现上述异常数值的地方提供控制语句来识别;,识别函数有,isnan,、,isinf,、,isempty1sn,等。,处理异常的常用方法:,M,文件及函数的编写,33,(,2,)调试过程,在,M,文件中设置断点,单步运行,通过输出信息和,workspace,的变量,来查看程序是否运行正常,巧用“;”,运行到适当的地方输出信息,帮助分析。,改变输入信息,查看出错症结,使用,profile,,,tic,toc,cputime,函数查看文件运行耗时及各部分性能,以便化简。,M,文件及函数的编写,34,
展开阅读全文