已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 2 6M文件及程序调试 河西学院物电系2010 01 23 2 在入门阶段 通常让MATLAB工作在行命令模式下 键入一行命令后 系统立即执行该命令 用这种方法时 程序可读性很差且难以存储 解决复杂的问题应该用命令编成可存储的程序文本 再让MATLAB执行该程序文件 这种工作模式称为程序文件模式 由MATLAB语句构成的程序文件称为 文件 它以m作为文件的扩展名 例如 文件expml m用来计算矩阵指数函数的值 因为它是ASCII文本文件 所以可以直接阅读并用任何编辑器来建立 前言 3 文件可分为两种 一种是主程序 也称为主程序文件 ScriptFile 是由用户为解决特定的问题而编制的 另一种是子程序 也称为函数文件 FunctionFile 它必须由其他M文件来调用 函数文件往往具有一定的通用性 并且可以进行递归调用 即自己可以调用自己 MATLAB的基础部分中已有了近800个函数文件 它的工具箱中还有千余个函数文件 并在不断扩充积累 MATLAB软件的大部分功能都是来自其建立的函数集 利用这些函数可以使用户方便地解决他们的特定问题 4 2 6 1主程序文件 主程序文件的格式特征如下 1 用clear closeall等语句开始 清除掉工作空间中原有的变量和图形 以避免其他已执行的程序残留数据对本程序的影响 前几行通常是对此程序用途的说明 特别是在运行时对用户输入数据的要求 更要叙述清楚 不然别人就看不懂也用不成 连自己日后也会遗忘 这些注释行必须以 开始 以便计算机执行时不予理会 MATLAB规定 在键入help 文件名 时 屏幕上会将该文件中以 起头的最前面各行内容显示出来 使用户知道如何使用 这些注释是可以用汉字的 也可以放在程序行的后面 MATLAB将不执行该字符后的任何内容 5 2 6 1主程序文件 2 以下是程序的主体 如果文件中有全局变量 即在子程序中与主程序共用的变量 应在程序的起始部分注明 其语句是Global变量名1变量名2 为了改善可读性 要注意流程控制语句的缩进及与end的对应关系 另外 程序中必须都用半角英文字母和符号 只有引号括出的和 后的内容可用汉字 特别要注意英文和汉字的有些标点符号 如句号 冒号 逗号 分号 引号乃至 等 看起来很相似 其实代码不同 用错了 不但程序执行不通 而且几乎必定死机 因此键入程序时 最好从头到尾用英文 不要插入汉字 汉字可在程序调试完毕后加入 用MATLAB的编辑器比较好 因为它对出现的非法字符会显示出特殊的颜色 引起用户的注意 并且在它的菜单项 Text 下 选 SmartIndent 项可以自动对程序进行缩进排版 6 2 6 1主程序文件 3 整个程序应按MATLAB标识符的要求起文件名 并加上后缀m 文件名长度不要超过八个字符 不允许用汉字 因为这个文件名也就是MATLAB的调用命令 它是不认汉字的 将文件存入自己确定的子目录中 该子目录应置于MATLAB的搜索路径下 完成程序编制 并在MATLAB的命令窗中键入此程序的文件名后 系统就开始执行文件中的程序 主程序文件中的语句将对工作空间中的所有数据进行运算操作 7 2 6 1主程序文件 例2 6 1 要求列写一个求Fibonnaci数的程序 它是一个数列 从 1 1 开始 由数列的最后两个元素之和生成新的元素 依次递推 其程序如下 计算Fibonnaci数的M文件clear closeallN input 输入最大数值范围N f 1 1 i 1 变量的初始化whilef i f i 1 f plot f 显示和绘图 Fibonacci数是数列f1 f2 f3 的元素 这里f1 f2 1 且若n是正整数 8 2 6 1主程序文件 将此程序以文件名fibon m存入某一MATLAB搜索目录下 在MATLAB命令窗中键入fibon 系统就开始执行这个程序 它首先会要求用户输入N 然后计算数值小于N的Fibonnaci数 并绘出图线 设输入N 100 得出 图线略 f 1123581321345589 9 2 6 1主程序文件 打开一个新的文本编辑窗 在此写程序 即可保存 调用 键入保存的文件名 即可调用该程序 该文件执行结束 变量 和 仍保存在工作空间中 10 2 6 1主程序文件 11 2 6 1主程序文件 例2 6 2 列出求素数的程序 所谓素数就是只能被它自身和1整除的数 程序如下 求素数 primenumber 的程序clear closeallN input N x 2 N 列出从2到N的全部自然数foru 2 sqrt N 依次列出除数 最大到N的平方根 n find rem x u 0 x u 找能被u整除而不等于u的数序号x n 剔除该数end x 循环结束 显示结果以prime m为名存入系统 就可以执行了 给出N 40 结果为x 23571113171923293137 12 2 6 1主程序文件 建立M文件clcClearcloseallN input N x 2 N foru 2 sqrt N n find rem x u 0end x以prime m为名存入系统 就可以执行了 给出N 40 结果为 给出N 40 结果为 13 2 6 2人机交互命令 在执行主程序文件时 往往还希望在适当的地方对程序的运行进行观察或干预 这时就需要人机交互的命令 调试程序时 人机交互命令更不可少 下面介绍几条人机交互命令 见表2 13 14 2 6 2人机交互命令 15 2 6 2人机交互命令 echoon off 一般情况下 文件中的命令不会显示在屏幕上 而在命令echoon之后 会在执行每行程序前先显示其内容 pause n 程序执行到此处 暂停n秒 再继续执行 如果没有括号参数 则等待用户键入任意键后才继续执行 keyboard 程序执行到此处暂停 在屏幕上显示字符K 并把程序的输入和执行权交给用户 键盘 用户可以像在普通MATLAB命令窗中那样进行任何操作 例如检查中间结果等 如果需要系统恢复运行原来的程序 只需键入字符串return 在 文件中设置该命令 有利于进行程序调试以及临时修改变量内容 16 2 6 2人机交互命令 input 提示文字 程序执行到此处暂停 在屏幕上显示引号中的提示字符串 要求用户输入数据 如程序为X input X 则屏幕上显示 X 输入的数据将赋值给X 数据输入后 程序继续运行 input命令也可以接受字符 其格式为Y input 提示文字 s 此时Y将等于输入的字符串 C 强行停止程序运行的命令 C读作 Control C 即先按下Ctrl键 不抬起再按C键 在发现程序运行有错或运行时间太长时 可用此方法中途终止它 menu 是用来产生人机交互备选菜单的命令 参阅help文件 uimenu uicontrol 这些是用来产生人机交互面板按钮的命令 参阅help文件 后面两条命令是在编制较复杂的程序的图形界面时使用的 无法用三言两语说明 读者可在用到时再去查阅有关资料 17 2 6 2人机交互命令 键入echoon再调用prime 会在执行每行程序前先显示其内容 键入echooff 则不再显示 18 2 6 2人机交互命令 键入keyboard程序执行到此处暂停 在屏幕上显示字符K 并把程序的输入和执行权交给用户 键盘 我们可以像在普通MATLAB命令窗中那样进行任何操作 例如检查中间结果等 如果需要系统恢复运行原来的程序 只需键入字符串return 在 文件中设置该命令 有利于进行程序调试以及临时修改变量内容 19 2 6 2人机交互命令 input命令也可以接受字符 其格式为Y input 提示文字 s 此时Y将等于输入的字符串 20 2 6 2人机交互命令 键入K menu Chooseacolor Red Blue Green 回车 产生一一菜单 点击其中一个按钮 比如点击blue 则显示如下 21 2 6 2人机交互命令 uimenu功能生成图形窗口的菜单中的层次的菜单与下一级子菜单 即增加新的菜单于已经存在的菜单后面 当一菜单项被选中时 该菜单项与它的下一级菜单也将显示 也可用该命令生成与组件相关的菜单 用法handle uimenu PropertyName PropertyValue 在当前图形窗口菜单条上用指定的属性PropertyName与相应的属性值PropertyValue创建一菜单 同时将该菜单的句柄赋给handle 其中两个输入参量可以是结构数组或者是单元数组 用户界面菜单的回调函数属性定义了当用户激活菜单项时 进行的响应操作 uimenu PropertyName PropertyValue 效果同上 但不返回句柄值 handle uimenu parent PropertyName PropertyValue 生成一父菜单的子菜单 或者是生成由parent指定的相关菜单中的菜单项目 若parent不是另外的用户界面菜单对象或用户界面相关菜单对象 而是一图形窗口 则系统将生成该图形窗口菜单条上的新的菜单 同时将生成的菜单赋值给句柄handle uimenu parent PropertyName PropertyValue 效果同上 但不返回菜单的句柄 22 2 6 2人机交互命令 键入uicontrol Style edit String hello createsuicontrolspecifiedinanewfigure 23 2 6 3函数文件 函数文件是用来定义子程序的 它与程序文件的主要区别有三点 1 由function起头 后跟的函数名必须与文件名相同 2 有输入输出变量 可进行变量传递 3 除非用global声明 程序中的变量均为局部变量 运行后不保存在工作空间中 24 2 6 3函数文件 先看一个简单的函数文件 其文件名为mean m 键入typemean后 屏幕将显示元件的内容 functiony mean x MEAN求平均值 对于向量 mean x 返回该向量x中各元素的平均值 对于矩阵 mean x 是一个包含各列元素平均值的行向量 m n size x ifm 1M n end 处理单行向量y sum x m文件的第一条语句定义了函数名 输入变元以及输出变元 没有这条语句 该文件就成为程序文件 而不再是函数文件了 输入变元和输出变元都可以有若干个 但必须在第一条语句中明确地列出 25 2 6 3函数文件 程序中的前几条带 的字符行为文件提供注解 键入helpmean命令后 系统将显示这几条文字 作为对文件mean m的说明 这和主程序文件相同 变量 和 都是函数mean的局部变量 当mean m文件执行完毕 这些变量值会自动消失 不保存在工作空间中 如果在该文件执行前 工作空间中已经有同名的变量 系统会把两者看做各自无关的变量 不会混淆 这样 调用子程序时就不必考虑其中的变量与程序变量冲突的问题了 如果我们希望把两者看成同一变量 则必须在主程序和子程序中都加入global语句 对此共同变量作出声明 给输入变元x赋值时 应把x代换成主程序中的已知变量 假如它是一个已知向量或矩阵Z 可写成mean Z 该变量Z通过变元替换传递给mean函数后 在子程序内 它就变成了局部变量x 26 2 6 3函数文件 保存名字默认为mean1 m 以免和系统自带程序混淆 27 2 6 3函数文件 键入输入数据 即可显示输出结果 改变输入变量 可以得到相对应的输出结果 此时的x是形式变量 可以用其他字母代替 不影响结果 28 2 6 3函数文件 键入helpmean1以及typemean1后显示如图所示 指的是当前工作目录下的所保存的数据 29 2 6 3函数文件 键入helpmean以及typemean后显示如图所示 指的是系统自带程序 还可以openmean m打开MATLAB自带程序 30 2 6 3函数文件 下面的例子是多输入变量函数logspace 用于生成等比分割的数组 functiony logspace d1 d2 n logspace对数均分数组 logspace d1 d2 在10 d1与10 d2之间生成长度为50的对数均分数组 如果d2为pi 则这些点在10 d1和pi之间 logspace d1 d2 n 生成的数组长度为n n的缺省值为50ifnargin 2n 50 end 输入变元分析及n的缺省值设置ifd2 pid2 log10 pi end d2为pi时的设置y 10 d1 0 n 1 d2 d1 n 1 将结果返回到输出变元 一般来说logspace y1 y2 N 表示在10 y1和10 y2之间插入N 2个数 如果N 2 则返回值为10 y2 31 2 6 3函数文件 在本例中使用了特定变量nargin表示输入变元的数目 当只有两个输入变元时 它默认n 50 nargout是表示输出变元数目的变量 MATLAB常常根据nargin和nargout的数目不同而调用不同的程序段 从而体现它的智能作用 32 2 6 3函数文件 M函数文件logspace m 33 2 6 3函数文件 调用logspace m文件 同样文件中的d1 d2 n也是形式变量 且n的默认值为50 及50可写可不写 但是一定不能在不定义n的具体值的情况直接写作n N也为除50以外的数 34 2 6 3函数文件 再来看MATLAB是如何定义一个任意非线性函数的 在对微分方程作数值积分或解任意非线性方程求解时 都需要先列出一个这样的函数文件 一个典型程序如下 functiony humps x humps是由QUADDEMO ZERODEMO和FPLOTDEMO等程序调用的一个函数 humps X 是一个在x 0 3和x 0 9附近有尖锐极大值的函数 参看QUADDEMO ZERODEMO和FPLOTDEMOy 1 x 3 2 01 1 x 9 2 04 6 程序中的运算都采用元素群算法 以保证此函数可按元素群调用 MATLAB中几乎所有的函数都能用元素群运算 所以我们自编的子程序 也要尽量满足元素群算法的要求 35 2 6 3函数文件 保存logspace m文件 36 2 6 3函数文件 调用logspace m文件 37 2 6 4内联函数和匿名函数 用上节介绍的方法来定义函数 必须在主程序之外重新建立一个函数文件 这不大方便 MATLAB还提供了一种简便的 直接在主程序文件中定义函数的方法 称为内联函数 它的调用格式为fun inline 函数内容 自变量列表 其中 函数内容 需要填写函数的具体语句 即与函数文件中的核心语句完全一样 自变量列表类似于function格式下的输入变元 不过每个自变量必须用单引号括起来 例如f x y x 3 x y 2就可以用f inline x 3 x y 2 x y 来直接定义 不过这样的格式只能用来定义比较简单的 用一条语句就能求出结果的函数形式 38 2 6 4内联函数和匿名函数 键入f inline x 3 x y 2 x y 39 2 6 4内联函数和匿名函数 匿名函数是MA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 面点师食材预处理与精细化加工手册
- 住院医师规范化培训《中医骨伤科》题库+答案
- 2026年安康杯自查报告(2篇)
- 业务结果风险承诺制度
- 中国高校财务制度
- 中铁十六局财务制度规范
- 乡镇医院护士考核制度
- 交通运输信用监督制度
- 仓储部员工考核制度
- 企业学习考核制度细则
- 2026浙江台州市椒江区科技事业中心招聘编制外工作人员1人备考题库附答案详解(a卷)
- 2026国家电投集团二级单位总会计师选聘笔试历年参考题库附带答案详解
- 株洲市2026事业单位联考-综合应用能力A类综合管理模拟卷(含答案)
- 任务7.1 智能饲喂控制系统的PLC控制
- 2026中国太平洋人寿保险股份有限公司校园招聘考试参考题库及答案解析
- 2026湖南益阳市中心医院人才引进67人考试参考试题及答案解析
- 2026春季新人教版历史八年级下册全册教案11新版
- 成都兴蓉环境股份有限公司笔试题
- 排水沟施工方案
- 基本公共卫生知识考试题库及答案
- 清淤工程施工记录表
评论
0/150
提交评论