第3章 MATLAB程序设计 (3).ppt_第1页
第3章 MATLAB程序设计 (3).ppt_第2页
第3章 MATLAB程序设计 (3).ppt_第3页
第3章 MATLAB程序设计 (3).ppt_第4页
第3章 MATLAB程序设计 (3).ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

第三章MATLAB程序设计 3 1M文件编辑器3 2M文件类型与运行机理3 3MATLAB程序控制流3 4函数类型与使用方法3 5数据I O与文件操作3 6程序调试与性能优化 3 1M文件编辑器 M文件编辑器的启动 在MATLAB指令窗运行命令edit点击MATLAB工具栏上的 新建 图标在MATLAB菜单中选择 File New M file 打开已经存在的M文件 在MATLAB指令窗运行命令editfilename点击MATLAB工具栏上的 打开 图标在MATLAB菜单中选择 File Open 编辑M文件 M文件是文本文件 后缀名必须是 mM文件可以用任何文本编辑工具创建和编辑文本编辑工具最好具有语法检测功能 3 2M文件类型与运行机制 3 2 1M脚本文件M脚本文件只是一串按用户意图排列而成的 包括控制流向指令在内的 MATLAB指令集合脚本文件运行后 所产生的所有变量都驻留在MATLAB基本工作空间中只要用户不使用clear指令加以清除 且MATLAB指令窗口不关闭 这些变量将一直保存在基本工作空间基本工作空间随MATLAB的启动而产生 只有关闭MATLAB 该基本空间才能被删除脚本文件不允许有输入参数和输出参数 3 2M文件类型与运行机制 3 2 2M函数文件M函数文件的第一行是以function引导的函数声明行 该行还罗列函数与外界联系的全部输入输出参数每当函数文件运行时 MATLAB就专门为它开辟一个临时的函数工作空间 所有中间变量都存放在函数工作空间中当执行完文件最后一条指令时 或遇到return 就结束该函数文件的运行 同时该临时函数空间及其所有的中间变量就立即被删除函数空间随具体M函数文件的被调用而产生 随调用结束而删除函数空间相对基本空间是独立的 临时的 在MATLAB整个运行期间 可以产生任意多个临时函数空间如果在函数文件中发生对某脚本文件的调用 那么该脚本文件运行产生的所有变量都存放于函数空间 而不存放在基本空间如果从组成程序结构的角度来看 M函数文件仅比M脚本文件多出一个函数声明行 其它部分完全一样 3 2M文件类型与运行机制 3 2 3M函数文件的一般结构函数声明行 位于函数文件首行 以关键字function开头 函数名以及函数的输入输出参数都在这一行定义函数文件名字必须以字母开头 后面可以是字母 下划线以及数字的任意组合 但不得超过31个字符函数定义名与保存文件名一致 如果两者不一致 MATLAB将忽视文件首行的函数定义名 而以保存文件名为准H1行 紧随函数声明行之后以 开头的第一注释行 包含 大写体函数文件名和运用关键词简要描述的函数功能 供lookfor关键词查询和help在线帮助使用H1行最好用英文表达 便于关键词检索在线帮助文本区 H1行及其之后连续以 开头的所有注释行构成 通常包括函数输入输出参数的含义和调用格式说明编写和修改记录 与在线帮助文本区相隔一个空行 也以 开头 标志编写及修改该M文件的作者和日期以及版本记录 用来做软件档案管理函数体 由实现该M函数文件功能的指令组成注释 以 开头 在函数体中对实现函数功能的关键部分作出说明若仅从运算角度看 只有 函数声明行 和 函数体 两部分是构成M函数文件必不可少的 3 2M文件类型与运行机制 3 2 4局部变量和全局变量局部变量 Localvariable 存在于函数空间内部的中间变量产生于该函数的运行过程中其影响范围仅限于该函数本身全局变量 Globalvariable 不同的函数空间以及基本工作空间共享的变量每个希望共享变量的空间都必须用global声明全局变量没采用global定义的空间无权享用全局变量如果某个空间的操作使全局变量的内容发生变化 那么其他空间中的同名变量也随之变化除非与全局变量联系的所有空间都被删除 否则全局变量依然存在对全局变量的定义必须在该变量被使用之前进行为了提高M文件的可读性 建议用大写字母命名全局变量由于全局变量损害函数的封装性 因此不提倡使用全局变量 3 2M文件类型与运行机制 3 2 5P码文件语法分析过程和伪代码一个M文件首次被调用时 MATLAB首先对该M文件进行语法分析 并把生成的相应内部伪代码文件存放在内存中再次调用该M文件时 将直接调用该文件在内存中的P码文件 而不会对原码文件重复进行语法分析P码文件与原码文件有相同的文件名 但扩展名是 pP码文件运行速度高于原码文件如果存在同名的P码和原码文件 那么当该文件名被调用时 被执行的肯定是P码文件P码文件的预生成pcodeFunName 在当前目录上生成FunName ppcodeFunName inplace 在FunName m所在目录上生成FunName p 3 2M文件类型与运行机制 3 2 6MATLAB的搜索过程如果MATLAB在一个文件中遇到指令cow其搜索过程如下 检查cow是否为一个变量名 如果不是 执行下一步检查cow是否内建函数 假如不是 执行下一步检查cow是不是cow所在的M文件中的一个子函数 如果不是 再往下执行检查cow是不是cow所在的M文件中的一个私有函数 假如不是 再往下执行检查cow是不是当前目录上的文件 假如不是 再往下执行检查搜索路径上是否有cow存在MATLAB将使用最先找到的那个cow如果一直找不到cow MATLAB就给出错误信息 3 3MATLAB程序控制流 3 3 1for循环控制结构格式 说明 x 循环变量 依次取array各列commands 循环体重复执行次数由array的列数决定for循环结构可以嵌套array可以是任何合法的MATLAB数组循环不会因为在循环体内对循环变量重新设置新值而中断为了得到高效代码 应尽量提高代码的向量化程度 而避免使用循环结构为了得到高效代码 在循环指令之前应尽量对数组进行预定义 forx array commands end 3 3MATLAB程序控制流 3 3 2while循环结构格式 说明 commands 循环体首先检测expression的值 如其为逻辑真 则执行循环体内的命令 直到expression的值为逻辑假时退出循环如果expression的值是数组 则只有在数组中所有元素均为真时才执行循环体while循环与for循环的区别是执行循环体的次数能否预先确定如果expression的值为空数组 则MATLAB认为表达式值为假 而不执行循环体 whileexpression commands end 3 3MATLAB程序控制流 3 3 3if else end分支结构格式 一种选择两种选择多种选择说明表达式有时由多个逻辑子表达式组成 MATLAB将尽可能少地检测这些子表达式的值if指令判决和break指令的配合使用 可以强制终止for循环和while循环 ifexpression commands end ifexpression commands else commands end ifexpression1 commands elseifexpression2 commands else commands end 3 3MATLAB程序控制流 3 3 4switch case结构格式 说明 ex应为标量或字符串检测值testk类型可以是标量或字符串 也可以是元胞数组与C语言不同 在执行完每个case块后 MATLAB会自动跳出switch结构 无需使用break指令 switchexcasetest1 commands casetest2 casetestk commands otherwise commands end 3 3MATLAB程序控制流 3 3 5try catch结构格式说明 只有当执行命令组1出现错误后 命令组2才会被执行可调用lasterr函数查询出错原因如果lasterr的运行结果是一个空串 则表明命令组1被成功执行当执行命令组2时又出错 MATLAB将终止该结构 try commands1 catch commands2 end 3 3MATLAB程序控制流 3 3 6其它常用指令1 return 强制结束执行函数并把控制转出2 input 将控制权 暂时 交给用户v input message 将用户键入内容赋给vv input message s 将用户键入内容作为字符串赋给v3 keyboard 将控制权交给键盘用户可以输入各种合法指令用户输入return指令后控制权交还给程序4 v yesinput Prompt Default Possib 5 pause 暂停执行文件 等待用户按任意键继续6 break 使包含该指令的while for循环终止7 continue 结束当前循环 开始下一次循环8 error和warning指令 error message 显示出错信息 终止程序warning message 显示警告信息 程序继续运行errortrap 错误发生后 程序继续执行与否的双位开关 3 4函数类型与使用方法 3 4 1函数的调用方式函数方式 命令方式 3 4函数类型与使用方法 3 4 2输入输出参数检测检测指令 nargin 在函数体内 用于获取实际输入参数数目nargout 在函数体内 用于获取实际输出参数数目nargin fun 获取fun指定函数的标称输入参数数目nargin fun 获取fun指定函数的标称输出参数数目inputname n 在函数体内使用 给出第n个输入参数的实际调用变量名说明 在函数体内使用nargin nargout的目的是与程序流控制指令配合 对于不同数目的输入输出参数 函数可以完成不同的任务nargin nargout inputname本身都是函数 而不是变量 因此用户不能使用赋值指令对它们进行处理 3 4函数类型与使用方法 3 4 3变长度输入输出参数格式varargin 变长度输入参数列表varargout 变长度输出参数列表变长度参数必须放在普通参数之后varargin varargout本身都是元胞数组 编写M函数文件时 它们每个元胞应当作一个普通输入参数处理M函数文件被调用时 函数输入变量首先依先后次序逐个对应分配给输入参数列表中那些被明确定义的普通输入参数 然后把剩余的输入变量依次逐个分配到varargin元胞数组的元胞中 因此varargin元胞数组的长度取决于分配到的输入变量数varargout的工作机理 规则与varargin相同 function outputs varargout funname inputs varargin 3 4函数类型与使用方法 3 4 4跨空间变量传递跨空间计算串表达式的值evalin ws ex 跨空间计算串表达式值 ws 可取两个值 base 和 caller 当 ws 取 base 时 从基本工作空间获得变量值当 ws 取 caller 时 从主调函数工作空间获得变量值evalin ws ex1 ex2 跨空间计算替代串表达式值先从所在函数空间获取变量值 用eval exp1 计算原串表达式 若该计算失败 再从 ws 指定的工作空间获取变量值 再通过eval ex2 计算替代串表达式跨空间赋值assign ws VN x 跨空间向变量VN赋值 3 4函数类型与使用方法 3 4 5主函数和子函数主函数和子函数的定义 MATLAB允许一个M函数文件包含多个函数代码 其中第一个出现的函数称为主函数 该文件中的其他函数称为子函数 保存时所用函数文件名与主函数文件名相同 外部程序只能对主函数进行调用子函数的性质在M函数文件中 主函数的位置不可改变 但子函数的排列次序可以任意改变子函数只能被处于同一文件的主函数或其他子函数调用在M函数文件中 子函数的优先级仅次于内建函数同一文件的主函数 子函数的工作空间彼此独立help lookfor等指令都不能直接提供关于子函数的任何帮助信息子函数的帮助操作 helpprimefun subfun 3 4函数类型与使用方法 3 4 6私有函数与重载函数 3 4函数类型与使用方法 3 4 7串演算函数格式 y eval CEM 执行CEM指定的计算y eval CEM1 CEM2 先执行CEM1指定的计算 如果出错 就执行CEM2 y1 y2 eval CEM 执行对CEM代表的函数文件调用 并输出计算结果 y1 y2 feval FN arg1 arg2 用参数arg1 arg2等执行FN函数指定的计算说明 输入参数CEM必须是字符串 FN只能是函数名CEM可以是任何合法的指令 表达式 语句或M文件名第三种调用格式中的CEM只能是M函数文件名在既可以使用eval 又可以使用feval的情况下 feval运行效率更高 3 4函数类型与使用方法 3 4 8函数句柄函数句柄的创建和观察函数句柄创建 利用 符号 或利用转换函数str2func被创建句柄的函数文件必须在当前视野范围内如果函数不在当前视野内 所创建的函数句柄无效此时MATLAB既不会发布 出错 信息 也不会警告定义函数句柄时 所指定的函数名不应包括路径信息 也不应该包括扩展名函数句柄内涵观察 functionsfunctions函数只能接受 1 1 函数句柄数组 并返回一个单构架 包含若干个域 以记录函数的各种信息 3 4函数类型与使用方法 函数句柄的用法通过函数句柄执行相应函数的计算无效函数句柄 3 4函数类型与使用方法 3 4 9嵌套函数在函数体内部定义的函数 包含M文件的基本元素 以end表示结束可以在一个函数内部定义多个嵌套函数 也可以使用多重嵌套函数可以调用自己函数体中的嵌套函数 但不能调用嵌套函数内部更深层次的嵌套函数同级函数可以相互调用 也可以调用比自己低一级的嵌套函数嵌套函数拥有自己的工作空间 但是它有权限访问其所嵌套地方的所有函数的工作空间被主函数赋值的变量可以被主函数中任意一个嵌套函数访问 嵌套函数的变量值也可以被任何包含它的函数访问由嵌套函数返回的变量不包含在外部函数中使用函数句柄可以使得在函数的作用域之外也可以访问这个函数 但是函数的句柄必须在函数作用域内被创建嵌套函数在同一个M文件中与其他函数共享非全局变量 3 4函数类型与使用方法 3 4 10内联函数内联函数的创建 inline CE 把串表达式转化为输入参数自动生成的内联函数inline CE arg1 arg2 把串表达式转化为arg1 arg2指定输入参数的内联函数inline CE n 把串表达式转化为x P1 P2 Pn等指定参数的内联函数涉及内联函数性质的指令 class inlinefun 给出内联函数类型char inlinefun 给出内联函数计算公式argnames inlinefun 给出内联函数的输入参数vectorize inlinefun 使内联函数适用 数组运算 规则 3 4函数类型与使用方法 3 4 11匿名函数语法格式及其说明 fhandle arglist expressionexpression 函数体arglist 输入参数列表使用方法 arglist可以是一个参数 也可以是多个参数匿名函数也可以没有任何输入参数 但 后面的括号必须保留调用没有输入参数的匿名函数同样要带括号 否则MATLAB仅仅识别此句柄 而不会调用此函数可以建立匿名函数数组 用元胞数组存储在函数定义中使用空格要慎重与其他函数一样 匿名函数返回的输出参数个数决定于等号左边的参数个数 3 5数据I O与文件操作 2 3 3元胞数组内容的调取调取一个元胞 使用圆括号 得到元胞调取一个元胞的内容 使用大括号调取元胞内的子数组同时调取多个元胞内容 deal 2 3元胞数组及其运算 2 3 4元胞数组与其它类型的转换把数值数组转换为元胞数组C num2cell A dimN 把dimN指定 维号 方向的数组元素存为C的一个元胞dimN缺省时 默认数组每个元素各存为C的一个元胞把矩阵分解成元胞数组C ma

温馨提示

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

评论

0/150

提交评论