M文件和流程控制(matlab)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

四、M文件和流程控制M文件和流程控制MATLAB控制流函数循环控制语句条件控制语句if,switchtry…catch…end结构其它流程控制指令M文件和流程控制(续)M脚本文件和函数文件M脚本文件和函数文件的比较局部变量和全局变量M文件的一般结构M文件和流程控制(续)变量的检测传递和限权使用函数输入输出变脸检测函数子函数和私用函数串演算函数函数句柄调试和剖析4.1MATLAB控制流函数4.1.1循环控制语句forforx=array循环体end循环体被循环执行,执行的次数就是array的列数,array可以是向量也可以是矩阵,循环变量x依次取array的各列,每取一次循环体执行一次。4.1MATLAB控制流函数(续)4.1.1循环控制语句whilewhile表达式循环体end只要表达式为逻辑真,就执行循环体;一旦表达式为假,就结束循环。表达式可以是向量也可以是矩阵,如果表达式为矩阵则当所有的元素都为真才执行循环体,如果表达式为nan,MATLAB认为是假,不执行循环体。例4.1循环控制语句%a中每一个数字等于所在行列数之和fori=1:10forj=1:10a(i,j)=i+j;endenda演示例4.1循环控制语句(续)注意:end必须和for,while成对出现,不可省略。特别是出现循环嵌套时,一定要注意for/while和end的配对问题。4.1.2条件控制语句if,switch1.if条件式1语句段1elseif条件式2语句段2...else语句段n+1end当有多个条件时,条件式1为假再判断elseif的条件式2,如果所有的条件式都不满足,则执行else的语句段n+1,当条件式为真则执行相应的语句段;If…else…end结构也可以是没有elseif和else的简单结构。举例:条件控制语句if举例cost=10;number=12;ifnumber8sums=number*0.95*cost;end,sums演示4.1.2条件控制语句if,switch2.switch开关表达式case表达式1语句段1case表达式2语句段2...otherwise语句段nend(1)将开关表达式依次与case后面的表达式进行比较,如果表达式1不满足,则与下一个表达式2比较,如果都不满足则执行otherwise后面的语句段n;一旦开关表达式与某个表达式相等,则执行其后面的语句段。(2)开关表达式只能是标量或字符串。(3)case后面的表达式可以是标量、字符串或元胞数组,如果是元胞数组则将开关表达式与元胞数组的所有元素进行比较,只要某个元素与开关表达式相等,就执行其后的语句段。举例:例4.2条件控制语句用于学生的成绩管理%exm04_02.mclear;%划分区域:满分(100),优秀(90-99),良好%(80-89),及格(60-79),不及格(60)fori=1:10a{i}=89+i;b{i}=79+i;演示例4.2条件控制语句用于学生的成绩管理小结:1)case后面的表达式可以是元胞数组,只要开关表达式的值与元胞数组中任一个元素值相等,就执行其后的语句段。2)switch指令判断开关表达式的值符合哪一个case,并执行相应的语句段,执行完毕,自动跳出switch结构,不需要break指令。4.1.3try...catch...end结构try语句段1catch语句段2end首先试探性地执行语句段1,如果在此段语句执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并放弃这段语句,转而执行语句段2中的语句,当执行语句段2又出现错误,则终止该结构。举例:try…catch…end结构进行矩阵相乘运算n=4;a=magic(n);%生成4阶魔方矩阵am=3;b=eye(3);%生成3阶单位矩阵b演示4.1.3try...catch...end结构小结:试探出矩阵的大小不匹配时,矩阵无法相乘,则再执行case后面的语句段,将a的子矩阵取出与b矩阵相乘。可以通过这种结构灵活的实现矩阵的乘法运算。4.1.4其他流程控制指令1.break指令break指令可以使包含break的最内层的for或while语句强制终止,立即跳出该结构,执行end后面的命令,break命令一般和If结构结合使用。2.continue指令continue指令用于结束本次for或while循环,只结束本次循环而继续进行下次循环。4.1.4其他流程控制指令(续)3.pause指令pause指令用来使程序运行暂停,等待用户按任意键继续。pause(n)指令用于使程序暂停n秒后再继续执行。4.keyboard指令keyboard指令将“控制权”交给键盘,等待键盘命令,仅当用户输入return指令后,“控制权”才交回程序。4.1.4其他流程控制指令(续)5.input指令input指令用来提示用户应该从键盘输入数值、字符串和表达式,并接受该输入。a=input(‘inputanumber:’)%输入数值给ab=input('inputanumber:','s')%输入字符串给b6.return指令return指令是终止当前命令的执行,并且立即返回到上一级调用函数或等待键盘输入命令,可以用来提前结束程序的运行。4.1.4其他流程控制指令(续)error/lasterr显示出错信息/显示最新出错原因,终止程序运行warning/lastwarn显示警告/显示MATLAB自动给出的最新警告,程序继续运行%exmR=input('Whatisyourname:','s')%以字符串形式赋给RS=input('Howoldareyou?')%键入数值pause(3)%暂停3秒pause%等待用户按任意键error('Youcan''tjointhearmy')%显示出错信息errordlg,warndlg%给出出错、警告对话框4.2M脚本文件和函数文件M文件由两种形式:M脚本文件和M函数文件,可在MATLAB的M文件编辑/调试器中进行编写和调试运行。4.2M脚本文件和函数文件(续)创建M文件的方法:在指令窗运行指令edit即可打开M文件编辑/调试器;单击工具条上的图标也可打开M文件编辑/调试器;选择菜单“File”——“New”——“M-file”,可打开空白的M文件编辑器。4.2M脚本文件和函数文件(续)打开已有M文件的方法:在指令窗运行指令editfilename;单击工具条上的图标;选择菜单“File”——“Open”——“M-file”;直接在资源浏览器中双击文件。4.2.1M脚本文件和函数文件的比较1.脚本文件的特点(1)脚本文件中的命令格式和前后位置,与在命令窗口中输入的没有任何区别。(2)MATLAB在运行脚本文件时,只是简单地按顺序从文件中读取一条条命令,送到MATLAB命令窗口中去执行。(3)与在命令窗口中直接运行命令一样,脚本文件运行产生的变量都是驻留在MATLAB的工作空间(workspace)中,可以很方便地查看变量,除非用clear命令清除;脚本文件的命令也可以访问工作空间的所有数据,因此要注意避免变量的覆盖而造成程序出错。4.2.1M脚本文件和函数文件的比较2.函数文件的特点(1)第一行总是以“function”引导的函数声明行;函数声明行的格式:function[输出变量列表]=函数名(输入变量列表)(2)函数文件在运行过程中产生的变量都存放在函数本身的工作空间;(3)当文件执行完最后一条命令或遇到“return”命令时,就结束函数文件的运行,同时函数工作空间的变量就被清除;(4)函数的工作空间随具体的M函数文件调用而产生,随调用结束而删除,是独立的、临时的,在MATLAB运行过程中可以产生任意多个临时的函数空间。4.2.1M脚本文件和函数文件的比较M脚本文件%exm04_Mfile.mx=-5ifx0f=-1;elseifx==0f=0;elsef=1;endM函数文件%exm04_funfile.mfunctionm=SIGN(y)ify0m=-1;elseify==0m=0;elsem=1;end指令窗运行exm04_Mfilef=-1指令窗运行x=-5;f=exm04_funfile(x)f=-14.2.1M脚本文件和函数文件的比较注意:M脚本文件一般用作主程序,由命令行组成。M函数文件需注意几点:1)必须以关键字“function”开头;2)第一行必须是函数声明行;3)函数名尽量与文件名一致,如果不一致,调用该函数时应使用文件名。4.2.2局部变量和全局变量局部变量(LocalVariables)是在函数体内部使用的变量,其影响范围只能在本函数内,只在函数执行期间存在;全局变量(GlobalVariables)是可以在不同的函数工作空间和MATALB工作空间中共享使用的变量。4.2.2局部变量和全局变量(续)当使用global指令指定全局变量时,必须对每个共享该变量的函数和基本工作空间进行专门的global定义。如果某个函数使全局变量的内容发生改变,其它函数空间及基本工作空间的同名变量也随之改变,除非所有和全局变量有关的工作空间都被删除,否则全局变量始终存在。全局变量必须在该变量被使用前声明为全局变量,建议放在首行声明。4.2.2局部变量和全局变量(续)M脚本文件中的变量是全局变量,运行完毕后变量仍保存在工作空间,可以进行访问;M函数内部定义的变量是局部变量,只能在函数内部访问;可以将函数内的变量声明为全局变量,利用“global”指令,为了与其它变量进行区分,通常用大写字母表示全局变量。4.2.2局部变量和全局变量(续)例如对exm04_funfile.m进行如下修改:%exm04_funfile.m%exm04funfile2.mfunctionm=SIGN(y)functionm=SIGNify0globalm=-1;ifY0elseify=0m=-1;m=0;elseifY=0;elsem=0;m=1;elseendm=1;end4.2.2局部变量和全局变量(续)则指令窗中执行指令改为globalY;Y=-5;f=exm04_funfile2f=-1可见利用全局变量可以实现函数间参数的传递,但是破坏函数的封装性,因此不提倡使用全局变量。4.2.3M文件的一般结构1)函数声明行:以关键字“function”开头,包括函数名以及输入输出宗量列表。2)H1行(用%开头的第一注释行):包括大写函数名,对函数功能的简要描述,主要用于关键词查询和help在线帮助。3)在线帮助文本(用%开头):包括对函数输入输出宗量的解释、函数调用格式等。执行指令helpfunname将显示第一注释行和在线帮助文本的内容。4)编写和修改记录(用%开头):与注释行间用“空行”分隔,标志该文件的作者、日期、版本等信息。5)函数体:与前面的注释行以“空行”分隔,由完成函数功能的命令行组成。函数体中可以加入以“%”开头的注释语句。4.2.3M文件的一般结构(续)M函数文件的必要组成部分是“函数声明行”和“函数体”,其他仅为增加可读性和方便使用而设。functiony=Ex0502(zeta)函数声明行%EX0502Stepresponseofquadraticsystem.第一注释行%二阶系统时域响应曲线%zeta阻尼系数帮助文本%y时域响应%%copyright2003-08-01编写记录函数主体x=0:0.1:20;y=1-1/sqrt(1-zeta^2)*exp(-zeta*x).*sin(sqrt(1-zeta^2)*x+acos(zeta))plot(x,y)注意:脚本文件没有函数声明行4.3变量的检测传递和限权使用函数4.3.1输入输出变量检测函数nargin在函数体内获取实际输入变量的个数nargout在函数体内获取实际输出变量的个数nargin(‘fun’)在函数体外获取’fun’指定函数的输入参数个数nargout(‘fun’)在函数体外获取’fun

1 / 56
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功