资源预览内容
第1页 / 共33页
第2页 / 共33页
第3页 / 共33页
第4页 / 共33页
第5页 / 共33页
第6页 / 共33页
第7页 / 共33页
第8页 / 共33页
第9页 / 共33页
第10页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Tel:13797073406QQ:641296082Email:zuo_williamyahoo.com.cn第五章 MATLAB程序设计5.1 程序控制 5.2 M文件结构 5.3 函数的使用 5.4 程序调试 5.5 函数的特殊形式与用法 5.6 函数绘图 5.7 数值分析 5.8 M文件剖析Tel:13797073406QQ:641296082Email:zuo_williamyahoo.com.cn5.1 程序控制5.1.1 分支控制语句F1.if结构格式n一种选择n两种选择n多种选择说明n表达式有时由多个逻辑子表达式组成,MATLAB将 尽可能少地检测这些子表达式的值nif指令判决和break指令的配合使用,可以强制终止 for循环和while循环if expression(commands) endif expression(commands) else(commands) endif expression1(commands) elseif expression2(commands) else(commands) endTel:13797073406QQ:641296082Email:zuo_williamyahoo.com.cn5.1 程序控制5.1.1 分支控制语句F2.switch结构格式:说明:nex应为标量或字符串n检测值testk类型可以是标量或字符串,也可 以是元胞数组n与C语言不同,在执行完每个case块后, MATLAB会自动跳出switch结构,无需使用 break指令switch excase test1(commands)case test2case testk(commands)otherwise(commands) endTel:13797073406QQ:641296082Email:zuo_williamyahoo.com.cn5.1 程序控制5.1.2 循环控制语句F1.for循环格式:说明:nx:循环变量,依次取array各列ncommands:循环体n重复执行次数由array的列数决定nfor循环结构可以嵌套narray可以是任何合法的MATLAB数组l循环不会因为在循环体内对循环变量重新设置新值而 中断l为了得到高效代码,应尽量提高代码的向量化程度, 而避免使用循环结构l为了得到高效代码,在循环指令之前应尽量对数组进 行预定义for xarray(commands) endTel:13797073406QQ:641296082Email:zuo_williamyahoo.com.cn5.1 程序控制5.1.2 循环控制语句F2.while循环格式:说明:ncommands:循环体n首先检测expression的值,如其为逻辑真,则执行 循环体内的命令,直到expression的值为逻辑假时 退出循环n如果expression的值是数组,则只有在数组中所有 元素均为真时才执行循环体lwhile循环与for循环的区别是执行循环体的次数能否 预先确定l如果expression的值为空数组,则MATLAB认为表 达式值为假,而不执行循环体while expression(commands) endTel:13797073406QQ:641296082Email:zuo_williamyahoo.com.cn5.1 程序控制5.1.2 循环控制语句F3.break语句和continue语句break语句n使包含该语句的最内层for或while循环强制 终止,并立即跳出该层循环结构,执行end 后面的命令n一般与if语句结合使用continue语句n只结束本次for或while循环,而继续进行下 次循环n一般与if语句结合使用Tel:13797073406QQ:641296082Email:zuo_williamyahoo.com.cn5.1 程序控制5.1.3 错误控制语句F格式F说明:先试探性执行命令组1,如果正确则不执行命令组2就结束只有当执行命令组1出现错误后,命令组2才会被执行当执行命令组2时又出错,MATLAB将终止该结构当错误控制结构运行结束后,可以调用lasterr函数查询出错信息, 调用方法是lastmsg,lastid=lasterrlastmsg保存出错信息lastid保存错误类型try(commands1) catch(commands2) endTel:13797073406QQ:641296082Email:zuo_williamyahoo.com.cn5.1 程序控制5.1.4 流程控制命令F1.return命令:提前结束程序执行,立即返回上一级调用函数或等待键盘输入命令一般用于遇到特殊情况需要立即退出程序或终止键盘方式F2.keyboard命令:使程序暂停运行,等待键盘命令,命令窗口出现“K”用户输入return指令后程序继续运行在“K”状态下用户可以输入各种合法指令用于程序调试或在程序执行时修改变量F3.input命令:在程序运行过程中接收用户输入,并将输入内容保存到变量中v=input(message):将用户键入内容赋给vv=input(message,s):将用户键入内容作为字符串赋给vF4.disp命令:显示字符串型的信息提示F5.pause命令:使程序暂停运行,当用户按任意键才继续执行用于程序调试或查看中间结果,也可以控制程序执行速度Tel:13797073406QQ:641296082Email:zuo_williamyahoo.com.cn5.2 M文件结构5.2.1 M文件的一般结 构F函数声明行:FH1行:F在线帮助文本区:F编写和修改记录:F函数体:F注释:function x=myfun(y) %MYFUN %我的第一个函数 %调用格式: %x=myfun(y)%2009年4月14日编写%计算y的平方 x=y2;Tel:13797073406QQ:641296082Email:zuo_williamyahoo.com.cn5.2 M文件结构5.2.2 M脚本文件和M函数文件F1.M脚本文件M脚本文件没有函数声明行,H1行和帮助文字 经常也可以省略MATLAB在运行脚本文件时,只是简单地按顺 序从文件中读取每一条命令,送到命令窗口中 执行M脚本文件运行产生的变量都驻留在MATLAB 的工作空间中,可以很方便地查看变量,在命 令窗口中运行的命令都可以使用这些变量脚本文件的命令可以访问工作空间的所有数据 ,因此要注意避免工作空间和脚本文件中的同 名变量相互覆盖,一般在脚本文件开头使用 clear命令清除工作空间的变量Tel:13797073406QQ:641296082Email:zuo_williamyahoo.com.cn5.2 M文件结构5.2.2 M脚本文件和M函数文件F2.M函数文件M函数文件可以有一个或多个函数,每个函数 以函数声明行开头,这些函数声明行是必不可 少的M函数文件在运行过程中产生的变量都存放在 函数本身的工作空间中,函数的工作空间是独 立的、临时的,随具体的M函数文件调用而产 生并随调用结束而删除,在MATLAB运行过程 中如果运行多个函数则产生多个临时的函数空 间当文件执行完最后一条命令或遇到return命令 时就结束函数文件的运行,同时清除函数工作 空间的变量如果从组成程序结构的角度来看,M函数文件 仅比M脚本文件多出一个函数声明行,其它部 分完全一样Tel:13797073406QQ:641296082Email:zuo_williamyahoo.com.cn5.2 M文件结构5.2.2 M脚本文件和M函数文件F3.函数声明行格式:function 输出参数列表=函数名(输入 参数列表)说明:l函数名必须以字母开头,后面可以是字母、下划线以 及数字的任意组合,但不得超过31个字符l函数名最好与保存文件名一致;如果两者不一致, MATLAB将以保存文件名为准l输入参数列表是函数接收的输入参数,各参数之间用 逗号分隔l输出参数列表是函数运算的结果,各参数之间用逗号 分隔Tel:13797073406QQ:641296082Email:zuo_williamyahoo.com.cn5.3 函数的使用5.3.1 主函数和子函数F1.主函数和子函数的定义:MATLAB允许一个M函数文件包含多个函数代码,其中 第一个出现的函数称为主函数,该文件中的其他函数称 为子函数。保存时所用函数文件名与主函数文件名相同。外部程序只能对主函数进行调用F2.子函数的性质在M函数文件中,主函数的位置不可改变,但子函数的 排列次序可以任意改变子函数只能被处于同一文件的主函数或其他子函数调用在M函数文件中,子函数的优先级仅次于内建函数同一文件的主函数、子函数的工作空间彼此独立help、lookfor等指令都不能直接提供关于子函数的任何 帮助信息子函数的帮助操作:help primefun/subfunTel:13797073406QQ:641296082Email:zuo_williamyahoo.com.cn5.3 函数的使用5.3.2 输入输出参数检测F检测指令:nargin:在函数体内,用于获取实际输入参数数目nargout:在函数体内,用于获取实际输出参数数目nargin(fun):获取fun指定函数的标称输入参数数目nargin(fun):获取fun指定函数的标称输出参数数目inputname(n):在函数体内使用,给出第n个输入参数 的实际调用变量名F说明:在函数体内使用nargin、nargout的目的是与程序流控 制指令配合,对于不同数目的输入输出参数,函数可以 完成不同的任务nargin、nargout、inputname本身都是函数,而不是 变量,因此用户不能使用赋值指令对它们进行处理Tel:13797073406QQ:641296082Email:zuo_williamyahoo.com.cn5.3 函数的使用5.3.3 变长度输入输出参数F格式Fvarargin:变长度输入参数列表Fvarargout:变长度输出参数列表F变长度参数必须放在普通参数之后Fvarargin、varargout本身都是元胞数组,编写M 函数文件时,它们每个元胞应当作一个普通输入 参数处理FM函数文件被调用时,函数输入变量首先依先后次 序逐个对应分配给输入参数列表中那些被明确定 义的普通输入参数,然后把剩余的输入变量依次 逐个分配到varargin元胞数组的元胞中,因此 varargin元胞数组的长度取决于分配到的输入变 量数Fvarargout的工作机理、规则与varargin相同function outputs,varargout=funname(inputs,varargin)Tel:13797073406QQ:641296082Email:zuo_williamyahoo.com.cn5.3 函数的使用 5.3.4 局部变量、全局变量和静态变量F1.局部变量(Local variable)存在于函数空间内部的中间变量产生于该函数的运行过程中其影响范围仅限于该函数本身F2.全局变量(Global variable)不同的函数空间以及基本工作空间共享的变量每个希望共享变量的空间都必须用global声明全局变量没采用global定义的空间无权享用全局变量如果某个空间的操作使全局变量的内容发生变化,那么其他空间 中的同名变量也随之变化除非与全局变量联系的所有空间都被删除,否则全局变量依然存 在对全局变量的定义必须在该变量被使用之前进行l为了提高M文件的可读性,建议用大写字母命名全局变量l由于全局变量损害函数的封装性,因此不提倡使用全局变量l清除某个全局变量:clear global 变量名l清除所有的全局变量:cle
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号