第四章M文件和程序设计yPPT课件_第1页
第四章M文件和程序设计yPPT课件_第2页
第四章M文件和程序设计yPPT课件_第3页
第四章M文件和程序设计yPPT课件_第4页
第四章M文件和程序设计yPPT课件_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章M文件和程序设计 主要内容 4 1程序控制语句4 2命令文件和函数文件4 3字符串的求值4 4程序性能优化4 5面向对象编程 4 1程序控制语句 一 分支控制分支控制语句有if和switch两种语句if结构ifexpressioncommandsend 说明 当表达式expression的值为真 则执行commands语句组 否则跳过commands语句组 执行end之后的语句 4 1程序控制语句 if else结构ifexpressioncommands1elsecommands2end 说明 如果表达式expression的值为真 则执行语句组commands1 然后跳过语句组commands2向下执行 若表达式expression的值为假 则跳过语句组commands1 执行语句组commands2 4 1程序控制语句 if elseif else结构ifexpression 1command 1elseifexpression 2command 2 elseifexpression ncommand nelsecommand elend 说明 如果表达式expression 1的值为真 则执行语句组command 1 若表达式expression 1的值为假 则判断expression 2的值 若为真 则执行语句组command 2 否则向下继续判断表达式 如果所有表达式都为假 则执行语句组command el 4 1程序控制语句 x input pleaseinputx ifx1y sin x cos x elsey exp x end disp y disp num2str y y 例 多项式加p1 154 p2 16116 n1 length p1 n2 length p2 ifn1 n2 p1 zeros 1 n2 n1 p1 elsep2 zeros 1 n1 n2 p2 endpsum p1 p2 psum 171610 switch case结构switchexp constcasevalue 1commands 1casevalue 2commands 2 casevalue ncommands notherwisecommands owend 4 1程序控制语句 说明 表达式exp const的值和哪一个case语句后的测试值相等 就执行那个case语句下的语句组 如果exp const和所有测试值都不相等 就执行otherwise后的语句组commands ow switch后的exp const表达式可以为标量或者字符串 对于标量形式 用关系运算符 比较 对于字符串形式 用函数strcmp比较 case语句后的value n值可以是标量 字符串 也可以是细胞数组 如果是细胞数组 Matlab会把表达式exp const的值和细胞数组中的每个元素比较 只要有一个元素和exp const值相同 比较结果就为相等 t pi 0 1 pi trigname input Inputtrigfunctionsname 必须输入字符串 即用两个单引号括起来switchtrignamecase sin plot t sin t case cos plot t cos t otherwisebreak 终止 跳出switch语句end 例如 检查input num的数值 switchinput numcase 1display negativeone case0display zero case1display positiveone otherwisedisplay othervalue end 4 1程序控制语句 二 循环控制 for循环forx 表达式commandsend 表达式为一个向量S1 S2 S3 说明 x称为循环变量 commands称为循环体 循环的执行步骤是 循环变量从左到右依次取Array数组的一列 每取一列就执行一次循环体 循环体被执行的次数为Array的列数 for循环一般用于循环次数已知的程序流程控制 例 利用for循环求1 2 3 5 的值sum 0 fori 1 5pdr 1 fork 1 ipdr pdr k endsum sum pdr endsum执行结果为 sum 153 例 x fori Hello x ix end x 4 1程序控制语句 while循环whileexpressioncommandsend 说明 先判断表达式expression的值 如果其值为真 则执行commands循环体 执行完循环体后 继续判断表达式expression的值 直到表达式expression的值为假 结束循环 while循环通常用在循环次数未知的情况下 而且要在循环体修改循环表达式的值 否则容易造成死循环 break从循环体中跳出 并使循环结束 4 1程序控制语句 例 用while循环求1 100间整数的和sum 0 i 1 whilei 100sum sum i i i 1 endsum执行结果 sum 5050 While循环和for循环的区别 while循环结构的循环体被执行的次数不是确定的 而for结构中循环体的执行次数是确定的 fori 1 5c input 请输入一个字符 s ifc A c a c 0 c 9 disp abs c abs 0 elsedisp c endend 例 输入一个字符 若为大写字母 则输出其对应的小写字母 若为小写字母 则输出其对应的大写字母 若为数字字符则输出其对应的数值 若为其他字符则原样输出 关于字符的处理 用abs或double函数可得到一个字符的AscII码 用chD和setsb函数可得到AscII码对应的字符 本题是一个4分支选择结构 可用多分支选择结构实现 4 1程序控制语句 三 异常检测 Matlab有异常处理机制 即可以检测某些语句的执行是否正确 如果发生运行错误 Matlab的异常处理机制会捕捉到这个错误 并跳转到用户指定的错误处理程序 try catch语句trycommandscatchhandlesend 说明 执行语句组commands 当语句组commands执行发生错误时 跳转到错误处理语句组handles 例如 判断错误语句的用法n 4 a magic 3 trya n a n catcha end a end endlasterr 4 1程序控制语句 四 其他程序流控制语句返回指令return强制结束函数或者命令的调用 将控制权交给主调函数或者命令窗口 出错处理error message 显示出错信息message 中止程序运行errortrap发生错误后 程序继续执行或退出的状态切换lasterr显示Matlab给出的最新的出错信息 并中止程序运行 4 1程序控制语句 警告处理warning message 显示警告信息message 程序继续运行lastwarn显示Matlab最新给出的警告信息 程序自动运行五 人机交互控制inputv input message 将用户键入的内容赋给变量v messages是显示信息v input message s 将用户键入的内容作为字符串赋给变量v 4 1程序控制语句 keyboard从键盘读入多个Matlab指令 直到用户输入return指令才返回 yesinputv yesinput Prompt default posible 说明 Prompt是显示在屏幕上的提示信息 default是缺省值 即如果没有键盘输入时变量v赋值为default posible是变量v可能接受的值 pausepause暂停执行文件 等用户输入任意按键后继续执行pause n 暂停n秒后 程序继续执行dispdisp X 显示数组X的内容 但是不显示数组X的名字 4 2命令文件和函数文件 用户可以把需要运行的Matlab指令保存在一个以 m 为扩展名的文件中 通过在命令窗口键入这个文件的名字来运行文件中的Matlab指令 我们称这些文件为m文件 按照m文件的组成和特点 可以分为命令文件和函数文件 4 2命令文件和函数文件 一 命令文件有关命令文件的描述如下 命令文件没有输入参数也没有输出参数 只是一些Matlab命令和函数的组合 命令文件可以操作基本工作空间 BaseWorkspace 的变量 也可以生成新的变量 命令文件执行结束后新变量将保存在基本工作空间中 不会被自动清除 命令文件是用 m 为扩展名的文件 只要命令文件在搜索路径上 在命令窗口键入文件名就可以运行命令文件 4 2命令文件和函数文件 说明 M文件是一个文本文件 可以使用各种文本编辑器编辑和修改 也可以使用MATLAB的M文件编辑器 调试器 Editor Debugger 在运行程序之前 一定要确定这个M文件是否在MATLAB的搜索路径中 若不在 可以选择 File SetPath 菜单 在路径设置对话框中 加入该路径到所有搜索路径的最前端 一旦用 SetPath 菜单设置了搜索路径后 Matlab会自动保存这些路径 在MATLAB的命令窗口输入M文件名即可运行该命令文件 M文件运行过程中产生的变量会驻留在基本工作空间中 即使文件运行结束也不会被自动删除 只有关闭了MATLAB后基本工作空间才会被删除 1 一般由clc clear clf命令开始 清除掉屏幕和工作空间中原有的变量和图形 以避免其他已执行的程序残留数据对本程序的影响 程序中应该添加有注释 2 接下来是程序的主体 如果文件中有全局变量 则需要使用global在程序的起始部分注明 为了提高程序的可读性 注意语句的缩进 3 整个程序应按照Matlab标识符的要求起文件名 扩展名为m 4 2命令文件和函数文件 二 函数文件函数文件的使用比命令文件更加灵活 能够更好的实现复杂问题的功能模块划分 函数文件如同一个 黑箱子 调用者仅仅需要把输入变量传递给函数 就会得到函数的输出变量 即函数的运行结果 对函数文件有如下的描述 函数文件要在第一行用function关键字来显式的定义 函数文件有输入变量和输出变量 函数文件的名字和第一行所定义的函数名相同 可以用比函数定义中数目少的输入变量和输出变量来调用函数 函数文件内部定义的变量属于临时变量 只有函数运行期间才被生成 函数运行结束后 这些临时变量会被Matlab系统自动删除 除了定义为全局变量 4 2命令文件和函数文件 三 函数文件的组成function 输出变量 函数名 输入变量 注释说明语句段程序语句段函数定义行函数M文件的第一行用关键字 function 把M文件定义为一个函数 指定函数的名字 同时定义了函数的输入变量和输出变量 输入变量的定义用圆括号 如果有多个输入变量则用逗号分隔 输出变量的定义用中括号 如果有多个输出变量则用逗号分隔 H1行所谓H1行指帮助文本的第一行 它紧跟在定义行之后并以 符号开头 用于概括说明函数的功能 在命令窗口用lookfor命令时将显示函数的H1行 4 2命令文件和函数文件 函数帮助文本帮助文本指位于H1行之后函数体之前的说明文本 它同样以 符号开头 一般用来比较详细地介绍函数的功能 用法以及函数的修改记录 在命令窗口用help命令时将显示函数的H1行和所有帮助文本 函数体是函数的主体部分 函数的功能是通过函数体实现的 函数体可以包括所有的Matlab合法命令 函数和流程控制语句 例如 myhilb m 4 2命令文件和函数文件 四 函数的输入变量和输出变量1 输入变量和输出变量的检测检测输入变量和输出变量的函数 其格式和功能如下 n nargin用于函数内 返回实际输入变量的个数n nargin fun 获取fun函数的声明的输入变量个数n nargout用于函数体 返回实际输出变量的个数n nargout fun 获取fun函数的声明的输出变量个数vname inputname n 用于函数内 返回第n个输入变量的实际调用变量名字 4 2命令文件和函数文件 2 数目可变的输入变量和输出变量Matlab支持输入变量和输出变量数目可变的函数 用户可以使用Matlab提供的两个指令来自己编写参数数目可变的函数 varargin数目可变的输入变量列表varargout数目可变的输出变量列表 说明 编写参数数目可变的函数时 函数定义行的 数目可变的变量 要放在 普通变量 之后 4 2命令文件和函数文件 varargout的工作过程和varargin类似 只是其对应的是函数的输出变量 varargin的工作过程 varargin是一个细胞数组 里面放置的是 数目可变的变量 函数被调用时 输入变量的传递规则是 实际输入变量依次逐个传递给函数定义的输入变量列表中的 普通输入变量 然后把剩余的实际输入变量依次传递给varargin细胞数组中的细胞 varargin细胞数组中的细胞作为一个 普通输入变量 来使用 functionvartest argA argB varargin vararginoptargin size varargin 2 可选输入stdargin nargin optargin 标准输入fprintf Numberofinputs d n nargin fprintf Inputsfromindividualarguments d n stdargin ifstdargin 1fprintf d n argA endifstdargin 2fprintf d n argB end32fprintf Inputspackagedinvarargin d n optargin fork 1 size varargin 2 fprintf d n varargin k endend 4 2命令文件和函数文件 五 有关工作空间1 工作空间有了函数文件后 工组空间会变得复杂起来 Matlab将工作空间分成2类 基本工作空间基本工作空间是Matlab启动后自动创建的 只有关闭了Matlab后基本工作空间才会被删除 基本工作空间内部包括Matlab建立的特殊变量 如pi i j NaN等 和命令窗口执行语句过程中生成的变量 函数工作空间函数工作空间是函数文件运行时自动创建的工作空间 它是临时的 当函数运行完毕后 会被系统自动撤销 其中保存了函数内部定义或者运算生成的临时变量 它们在函数执行完成后就不存在了 4 2命令文件和函数文件 2 局部变量和全局变量局部变量存在于函数工作空间的临时变量 即函数内部定义的变量 称为局部变量 局部变量只能被定义它的函数使用 在函数的定义中 其输入变量和输出变量就是局部变量 即函数的输入变量和输出变量只能在本函数内部被使用 全局变量通过global关键字可以定义全局变量 全局变量可以被所有工作空间共享 即所有工作空间都可以访问全局变量 但是前提是使用之前要先在工作空间内用global关键字声明全局变量 建议在函数的开始处定义或声明全局变量 全局变量的名字一般采用大写字母命名 4 2命令文件和函数文件 3 跨工作空间的变量赋值有些时候我们需要跨工作空间给变量赋值 Matlab提供了相关的函数 格式 assignin ws var val 说明 把当前工作空间的变量val赋值给 ws 工作空间的名为 var 的变量 其中 ws 可以取 base 表示基本工作空间 caller 表主调函数工作空间 六 子函数和私有函数如果一个项目比较复杂 就需要编写大量的函数文件 这些函数文件通常都是该工程中专用的 其他程序很少会用到 我们应该限制这些自编函数可以被调用的范围 避免在Matlab基本工作空间中出现过多的标识符 尽量避免在一个工作空间内出现同名函数 为了限制函数的使用范围 Matlab支持子函数和私有函数 4 2命令文件和函数文件 1 子函数Matlab允许一个函数文件内定义多个函数 其中 第一个定义的函数称为主函数 其他的函数称为子函数 关于主函数和子函数的描述如下 每个文件的第一行定义的是主函数 只有主函数可以被其他程序调用 函数文件的名字必须和主函数相同 子函数只能被处在同一个文件中的主函数或者其他子函数调用 主函数和各个子函数的工组空间是彼此独立的 即每个函数拥有自己独立的工作空间 4 2命令文件和函数文件 2 私有函数私有函数是在函数M文件所在目录的private子目录中的函数M文件 其性质如下 私有函数只能被private的直接父目录中定义的M文件调用 其他目录的M文件或者命令窗口无权调用私有函数 私有函数的定义和构成和普通函数相同 4 2命令文件和函数文件 七 M文件的执行当Matlab遇到一个新的标识符corv时 它将按照下面步骤寻找这个标识符 检查corv是否是一个变量名 检查corv是否是内建函数名 检查corv是否是子函数 检查corv是否是私有函数 检查corv是否是当前目录中的文件 在SetPath指定的路径内搜索corv文件 Matlab将使用最先找到的那个corv标识符 如果经过上述步骤的搜索 也无法找到corv标识符 则给出提示信息 Undefinedfunctionorvariable corv 4 4程序性能优化 Matlab语言是解释执行的语言 其优点是编程简单 使用方便 但其缺点就是程序执行速度缓慢 执行效率低下 对于复杂的程序 程序员要考虑程序性能的优化 让应用程序既能够完成预期的功能 又具有较快的运行速度和较高的执行效率 一 源代码级的优化1 循环的向量化Matlab的运算功能是针对向量的 因此尽量少使用for循环和wile循环 用向量化的数组代替单个元素的循环运算 即循环的向量化 循环的向量化不但能缩短源代码的长度 还能加快程序的运行速度 提高程序的执行效率 tic x 1 fori 1 1000 y i sin x x x 0 1 pi end tocelapsed time 0 0500tic x 1 0 1 pi 1000 pi y sin x tocelapsed time 0 0100 4 4程序性能优化 2 数组大小的预定义Matlab在使用变量之前 不需要预先定义变量的名字和大小 如果变量的大小没有被显示的指定 则每当新赋值的元素下标超过变量的维数时 Matlab就自动为变量扩充维数 这大大降低了程序的运行效率 如果预先知道变量的维数 就可以预先定义好变量尺寸 通常采用ones zeros或者cell等函数预定义变量维数 ticH zeros 5 10000 fori 1 5forj 1 10000H i j 1 i j 1 endendtoc ticH zeros 5 10000 fori 1 5H i 1 i i 9999 endtoc test1elapsed time 0 2970 test2elapsed time 0 0310

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论