MATLAB程序设计基础与程序调试和优化.ppt

上传人:sh****n 文档编号:6379407 上传时间:2020-02-24 格式:PPT 页数:41 大小:631.05KB
返回 下载 相关 举报
MATLAB程序设计基础与程序调试和优化.ppt_第1页
第1页 / 共41页
MATLAB程序设计基础与程序调试和优化.ppt_第2页
第2页 / 共41页
MATLAB程序设计基础与程序调试和优化.ppt_第3页
第3页 / 共41页
点击查看更多>>
资源描述
2020 2 24 1 MATLAB程序设计基础 2020 2 24 2 主要内容 MatLab基本程序设计注意事项MATLAB程序的基本组成部分工作环境的设定MatLab的基本语法 2020 2 24 3 MatLab基本程序设计注意事项 设置完整的路径 最好把当前的处理位置设定为CurrentDirectory 若在每行程序的最后输入分号 则执行程序行结果不会显示在屏幕上 否则 执行程序行的结果会显示在屏幕上 符号 后面的内容是程序的注解 不作为命令运行 遇到不明白的命令 多使用在线帮助命令或系统演示示例 多动脑筋找原因 这本身也是一种能力培养 程序尽量模块化 也就是采用主程序调用子程序的方法 将所有子程序统一用主程序调用执行全部的操作 注意变量的定义 留意各种命令的书写格式 Matlab中是大小写敏感的 2020 2 24 4 MATLAB程序的基本组成部分 说明部分 或称之为注释部分 清除命令 可选 定义变量 局部变量和全局变量 按照顺序行执行的命令语句控制语句开始控制语句体 控制语句结束其他命令 如绘图等 2020 2 24 5 工作环境的设定 路径设置有两种方法 1 在命令窗口下使用cd命令 直接更改工作路径 2 在菜单中选择 File SetPath 就会出现 SetPath 窗口 然后进行设置设置路径的原因 对于用户程序中使用的文件名和变量名 系统按照以下顺序搜索 1 查找对象是否是工作空间的变量 2 查找对象是否是系统的内部函数 3 查找对象是否是在系统的当前目录下 2020 2 24 6 MatLab的基本语法 数据类型常量和变量程序运算符程序控制语句M文件 2020 2 24 7 MatLab的基本语法 数据类型 1 MatLab6 5共有7种基本的数据类型以及若干衍生类型 汇总如下图所示 2020 2 24 8 MatLab的基本语法 数据类型 2 各种主要数据类型的特征和用途 2020 2 24 9 MatLab的基本语法 常量和变量 MatLab中的常量 类似于c语言中的整型常量和实型常量 常量的表方法一般采用十进制数来表示 可以带正负号和小数点 当然也可采用科学记数法 如1 25 0 0033 2e 7 pi 2十3i等都是MATLAB的合法常量 这里的2十3i是复数常量 它是由实数与虚数单位i组成MATLAB中的变量 一般无需事先定义 一个程序中的变量以其名称在操作语句第一次合法出现而定义 如果这个变量已经存在 那么MATLAB将改变它的内容 如a 2 5定义了一个变量a 并给它赋值2 5 如果再输入a 3 那么变量a的值就变为3 2020 2 24 10 MatLab的基本语法 常量和变量 2 MATLAB中的变量命名应该遵循以下规则 变量名必须以字母开头 后面可以是任意的字母 数字或下划线 MATLAB变量名有效的最大长度是31 MLAB的变量要区分大小写 如 MY NAME My name my name分别表示不同的变量 MatLab自身带有一些具有特殊含义的变量和常量 用户在使用时不能对这些量进行变更 例如 pi表示圆周率 inf表示数学中的正无穷大等 2020 2 24 11 MatLab的基本语法 程序运算符 MATLAB的运算符可分为三类 算术运算符关系运算符逻辑运算符 2020 2 24 12 MatLab的基本语法 程序运算符 算术运算符 除左除以外 其余与c语言符号是一致的 加法 减法 乘法 除法 左除 主要用于矩阵除法 乘方 执行时的优先法则按照以下规则 1 表达式从左到右执行 2 乘方运算具有最高的优先级 3 乘法和除法运算具有相同的次优先级 加法和减法具有相同的最低优先级 4 括号可以改变优先次序 由最内层的括号向外执行 2020 2 24 13 MatLab的基本语法 程序运算符 关系运算符关系运算符对于程序流程控制非常有用 在MATLAB的循环和条件控制中经常使用 MATLAB共有6个关系运算符 小于大于等于 等于 不等于 注意 MATLAB中所有关系运算符连接的两个操作数或者同维 同大小 或者其中一个为标量 有一个操作数是标量时 关系运算符把标量和另一个操作数的每个元素进行比较 对大小相同的两个矩阵 进行关系运算时 相应的每一个元素进行比较 如果能够满足指定的关系 返回1 否则返回0 2020 2 24 14 MatLab的基本语法 程序运算符 逻辑运算符MATLAB里共有4个逻辑运算符 与 或 非 逻辑异或XOR注意 和关系运算符一样 除了逻辑运算符的一个操作数为矩阵或向量时 另一个操作数可为标量 其余情况下均要求矩阵同维 逻辑运算符也是对操作数的相应元素一一运算 最后返回一个0 1矩阵 当逻辑表达式的值为真时 返回1 否则返回0 2020 2 24 15 MatLab的基本语法 程序控制语句 MATLAB控制语句主要有以下几类 for循环结构While循环结构if else end分支结构switch case分支结构 2020 2 24 16 MatLab的基本语法 程序控制语句 for循环结构for循环语句通常用来执行循环次数已知的情况 它可以按照用户指定的次数来执行循环体中的内容 调用格式 forx 初值 步长 终值循环体end注意 变量x通常称为循环变量 初值 终值和步长可以是标量 也可以是表达式 当循环语句开始执行时 变量x的值被赋为和初值相同的内容 每执行一次循环体中的内容 变量x的值就会按照步长的大小来改变 如果步长是一个正数 那么变量x的值增加一个步长 如果步长是一个负数 那么变量的值就减小一个步长 在步长为正的情况下 如果变量的值小于终值 就将继续执行循环体中的内容 当步长为负时 如果变量的值大于终值 也将继续执行循环体中的内容 如此循环 直到变量的值大于或者小于终值的内容 这个for语句循环就结束 而继续执行end语句下面的命令 语句中的步长可以省略不写 在这种情况下 默认的步长值为1 for循环语句允许嵌套 每一个 for 关键字必须和一个 end 配对 2020 2 24 17 MatLab的基本语法 程序控制语句 While循环结构while语句根据一个控制表达式的值来确定程序的运行方式 常用于事先不能确定循环次数的情况 调用格式 while表达式循环体end当表达式中的值为真时 执行循环体 当循环体执行完毕后 继续判断表达式的值 如果仍为真 那么继续执行循环体 如此循环 直到表达式的值为假时终止循环 当表达式的值是一个矩阵 且矩阵中所有元素都不为零时 才执行循环体中的内容 如果表达式A是一个空矩阵 那么循环体中的内容永远不会被执行 另外 要想在任何时候终止循环 for或while循环 可利用break语句 终止循环后继续执行end语句下面的语句 2020 2 24 18 MatLab的基本语法 程序控制语句 if else end分支结构if语句是一种条件选择结构语句 它根据不同逻辑表达式的值来判断程序在执行过程中需要执行哪些语句 调用格式 if逻辑表达式命令语句体end在程序执行该语句的过程中 首先判断逻辑表达式的值 如果逻辑表达式的值为真 那么程序就会执行命令语句体的所有语句 如果逻辑表达式的值为假 那么就跳过命令语句体 继续执行end语句之后的语句 2020 2 24 19 MatLab的基本语法 程序控制语句 switch case分支结构switch语句可以根据一个变量或表达式的值执行特定的语句 调用格式 switch表达式0case表达式l的值命令行lcase表达式2的值命令行2 otherwise命令行nend 先计算switch后面表达式0的值 然后检查case语句后面的值是否与表达式0的值相等 如表达式1的值与之相等 则执行命令行1 否则继续检查第二个case子句 以此类推 如果所有case子句的值均不等于表达式0的值 则执行othewise语句后面的命令行n 和c语言不同的是 在switch结构中 如果一个case条件满足 那么在执行完这个case语句中的语句体之后 就会立接去执行end语句后面的语句而不并判断其他case语句的情况 2020 2 24 20 MatLab的基本语法 M文件 引入M文件的原因 对于比较简单的问题和一次性问题 通过指令窗中直接输入一组指令去求解 也许是比较简便 快捷的 但当待解决问题所需的指令较多和所用指令结构较复杂时 或当一组指令通过改变少量参数就可以被反复使用去解决不同问题时 直接在指令窗中输入指令的方法就显得烦琐 为了代替在MATLAB提示符下输入的多条MATLAB命令语句 可以把这些命令写入一个文本文件 这个文本文件可用一个编辑器创建 每当用户输入这个文件名以及它的自变量时 这些命令就由MATLAB执行 当文件中最后一个命令被执行时 MATLAB能再从指令窗口读取命令 这样的文件就叫做M文件 2020 2 24 21 MatLab的基本语法 M文件类型 M文件的类型 脚本 Script 文件 教材中也称之为命令文件函数 Function 文件这两种文件均以 m 为后缀 2020 2 24 22 MatLab的基本语法 脚本M文件 脚本 Script 文件 命令文件 脚本文件的主要用途是使命令输入更加简单化 如果用户需要重复输入许多命令 即可将这些命令放在一个脚本文件里 脚本文件没有输入参数和输出参数 可以说 脚本文件只不过是将用户在MATLAB的命令行窗口中输入的一串命令用另外一个名称代替而己 并且脚本文件的运行结果每次都是相同的 特点如下 该文件中的指令形式和前后位置 与解决同一个问题时在指令窗中输入的那组指令没有任何区别 MATLAB在运行这个脚本时 只是简单地从文件中读取一条条指令 送到MATLAB中执行 与在指令窗中直接运行指令一样 脚本文件运行产生的变量都是驻留在MATLAB基本工作空间中 2020 2 24 23 MatLab的基本语法 函数M文件 函数 Function 文件 函数文件的主要用途是用来扩充MATLAB的应用范围和满足用户不同的实际应用需求 函数文件可以接受输入变量 也可以返回输出变量 除了输入变量和输出变量以外 在函数文件内部的其他变量通常为该函数文件的局部变量 并不会出现在MATLAB的工作空间内 而能够保留在MATLAB的工作空间内的变量只有该函数文件的输入和输出变量 也就是说 函数文件对于变量的运算是在函数本身的工作空间内进行的 它和MATLAB的命令窗口中的工作空间是相互独立的 MATLAB对函数文件的处理与对脚本文件的处理不同 函数文件对外只表现其输入参数和输出结果 内部的运作对外是封闭的 利用这个特性 容易实现编程的模块化 函数文件的具体特点如下 从形式上看 与脚本文件不同 函数文件的第一行总是以 function 引导的 函数申明行 从运行上看 与脚本文件运行不同 每当函数文件运行 MATLAB就会专门为它开辟一个临时工作空间 称之为函数工作空间 functionworkspace 所有中间变量都存放在函数工作空间中 当执行完文件最后一条指令或遇到return时 就结束该函数文件的运行 同时该临时函数空间及其所有的中间变量就立即被清除 函数空间随具体M函数文件的被调用而产生 随调用结束而删除 函数空间相对基本空间是独立的 临时的 在MATLAB整个运行期间 可以产生任意多个临时函数空间 假如在函数文件中 发生对某脚本文件的调用 那么该脚本文件运行产生的所有变量都存放于该函数空间之中 而不是存放在基本空间 2020 2 24 24 MatLab的基本语法 M文件编辑调试器 M文件编辑调试器 Editor Debugger 简介M文件也只是一个普通的文本文件 因此可以利用任何的文本编辑器来建立 编辑和修改 只要使文件的后缀为 m 即可 除了可以利用自己所喜爱的文本编辑器以外 MATLAB还提供了一个内置的编辑器 这是一个集编辑与调试两种功能于一体的工具环境 利用它不仅可以完成基本的文本编辑操作 还可以对M文件进行调试 2020 2 24 25 MatLab的基本语法 M文件编辑调试器的启动 启动M文件编辑调试器的方法 有三种操作方法 直接在MATLAB命令窗口运行命令edit 单击MATLAB桌面窗口工具栏上的新建图标从MATLAB桌面窗口中选择菜单 File New M file 2020 2 24 26 MatLab的基本语法 打开M文件的方法 打开已有M文件的三种操作方法 直接在MATLAB命令窗口运行命令editfilenam filename是待打开的文件名 可不带扩展名 单击MATLAB工具栏上的打开图标 再从弹出对话框中选择要打开的文件 单击MATLA菜单 File open 子菜单 再从弹出对话框中选择需打开的文件 2020 2 24 27 MatLab的基本语法 M文件的调试 编辑或修改好的文件经保存后即可单击 Debug 项中的 Run 进行运行 或者在命令窗口中直接输入此M文件的名称 就可观察到运行结果 如果有错误 则在命令窗口中给出相应的提示 可根据出错提示找到错误的地方进行修改 2020 2 24 28 MatLab的基本语法 M文件的一般结构 由于从结构上看 脚本文件只是比函数文件少一个 函数申明行 所以只须描绘清楚函数文件的结构 脚本文件的结构也就无须多费笔墨了 典型M函数文件的结构如下 1 函数申明行 functiondeclarationline 位于函数文件的首行 以MATLAB关键字function开头 函数名以及函数的输入输出宗量都在这一行定义 2 H1行 Thefirsthelptextline 紧随函数申明行之后以 开头的第一注释行 按MATLAB自身文件的规则 Hl行包含 大写体的函数文件名 运用关键词简要描述的函数功能 该H1行供lookfor关键词查询和help在线帮助使用 3 在线帮助文本 Helptext 区 Hl行及其之后的连续以 开头的所有注释行构成整个在线帮助文本 它通常包括 函数输入输出宗量的含义 调用格式说明 4 编写和修改记录 与在线帮助文本区相隔一个 空 行 也以 开头 标志编写及修改该M文件的作者和日期 版本记录 它用于软件档案管理 5 函数体 Functionbody 为清晰起见 它与前面的注释以 空 行相隔 这部分内容由实现该M函数文件功能的MATLAB指令组成 它接收输入宗量 进行程序流控制 得到输出宗量 其中为阅读 理解方便 也配置适当的空行和注释 若仅从运算角度看 惟有 函数申明行 和 函数体 两部分是构成M函数文件所必不可少的 2020 2 24 29 M文件的命名 不能用数字作为文件名 不能用和Matlab特有变量名相同的名称 不能和已在workspace中的变量或常量同名 2020 2 24 30 MatLab程序调试和代码优化 MatLab编程技巧 2020 2 24 31 MatLab程序的常见错误 编写M文件时 常见的错误有两种 语法错误和运行错误 语法错误 指变量名 函数名的误写 标点符号的缺漏等 这类错误Matlab能在运行前发现给出提示 包括相应的错误原因和所在位置 并终止运行 运行错误 指算法本身引起的 发生在运行过程中的错误 相对语法错误 动态的运行错误较难查找和处理 2020 2 24 32 运行错误难以查找和处理的原因 运行错误来源多元化 如来源于算法模型和期望目标是否一致 程序模型和算法是否一致 涉及用户对期望目标原理的理解 对算法的理解 还涉及用户对Matlab指令的理解 对程序流的理解 及对Matlab工作原理的理解 运行错误的表现形式多样化 程序正常运行但结果不对 程序运行不正常而中断等 运行错误是动态错误 尤其是M函数文件 它一旦停止运行 其中间变量被删除一空 错误很难查找 另外有些情况下结果正常 有些情况下结果不正确 程序的运行错误必须借助程序调试技术才能解决 2020 2 24 33 MatLab程序调试方法 直接调试法利用调试器 2020 2 24 34 直接调试法 由于MatLab语言可读性强 对于较简单的程序直接调试法比较有效 直接调试一般包括以下几个方面 检查所调用的函数或要载入的数据文件是否在当前目录或搜索路径上 将重点怀疑的语句行 指令行后的 去掉 使计算结果能显示在主命令窗口 在适当的位置加入显示某些关键变量值的语句 如用disp 利用echo指令 使运行时 在屏幕上逐行显示文件内容 echoon能显示M脚本文件 echoFunNameon能显示名为FunName的M函数文件 在程序适当位置加入keyboard指令 Matlab运行到这一指令时 会暂停执行 并在MatLab指令窗口中出现K提示符 此时用户可以输入指令查看各种变量的值 也可修改变量的值 输入回车后结束查看 原文件继续运行 2020 2 24 35 调试器的使用 MatLab的调试器和M文件编辑器集成一体 断点设置或清除dbstop dbclear 清除全部断点 dbclearall 单步执行dbstep 深入被调函数 dbstepin 跳出被调函数 dbstepout 连续执行 dbcont 结束调试 dbquit 2020 2 24 36 调试器应用过程 根据要求编程 完成后自查是否有明显错误 初次运行程序 是否有错误提示 如果有 根据提示修改程序 如果没有 看结果是否正确 如果正确 恭喜 如果不正确 进行调试 首先找出可能出问题的代码段 设置断点 运行程序至断点处 观察相关变量的结果 分析是否正确 观察中间结果的方法有两种 1 变量值的鼠标观察法 2 指令窗观察法 修改程序 重新运行 2020 2 24 37 M文件编程举例 例一 用M文件编程实现从键盘逐个输入数据 input 然后判断输入的数是大于0还是小于0 并输出提示 使用disp函数 是正数 positiveone 还是负数 negativeone 同时记录输入的正数 负数的个数 当输入0时 终止此文件运行 当输入第10个数字时 显示记录的正数 负数个数并终止程序 解决步骤 1 新建一个M文件 2 编写代码 3 保存 再调试运行 2020 2 24 38 例题2 将例一采用函数M文件实现 要求可以让用户指定终止程序的输入个数 functionfunctionname n 说明部分函数体 2020 2 24 39 MatLab程序的性能优化 背景 MatLab采用解释执行编程语言 具有编程简单 使用方便等一系列优点 但运行速度慢是其主要缺点 如何是MatLab具有和C Fortran相当的运算速度 一直是MathWorks公司追求的目标 MatLab6 5和以前版本的根本区别之一就是开始启用JIT JustInTime 和加速器 Accelerator 从而使MatLab程序的运行速度可以和C Fortran比肩 2020 2 24 40 优化程序的步骤 找出耗时最多的程序 瓶颈 用更好的程序取代 瓶颈 程序 主要讨论加快程序运行速度的措施 2020 2 24 41 提高MatLab运行速度的有效措施 循环的向量化循环k 0 fort 0 pi 20 2 pi k k 1 y k cos t end应换成t 0 pi 20 2 pi y cos t 尽可能采用MatLab提供的函数命令循环内数组的预配置避免在循环体内频繁的动态配置数据 采用MEX文件执行循环尽量采用M函数文件替代M脚本文件尽量使用saveload指令实施数据的保存和获取
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!