matlabppt第五讲.ppt
《matlabppt第五讲.ppt》由会员分享,可在线阅读,更多相关《matlabppt第五讲.ppt(41页珍藏版)》请在装配图网上搜索。
第五讲 Matlab提供的工作方式包括 1交互式指令操作 用户在命令窗口输入命令 系统执行现实结果 适合于简单的问题的处理2M文件的编程工作 调用函数文件执行程序 M文件是由Matlab语句构成的ASCII码文本文件 扩展名为 m M文件有两种形式 M脚本文件和M函数文件 一M文件 1M文件的创建和执行2M脚本文件和函数文件3M文件的结构 1 M文件创建 保存 打开和编辑 见演示 2 搜索和执行M文件 执行方法 用户在命令窗口键入M文件名 并按下回车键来执行 系统首先搜索该文件 若文件存在 以解释方式按顺序执行M文件的语句 搜索过程 检查工作空间是否有该名称检查是否为MATLAB内部函数检查当前目录在默认搜索路径中查找文件 1M文件的创建和执行 2脚本文件和函数文件 1 M脚本文件 是一串按用户意图排列而成的 包括控制流指令 matlab指令集合 脚本文件中的命令格式和前后位置 与在命令窗口中输入的没有任何区别 脚本文件的特点 1 MATLAB在运行脚本文件时 只是简单地按顺序从文件中读取一条条命令 送到MATLAB命令窗口中去执行 2 与在命令窗口中直接运行命令一样 脚本文件运行产生的变量都是驻留在MATLAB的工作空间 workspace 中 可以很方便地查看变量 除非用clear命令清除 脚本文件的命令也可以访问工作空间的所有数据 因此要注意避免变量的覆盖而造成程序出错 3 脚本文件创建或定义的变量保留在工作空间中 因此空间中的其他命令文件和函数文件都可以访问这些变量 4 因此在程序设计中 脚本文件常作为主程序来设计 2 M函数文件 与脚本文件不同 函数文件是一个黑箱 从外界只能看到传给它的输入量和送出来的计算结果 内部运行是不可见的 它的特点是 1 从形式上看 与脚本文件不同 函数文件的第一行总是以 function 引导的函数申明行 该行还罗列出函数与外界联系的全部标称输入输出宗量 对输入输出宗量的数目没有限制 即可以没有输入输出宗量 也可以是任意多个数目 function 输出变量列表 函数名 输入变量列表 函数声明格式 2 matlab允许使用比标称数目少的输入输出宗量 实现对函数的调用 3 函数文件保存的文件名应该和用户定义的函数名一致 4 从运行上看 与脚本文件不同 函数文件运行时 matlab会专门为它开辟一个临时工作空间 称为函数工作空间 所有中间变量都存放在函数工作空间 当执行完文件最后一条指令或遇到return时 就结束该函数文件的运行 同时该临时函数空间及其所有的中间变量就立即被清除 6 假如在函数文件中 发生对某脚本文件的调用 那么该脚本文件运行产生的所有变量都存放在该函数空间中 而不是在基本空间 5 函数空间随具体M函数文件的调用而产生 随调用结束而删除 函数空间是相对基本空间独立的 临时的 在matlab整个运行期间 可以产生任意多个临时函数空间 3M文件的一般结构 1 函数申明行 位于函数文件的首行 以matlab关键字function开头 函数名以及函数的输入输出宗量都在这一行定义 2 H1行 紧随函数申明行之后以 开头的第一注释行 包括 大写体的函数文件名 运用关键词简要描述函数功能 该行供lookfor关键词查询和help在线帮助使用 3 在线帮助文本区 H1行及其之后的连续以 开头的所有注释行构成的整个在线帮助文本 通常包括 函数输入输出宗量的含义 调用格式说明 4 编写和修改记录 以 开头 注释编写和修改的日期 版本记录 5 函数体 是实现M文件功能的指令集 它接收输入宗量 进行程序流程控制 得到输出宗量 如果仅从运算角度看 只有函数申明行和函数体两部分是构成M函数文件必不可少的 说明 从结构上看 M脚本文件仅比M函数文件少一个函数申明行 其余各部分的构造和作用都相同 函数定义名和保存文件名一致 两者不一致时 将忽视文件首行的函数定义名 而以保存文件名为准 函数文件的名字必须以字母开头 后面可以是字母 下划线以及数字的任意组合 例M函数文件示例 circle m functionsa circle r s 函数申明行 CIRCLplotacirlceofradiarinthelinespecifiedbys r指定半径数值 s指定线型颜色的字符串 sa圆面积 circle r 利用蓝实线画半径为r的圆 circle r s 利用s指定的颜色画半径为r的圆 sa circle r 计算圆面积 并画半径为r的兰色圆周 sa circle r s 计算圆面积 并画半径为r的圆 s指定线的颜色 编写于x年x月x日 修改于x年x月x日 ifnargin 2error 输入宗量太多 end ifnargin 1s b end clf t 0 pi 100 2 pi x r exp i t ifnargout 0plot x s elsesa pi r r fill real x imag x s endaxis square 二Matlab程序控制流 for循环结构while循环结构if else end分支结构switch case结构try catch结构控制程序流的其他常用指令 matlab提供了五种控制程序流的结构 1 for循环结构 fork k1 inc k2 和一维数组冒号法定义相同 command 循环体end 例for循环示例 forii 1 10 x ii ii end x 12345678910 说明 循环不会因为在循环体内对循环变量更新设置而中断 在for后面的表达式中的数组可以为任何合法的matlab数组 循环结构可以嵌套使用 为了得到高效率的代码 应尽量提高代码的向量化程度 避免使用循环结构 在循环指令之前应尽量对数组进行预定义 由于i和j是预定义变量 作虚单位使用 建议不作为循环变量使用 例多重循环生成9x9乘法表 forii 1 9forkk 1 iia ii kk ii kk endend x 1 1 9 y x x x y a ones 9 9 a tril a table x a 矩阵的运算得到 2 while循环结构 whileexpression command 循环体end 说明 在while和end之间的组命令为循环体 当执行到while指令时 首先检测expression的值 如其值为逻辑真 非0 则执行循环体中的命令 组命令 当组命令执行完毕 继续检测表达式的值 若仍为真 循环执行组命令 一旦表达式为假 就结束循环 while和for两种循环的区别在于 while循环结构的循环体被执行的次数是不确定的 而for结构中循环体的执行次数是确定的 当while指令后的表达式是空数组时 认为表达式值为假 使用while循环条件时要小心出现无限循环 如果出现按Ctrl C可终止 例级数收敛性判断 当收敛到终值s 2 6 的0 01 以内时 项数N是多少 series 1 k 2 exact pi 2 6 whileabs series exact exact 1e 4 series series 1 k 2 k k 1 End 3 if else end分支结构 if else end指令为程序流提供了一种分支结构 它的最常用的方式为 如果判决条件expression为一个空数组 认为条件为假 表达式由多个逻辑子表达式组成时 将尽可能少地检测子表达式的值 if指令判决和break指令配合使用 可以强制终止for或while循环 4 switch case结构 switchexpressioncasetest1command1casetest2 casetestkcommandkotherwisecommandsend 说明 当遇到switch结构时 matlab将表达式的值依次和各个case指令后面的检测值进行比较 如果比较结果为假 则取下一个检测值再比较 一旦比较结果为真 matlab将执行相应的一组命令 然后跳出该结构 如果所有的比较结果都为假 即表达式和所有的检测值都不等 matlab将执行otherwise后面的一组命令 可见该结构保证至少有一组命令会得到执行 switch指令后面的表达式为一个标量或者一个字符串 对于标量形式的表达式 比较这样进行 表达式 检测值i 对于字符串 将调用函数strcmp来实现比较 case指令后面的检测值不仅可以是一个标量值或字符串 还可以是一个单元数组 如果一个检测值是一个单元数组 matlab将把表达式的值和该单元数组中的所有元素进行比较 如果单元数组中某个元素和表达式的值相等 就认为此次比较结果为真 当matlab检测到某个检测值和表达式相等时 将执行相应的一组命令 执行完毕 自动跳出swith结构 无需使用break指令 formonth 1 12switchmonthcase 3 4 5 season Spring case 6 7 8 season Summer case 9 10 11 season Autumn case 12 1 2 season Winter endfprintf Month d s n month season end 例 根据月份来判断季节 5 try catch结构 trycommand1 组命令1总被执行 若正确 则跳出此结构catchcommand2 仅当组命令1出现执行错误 组命令2才被执行end 说明 只有在执行组命令1出现错误后 组命令2才被执行 可调用lasterr函数查询出错原因 如果函数lasterr运行结构为一个空串 则表明命令1被成功执行了 当执行组命令2时出错 则终止该结构 例try catch结构应用 N 4 A magic 3 A为3x3矩阵tryA N A N 取A的第N行元素catchA end A end endlasterr 6 控制程序流的其他常用指令 1 v input msg v input msg s 该指令执行时 控制权交给键盘 待输入结束 按Enter键 控制权交换matlab msg是提示用的字符串 告诉用户输入什么 第一种格式用于键入数值 字符串等数据 最后v是一个数值 包括数组 或者一个字符串 第二种格式 不管键入什么 总以字符串形式赋给变量v 2 keyboard从M文件中激活键盘 遇到该命令时 将控制权交给键盘 用户可以从键盘输入各种matlab指令 仅当用户输入return指令后 控制权才交还给程序 与input指令的区别是 该指令允许输入任意多个matlab指令 而input只能输入赋给变量的值 该指令在调试M文件时非常有用 3 continue跳过位于其后的循环中的其他指令 执行循环的下一个迭代 例更改数组中的值 a ones 1 12 fork 1 12ifrem k 3 0continueelsea k k endend 4 Break终止while for循环 也可以在if end switch case try catch中导致中断 5 pause pause n 第一种格式使程序暂停执行 等待用户按任意键继续 第二种格式使程序暂停n秒后 再继续执行 8 lasterr 显示最新出错原因 并终止程序 9 lastwarn显示matlab自动给出的最新警告程序并继续运行 6 return结束return指令所在函数的执行 把控制转至主调函数或指令窗 否则 只有整个被调函数执行完毕才转出 7 error msg 显示出错信息msg 终止程序 10 warning msg 显示警告信息msg 程序继续执行 三变量的检测传递和限权使用函数 1输入输出宗量检测指令2局部变量和全局变量3子函数和私用函数 1输入输出宗量检测指令 nargin 在函数体内 用于获取实际输入宗量nargout 在函数体内 用于获取实际输出宗量nargin fun 获取 fun 指定函数的标称输入宗量nargout fun 获取 fun 指定函数的标称输出宗量inputname n 在函数体内使用 给出第n个输入宗量的实际调用变量名Varargin 输入参数Varargout 输出参数 例 参见教学示例circle 2局部变量和全局变量 1 局部变量它存在于函数空间内部的中间变量 产生于该函数的运行过程中 其影响范围也仅限于该函数本身 2 全局变量通过global指令 matlab也允许几个不同的函数空间以及基本工作空间共享同一个变量 这种共享的变量称为全局变量 每个希望共享全局变量的函数或matlab基本工作空间 必须逐个用global对具体变量加以专门定义 没采用global定义的函数或基本工作空间 将无权享用全局变量 对全局变量的定义必须在该变量被使用之前进行 建议把全局变量的定义放在函数体的首行位置 并使用大写字符命名全局变量 由于全局变量损害函数的封装性 因此不提倡使用全局变量 3子函数和私用函数 1 子函数 matlab允许一个M函数文件包含多个函数的代码 其中 第一个出现的函数称为主函数 该文件中的其他函数称为子函数 保存时所用函数文件名与主函数定义名相同 外部程序只能对主函数进行调用 子函数性质 1 每个子函数的第一行是其函数申明行2 在M函数文件内 主函数的位置是不可改变的 但子函数的排列次序可以任意变动 3 子函数只能被处于同一文件的主函数或其他子函数调用 4 在M函数文件中 任何指令通过函数名对函数进行调用时 子函数的优先级仅次于内建函数 5 同一文件的主函数 子函数的工作空间都是彼此独立的 各函数间的信息 或通过输入输出宗量 或通过全局变量传递 或通过跨空间指令传递 2 私用函数 所谓私用函数 是指位于private目录上的M文件函数 其性质如下 1 私用函数的构造与普通M函数完全相同 2 私用函数只能被private目录的直接父目录上的M文件函数所调用 它不能被其他目录上的任何M函数 M脚本文件或matlab指令窗中的命令所调用 也不能被直接父目录上的M脚本文件调用 3 M文件中 任何指令通过函数名对函数进行调用时 私用函数的优先级虽低于内建函数和子函数 但高于其他任何目录上的函数 matlab的搜索顺序总结 假设matlab在一个文件中碰到指令cow时 它将按以下步骤逐步进行检索 1 检查cow是否一个变量名 如果不是 执行下一步 2 检查cow是不是内建函数 Built inFunction 不是则执行下一步 3 检查cow是不是cow所在的M文件中的一个子函数 不是则往下执行 4 检查cow是不是它所在M文件的一个私有函数 先找cow p 然后是cow m 不是则往下执行 5 检查cow是不是当前目录下的文件 先找cow p 然后是cow m 不是则往下执行 6 检查搜索路径上是否有cow存在 先找cow p 然后是cow m matlab将使用最先找到的那个cow 如果一直找不到 就给出错误提示 四P码文件 1 语法分析过程和伪代码 一个M文件首次被调用 运行文件名或被M文件编辑器打开 时 matlab将首先对该M文件进行语法分析 Parse 并把生成的相应内部伪代码 简称P码 文件存放在内存中 此后 再次调用该M文件时 就直接调用该文件在内存中的P码文件 而不会对原码文件重复进行语法分析 matlab的分析器总是把M文件连同被它调用的所有函数M文件一起变换成P码文件的 P码文件有与原码文件相同的文件名 其扩展名为 p P码文件运行速度高于其原码文件 假如存在同名的P码和原码文件 那么当该文件名被调用时 被执行的肯定是P码文件 说明 P码文件较之原码文件有两大优点 一是运行速度快 二是它是二进制文件 程序保密性好 3 内存中P码文件的列表和清除 inmem 罗列出内存中所有P码文件名clearfunname 清除内存中的funname pP码文件clearfunctions 清除内存中的所有P码文件 如 pcodecircle circle p pcodefunname 在当前目录上生成funname ppcodefunname inplace 在funname m所在目录上生成P码文件funname p 2 P码文件的预生成 五内联函数 内联函数是matlab提供另一种是实现函数功能的对象 创建内联函数可以使用inline命令实现 inline string arg1 arg2 创建内联函数 语法 string 必须是不带赋值号 的字符串 arg1和arg2是函数的输入变量 说明 例 f inline sin x exp z x x z 创建内联函数y f 5 0 3 调用函数f 六串演算函数 matlab还提供了两种演算函数 一是串演算函数eval 它具有对字符串表达式进行计算的能力 另一种是函数句柄演算函数feval 它具有对函数句柄进行操作的能力 这两种函数为matlab提供了所谓的宏操作能力 也被广泛使用于GUI的回调操作 1 evaly1 eval CEM 执行CEM指定的计算 y1 y2 eval CEM 执行对CEM代表的函数文件调用 并输出计算结果 说明 eval指令的输入宗量必须是字符串 构成字符串的CEM 可以是任何合法的指令 表达式 语句或M文件名 第二种格式的CEM只能是M函数文件名 例计算语句串 cleart pi eval theta t 2 y sin theta 例计算合成串 CEM cos sin tan fork 1 1 3theta pi k 12 y 1 k eval CEM k num2str theta end 2 函数句柄和feval指令 引如函数句柄的理由是 使feval及借助于它的泛函指令工作更可靠 使函数调用象变量调用一样灵活方便 可迅速获得同名重载函数的位置 类型信息 可在更大范围内调用子函数和私用函数 提高软件重用性 提高函数调用速度 函数句柄并不是伴随函数文件而自动形成的文件属性 是必须通过专门的定义才会生产的 为一个函数定义句柄的方法有两种 利用 符号 或利用转换函数str2func 例为内建函数创建函数句柄 并观察其内涵 hsin sin class hsin size hsin ans function handleans 11 2 feval y1 y2 feval FH arg1 arg2 执行函数句柄FH指定的计算 feval与函数句柄配套使用 而eval与字符串配套使用 例feval的使用 1 定义M文件 add m functiontotal add a b total a b 2 通过函数句柄调用hadd add a 100 b 200 c feval hadd a b- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlabppt 第五
装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文