第16章matlab程序调试、优化和出错处理_第1页
第16章matlab程序调试、优化和出错处理_第2页
第16章matlab程序调试、优化和出错处理_第3页
第16章matlab程序调试、优化和出错处理_第4页
第16章matlab程序调试、优化和出错处理_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、技术凝聚实力技术凝聚实力 专业创新出版专业创新出版 第16章 程序调试、优化和出错处理 l程序调试的重要性毋庸置疑,有时调试工作所占用的时间甚至远超 过程序设计、代码编写所用时间。MATLAB的程序调试功能强大,较 之于VS、BC等更加简洁、方便,具有更好的所见即所得特性,这些 内容将在第16.1节作详细介绍。 lMATLAB程序是能够完成指定功能的代码集合,完成指定的功能当然 是程序的重要目标之一,但往往还不是最重要的目标。在资源(时 间、内存及其他相关设备资源)有限的条件下,决定程序质量好坏 的标准往往是程序的性能,当然还包括程序界面等。程序的性能指 标主要是指完成指定功能所需的时间和内存

2、。第16.2节中给出了一 些MATLAB程序优化应该遵循的原则及要注意的事项,这些都可以在 某种程度上提高MATLAB程序性能。另外本节还介绍了MATLAB的性能 分析工具,利用该工具可以更客观地度量程序的性能。 技术凝聚实力技术凝聚实力 专业创新出版专业创新出版 16.1 调试 lMATLAB是一种边解释边执行的程序语言,这为程序的调 试提供了众多的便利,尤其要强调的是其良好的所见即 所得特性,更是VS、Eclipse等所不能比拟的。除了内 置的一系列调试函数之外,MATLAB还提供了专门的 MATLAB调试器(即M文件编辑器),通过该调试器、结 合调试函数,用户可以完成大部分的调试工作。

3、l本节首先介绍调试的基本任务,接着详细讨论调试函数、 MATLAB调试器及其相关的调试技术,最后对MATLAB中的 错误和警告及其相关的调试技术进行了简要介绍,它们 在第16.3节出错处理中有重要应用。 技术凝聚实力技术凝聚实力 专业创新出版专业创新出版 16.1.1 调试的基本任务 l程序调试的概念源于英文术语“Debug”,意为找到、去除程序中的“bug”(bug 可以简单地理解为错误)。对大部分程序,可能存在的bug可以大致分为如下三类。 语法错误 l逻辑错误 l异常 l语法错误是由于程序员疏忽等原因而造成代码违背程序语言规则,这是初学者经常 犯的一类错误。一般地,编译器能够找到大部分的

4、语法错误,MATLAB编译器更是如 此,在某种程度上这是由于MATLAB语言较C+、Java等语法相对简单的缘故。 l逻辑错误主要是由于程序员对问题求解的程序流程或程序语言本身特性认识有误差 而造成程序执行结果(包括中间结果)出现错误。一般来说,编译器对这类错误无 能为力,MATLAB编译器也不例外。逻辑错误也是大部分程序调试的主要工作。 技术凝聚实力技术凝聚实力 专业创新出版专业创新出版 16.1.2 调试函数 lMATLAB内置了一系列的调试函数,用于程序执行过程相关的显示、执行中 断、断点设置、单步执行操作等。通过在MATLAB命令窗口输入以下指令: l help debug l用户可以

5、查询到这些调试函数,它们均以db开头, Debug函数及其说明 函 数 名功 能 dbstop设置断点 dbclear清除断点 dbcont重新执行 dbdown变更本地工作空间上下文 dbmex使MEX文件调试有效 dbstack列出函数调用关系 dbstatus列出所有断点 dbstep单步或多步执行 dbtype列印M文件(包括行号) dbup变更本地工作空间上下文 dbquit退出调试模式 技术凝聚实力技术凝聚实力 专业创新出版专业创新出版 16.1.3 MATLAB调试器 l但前面利用MATLAB调试函数对MATLAB程序进行调试还有一些不足之处: l不够简便,需要输入过多的调试代码

6、; 不够直观; 对具有多重函数调用的大 型程序不使适用。 l用户也许希望拥有像VS类似的、具有图形用户界面的调试器,为此MATLAB提供了专 门的MATLAB程序调试器,该调试器很好集成在M文件编辑器之中,具有良好的所见 即所得特性,操作控制简单方便,功能强大,下面将为用户详细介绍其特性及使用 方法。MATLAB调试器集成在文件编辑器的调试工具栏,包括7个调试按钮和一个空 间堆栈下拉框, 技术凝聚实力技术凝聚实力 专业创新出版专业创新出版 16.1.4 警告和错误 lMATLAB程序在执行过程中若遇到语法错误或异常,则会抛出错误或 警告。错误和警告信息中包含了错误和警告发生的代码行行号,由 此

7、可以迅速地找到MATLAB程序中的语法错误或异常,下面通过一个 简单的例子说明警告、错误相关的除错技术。 技术凝聚实力技术凝聚实力 专业创新出版专业创新出版 16.2 性能优化 l广义上来说,程序性能的范畴不仅包括程序的时间效率 (即执行效率)和空间效率(主要指内存使用效率), 还涉及程序的稳定性、可靠性、适应性等多种指标。但 本节仅讨论狭义的程序性能,即程序的执行效率和内存 使用效率,及相关的性能优化技术。 l从理论上分析程序的性能不是本节所要讨论的内容,这 里首先介绍MATLAB的程序性能分析工具Profiler,用以 衡量程序的性能,并在后续的内容中验证相关性能优化 技术的效果;随后的两

8、节分别讨论执行效率优化和内存 优化相关的技术。 技术凝聚实力技术凝聚实力 专业创新出版专业创新出版 16.2.1 性能分析 l查找程序性能瓶颈是提升程序性能的第一步。MATLAB提供的码表 (stopwatch)能够给出指定代码运行的时间,通过比较不同代码 的运行时间,用户可以粗略分析程序的性能。下面是码表的一个简 单使用示例,通过该例子可以很容易地理解码表的使用方法。 技术凝聚实力技术凝聚实力 专业创新出版专业创新出版 16.2.2 效率优化技术 l一般地,用户在初次编写代码时,不需要过多地考虑效率问题,而是将精力更多地放在程序的 结构、可读性等方面,大部分的程序优化工作是在程序性能分析之后

9、完成的。本小节主要讨论 程序的时间效率优化技术,接下来的小节将讨论内存优化技术,当然两者在某些方面是重叠的。 下面列出了一些读者可以借鉴的效率优化建议: l代码向量化,即将for、while循环转为矩阵的按位运算,更详细的内容可以参考第7章7.3.5矩阵 按位运算; l预分配足够大的数组,而不是在for、while循环中增加数组的空间大小; l对不可避免且耗时很大的循环操作可以尝试在MEX文件内实现,更详细的内容可以参考第20章; l尽量避免更改变量的数据类型或维数,如有需要,建议事先创建一个新的变量; l尽量避免实数和复数之间的相互赋值; l尽量采用实数运算,对复数运算可以转换为多个实数运算,由此能够提升效率; l合理使用逻辑运算,注意 y = 2x; 技术凝聚实力技术凝聚实力 专业创新出版专业创新出版 16.4 小结 l本章对MATLAB程序的调试、优化和出错处理进行了详细的讨论,这些内容 都是读者容易忽视,但又非常重要的内容。在平常的练习和实践过程中,

温馨提示

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

评论

0/150

提交评论