您好,欢迎访问三七文档
西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计第六章M文件程序设计基础西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计主要内容M文本编辑器M文件MATLAB的数据类型MATLAB控制流程序调试函数句柄西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计一、M文件M脚本(命令)文件M函数文件局部变量和全局变量M文件的一般结构变量的检测传递和限权使用函数西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计1、M脚本(命令)文件(Script)是若干命令和函数的集合,执行特定的功能不存在参数的输入和输出在MATLAB环境下,脚本可以直接访问整个工作空间的变量;而且由脚本建立的变量在脚本文件执行完毕后仍保持在工作空间中,直到clear命令清除为止。西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计例:建立fibonnaci.m文件,其内容如下:%计算Fibonnaci数clear;f(1)=1;f(2)=1;forn=1:1:8f(n+2)=f(n)+f(n+1);endf西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计2、M函数文件(Function)函数不但可以接受输入参数,还可以输出参数存储函数的M文件的文件名必须与函数名一致函数只能访问本身空间的变量每当函数文件运行,MATLAB就会专门为它开辟一个临时函数工作空间(Functionworkspace)。所有中间变量都存放在函数工作空间中。当执行完文件最后一条指令或遇到return时,就结束该函数文件的运行,同时该临时函数空间及其所有的中间变量就立即被清除。西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计MATLAB允许使用比“标称数目”较少的输入输出宗量,实现对函数的调用。函数空间随具体M函数文件的被调用而产生,随调用结束而删除。函数空间是相对独立的、临时的。在MATLAB整个运行期间,可以产生任意多个临时函数空间。假如在函数文件中,发生对某脚本文件的调用,那么该脚本文件运行产生的所有变量都存放于该函数空间之中,而不是存放在基本空间。西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计例:把前例计算fibonnaci数的脚本文件改成函数文件如下:functionf=fibo(N)%FIBO;计算参数N个Fibonnaci数的函数文件%f=fibo(N);N可取任意自然数%...%编写于...f(1)=1;%初始化1f(2)=1;%初始化2forn=1:Nf(n+2)=f(n)+f(n+1);end;西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计3、局部变量和全局变量局部(Local)变量它存在于函数空间内部的中间变量,产生于该函数的运行过程中,其影响范围也仅限于该函数本身。西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计全局(Global)变量通过global指令,MATLAB也允许几个不同的函数空间以及基本空间共享一个变量。这种被共享的变量称为全局变量。每个希望共享全局变量的函数或MATLAB基本工作空间,必须逐个用global对具体变量加以专门定义。没采用global定义的函数或基本空间,将无权享用全局变量。如果某个函数的运作使全局变量的内容发生了变化,那么其他函数空间以及基本工作空间中的同名变量也就随之变化。除非与全局变量联系的所有工作空间都被删除,否则全局变量依然存在。3、局部变量和全局变量西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计4、M文件的一般结构由于从结构上看,脚本文件只是比函数文件少一个“函数申明行”。典型M函数文件的结构:函数申明(定义)行(Functiondeclarationline):H1行(Thefirsthelptextline):在线帮助文本(Helptext)区:编写和修改记录:函数体(Functionbody):西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计函数申明(定义)行(Functiondeclarationline)位于函数文件的首行,以MATLAB关键字function开头,函数名以及函数的输入输出宗量都在这一行定义。西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计H1行(Thefirsthelptextline):紧随函数申明行之后以%开头的第一注释行。按MATLAB自身文件的规则,H1行包含:大写体的函数文件名;运用关键词简要描述的函数功能。该H1行供lookfor关键词查询和help在线帮助使用。西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计在线帮助文本(Helptext)区:H1行及其之后的连续以%开头的所有注释行构成整个在线帮助文本。它通常包括:函数输入输出宗量的含义,调用格式说明。西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计编写和修改记录与在线帮助文本区相隔一个空行,也以%开头,标志编写及修改该M文件的作者和日期、版本记录。它用于软件档案管理。西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计函数体(Functionbody):为清晰起见,它与前面的注释行以空行相隔。这部分内容由实现该M函数文件功能的MATLAB指令组成。它接收输入宗量,进行程序流控制,得到输出宗量。其中为阅读、理解方便,也配置适当的空行和注释。若注解行很多,可以用注解块操作符%{…%}西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计5、变量的检测传递和限权使用函数输入输出宗量检测指令跨空间变量传递子函数和私用函数西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计输入输出宗量检测指令nargin在函数体内,用于获取实际输入宗量nargout在函数体内,用于获取实际输出宗量nargin(‘fun’)获取‘fun’指定函数的标称输入宗量数nargout(‘fun’)获取‘fun’指定函数的标称输出宗量数inputname(n)在函数体内使用,给出第n个输入宗量的实际调用变量名西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计跨空间变量传递全局变量函数输入参数跨空间计算串表达式的值跨空间赋值西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计跨空间计算串表达式的值evalin(‘workspace’,’expression’)跨空间计算串表达式值‘workspace’可取两个值:‘base’和‘caller’Base:表示计算eval(‘expression’)时,将从基本工作空间获得变量值。Caller:表示计算eval(‘expression’)时,将从主调函数工作空间获得变量值。主调函数是相对被调函数而言的。这里,被调函数是指evalin所在的函数。西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计evalin(‘workspace’,’expression1’,’expression2’)跨空间计算替代串表达式值‘workspace’可取两个值:‘base’和‘caller’该调用格式的执行机理:先从所在函数空间获得变量值用eval(‘expression1’)计算原串表达式;若该计算失败,则在从‘workspace’指定的(基本或主调函数)工作空间获取变量值,再通过eval(‘expression2’)计算替代串表达式。西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计跨空间赋值assignin(‘workspace’,’VN’,x)把当前工作空间内变量x的值赋给‘workspace’指定空间名的VN变量。西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计子函数MATLAB允许一个M函数文件包含多个函数的代码。其中,第一个出现的函数称为主函数(Primaryfunction),该文件中的其他函数称为子函数(Subfunction)。保存时所用的函数名与主函数定义名相同。外部程序只能对主函数进行调用。西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计子函数的性质:每个子函数的第一行是其自己的函数申明行。在M函数文件内,主函数的位置不可改变,但子函数的排列次序可任意改变。子函数只能被处于同一文件的主函数或其他子函数调用。在M函数文件中,任何指令通过“名字”对函数进行调用时,子函数的优先级仅次于内装函数。同一文件的主函数、子函数的工作空间都是彼此独立的。各函数间的信息,或通过输入输出宗量传递,或通过全局变量传递,或通过跨空间指令传递。查看子函数的注释用helpmainfun/subfun的方式西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计私用(局部)函数所谓私用(局部)函数,是指位于private目录上的M文件函数。私用(局部)函数的性质:私用(局部)函数的构造与普通M函数完全相同。私用(局部)函数的只能被private目录的直接父目录上的M函数文件所调用。它不能被其他目录上的任何M函数、M脚本文件或MATLAB指令窗中的命令所调用,也不能被直接父目录上的M脚本文件调用。M文件中,任何指令通过“名字”对函数进行调用时,私用(局部)函数的优先级虽低于内装函数和子函数,但高与其他任何目录上的函数。help,lookfor等指令都不能提供关于私用(局部)函数的任何帮助信息。西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计二、MATLAB的数据类型6种基本数据类型及若干衍生类型。数据类型DataTypes数值Numeric字符串Char元胞Cell构架Structure函数句柄FunctionhandleJAVA类JAVAClass双精度double单精度single整数类Int*,uint*稀疏sparse西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计数据文件MATLAB允许接受的数据文件大致可分为以下几类:以.mat为扩展名的二进制数据文件。以.txt、.dat为扩展名的ASCII码数据文件。以.bmp、.jpg、.tif等为扩展名的图像文件。以.wav为扩展名的声音文件。西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计三、MATLAB控制流for循环结构while循环结构if-else-end分支结构switch-case结构try-catch结构控制程序流的其它常用指令西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计1、for循环结构forx=array(commands)endarray也可以为二维m×n,此时,以arry的列数n作为循环次数。每次循环时,将数组的每一列向量赋给x西华师范大学计算机学院ChinaWestNomalUniversityMatlab程序设计2、while循环结构whileexpression(commands)end当expression为空数组时,
本文标题:第八章程序设计
链接地址:https://www.777doc.com/doc-600009 .html