已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章程序设计,在前面的章节中我们对MATLAB基础知识做了详尽的介绍,主要是在MATLAB命令窗口演示这些基本函数、功能。而MATLAB作为一门优秀的编程语言也同其他高级语言一样,可以进行复杂程序的设计。本章我们将学习MATLAB程序设计的相关知识,主要涉及程序设计的文件类型、变量和常量、流程控制、调试与优化等。在本章的学习过程中我们会发现MATLAB和其他编程语言程序设计的相同或相近之处,但是希望读者在发现MATLAB和其他编程语言的共性之处的同时能够深刻体会不同之处。勤于思考,不要停留在原来的编程习惯中,换一种编程方式,可能取得更好的效果。另外,在程序出错后,对程序的调试、修改、完善,也是用好MATLAB解决实际问题的关键。,4.1程序设计概述,MATLAB的程序设计是在M文件中进行的。M文件按照调用方式的不同可以分为脚本文件和函数文件。程序设计中涉及的主要步骤如下。(1)程序文件的新建:通过单击主窗口工具条上的图标,新建如图4.1所示的M文件,在M文件内即可以开始编写程序。(2)程序文件的保存:程序编写完毕后,一般要先保存才可运行程序。程序的保存可以通过工具条上或者“Ctrl+s”,将打开如图4.1所示的程序保存窗口,给M文件命名,然后保存。,4.2脚本文件,脚本文件是由多条命令组成的文件。对于需要在命令行窗口输入多行命令才能完成的任务,可以考虑在MATLAB代码编写窗口建立脚本文件,便于操作,而且文件可以保存,可以重复执行。简单来讲,脚本文件就是由一条条命令组成的,可以直接访问MATLAB当前工作空间内的变量,同时脚本文件内代码生成的变量也将保存在MATLAB的工作空间内。,4.3函数文件,需要通过调用才可以执行的一类M文件为函数文件,函数文件一般有输入、输出参数,可以供不同的输入参数重复调用产生不同的输出结果。函数文件中产生的变量只在函数运行过程中有效,当函数执行完后,变量即不存在。函数文件一般用于需要让不同的参数重复调用的代码,但是函数文件的执行类似于“黑箱”,我们无法看到函数文件的执行的中间过程,因此会给程序的调试带来比较大的麻烦,对于入门读者建议最初以编写脚本文件为基础,当编写的脚本文件运行后完整无误,可以考虑再设计成函数。目前MATLAB软件提供了大量的现场函数供我们直接调用,大大提高了代码的编写效率,而一些新开发的算法网上也经常能找到现成的函数文件供我们使用。,4.3.1函数的定义,当M文件的第一行为function的函数定义语句,即为函数文件。完整的MATLAB函数文件由函数定义行、H1行、帮助文本、函数体、注释组成。例4.1即为MATLAB自带的函数mean()一个完整的函数文件。,4.3.2函数类型,MATLAB的函数类型主要有以下几种:主函数、子函数、私有函数、嵌套函数、重载函数、匿名函数。这里主要介绍常用的主函数、子函数和匿名函数。,4.3.3函数的调用和变量传递,函数调用的一般格式为:y1,y2,=函数名(x1,x2,)其中,x1、x2为函数的输入参数,传递的是参数的值;而y1、y2为函数的输出参数,获取的是函数调用后的值,为实参,将存储到MATLAB工作空间中。在函数调用过程中MATLAB查询的是文件名,而调用格式中又为函数名,因而未避免不必要的麻烦,存储函数文件时文件名应当与主函数名相一致,便于理解和使用。,4.3.4输入输出参数的控制,MATLAB提供了函数nargin和nargout控制函数输入输出参数,其调用格式如下:n=nargin:用于获取当前函数文件内的输入参数个数。n=nargin(fun):用于获取指定函数文件fun内的输入参数个数。n=nargout:用于获取当前函数文件内的输出参数个数。n=nargout(fun):用于获取指定函数文件fun内的输出参数个数。一般函数中输入输出参数的检测主要用于判断用户在调用函数时是否给出了充分的调用参数或者根据调用参数的个数执行不同的函数功能,用户没有提供的输入参数可以设置为函数自带的默认值。,4.4常量、变量,变量是程序设计语言的重要组成元素。MATLAB语言中的变量与常规程序设计语言不同的是不需要事先对所使用的变量进行声明,也不需要指定变量的数据类型。MATLAB语言会自动根据变量的赋值情况产生默认的数据类型。MTALAB中也提供了一些值不变的变量,为常量。这些常量一般具有固定的含义。本节中将重点介绍变量的命令、变量类型和常量的相关知识。,4.4.1变量的命名,MATLAB中的变量在使用前不需要声明,指定数据类型,但是变量的命令需要遵守如下规定:变量名以字母开头,且只能由字母、下画线和数字混合组成。变量名区分大小写。变量名的长度不要超过63个。变量名尽量不要与已有的函数名、常量名相同。变量名不可以使用MATLAB中的关键字,MATLAB中的关键字包括“break”、“case”、“catch”、“continue”、“else”、“elseif”、“end”、“for”、“function”、“global”、“if”、“otherwise”、“persistent”、“return”、“switch”、“try”、“while”。,4.4.2系统预定义的常量,MATLAB语言包含一些预定义的变量,这些特殊的变量称为常量。如表4.1列出了MATLAB7.0中的主要常量。,4.4.3变量类型,MATLAB中的变量可以分为局部变量与全局变量,其作用域不同。默认状况下的变量都为局部变量,只能在当前的工作空间或者函数体中有效。函数文件中的变量都是局部的,即一个函数文件中定义的变量不能被另一个函数文件使用,也不存储到MATLAB工作空间内,如果不通过函数返回,则在函数运行完毕后局部变量即不存在。如果一些变量需要在不同的函数体、工作空间中同时使用,需要定义为全局变量。全局变量定义的格式为:global变量名列表,4.4.4系统预定义的变量,MATLAB中也有一些固定的变量,有特殊的含义。,4.5程序结构及流程控制,MATLAB与一般程序设计的高级语言类似,程序机构可以分为顺序结构、循环结构和条件结构。顺序结构是按照代码书写的先后顺序执行,是最常用的结构,一般的程序中都会有顺序结构的成分。循环结构用于重复的执行某一段代码,通过循环流程控制语句控制程序的执行。条件结构可用于在一定条件下执行相应的代码,通过条件流程控制语句执行代码。MATLAB提供了8种常用的控制程序流程语句,分别为“for”、“while”、“if”、“switch”、“try”、“continue”、“break”、“return”语句。流程控制语句一般比较长,需要连续地书写一段代码,因此一般流程控制语句多在函数文件或者脚本文件中使用。本小节将在不同程序结构的代码中详细介绍流程控制语句的使用。通过本小节的学习,将使读者掌握MATLAB基础程序设计流程的基础知识,指导读者写出简洁的程序。,2019/12/15,15,可编辑,2019/12/15,16,可编辑,4.5.1赋值语句,MATLAB中典型的赋值语句调用格式为:变量名=表达式其中,表达式可以运算表达式,也可以是函数调用等。表达式后加“;”,赋值表达式的变量值不显示,如果不加“;”将在命令窗口中显示赋值表达式。一般对于数据量比较大的变量建议加上“;”,大数据量变量的显示会减慢程序执行的效率。而如果希望直接在命令窗口看到函数的数据显示,则可以不加“;”,特别是在函数中,因为函数在运行完后中间执行的变量不会保存下来,我们可以在希望看到中间变量的值后不加“;”,观察命令窗口的显示。,4.5.2条件语句,MATLAB中提供了条件语句,用于控制在一定的条件下执行特定的代码。常用的条件语句有:if语句、switch语句和try语句。,4.5.3循环语句,循环语句一般用于在一定的条件下需要重复执行的程序。MATLAB中提供的循环控制语句有:for语句、while语句、continue语句。,4.6交互控制指令,在MATLAB中提供了一些交互控制命令,用于让用户控制代码的执行。常用的交互控制命令包括:1输入控制语句:input命令2键盘输入语句:keyboard命令3暂停语句:pause命令4指令显示控制语句:echo命令5警告语句6返回语句:return命令,4.7程序的调试,通过上述内容的学习,读者可以基本掌握程序编写的流程,可以独立写出简单的程序。相对而言程序的写作相对容易,而写完后程序是否能保质保量的完成指定的设计任务才是关键。而对于普通用户来说花在程序的查错、调试上的时间可能远远要大于程序的书写。因为MATLAB语言已为用户提供了大量的可以直接使用的函数,可以说我们在编写一段代码时,需要完全自己开发的算法部分已很少,仅是完成数据的导入、做些简单的判断,输入相应的函数完成相应的功能即可。但是在这个过程中我们还是很容易出各种错误,出错后如何调试程序,使程序顺利完成相应的功能才是程序设计的关键,同时程序的调试需要不断的积累经验。在本节中笔者将结合多年使用MATLAB的心得体会,与读者探讨MATLAB常见的错误类型其程序的调试方法。,4.7.1常见错误类型,一般MATLAB程序中常见的错误大致可以分为三类。1拼写错误2语法错误3逻辑错误,4.7.2调试方法,程序的调试方法有很多种,总体思想是通过查看运行过程中变量值的变化来调试程序。而查看值的变化途径有:1去掉变量末尾的分号2转换函数文件为脚本文件3交互控制指令查看程序的运行状况4Debugger工具,4.8优化,在程序调试无误,可以顺利执行后,我们可能会遇到这一问题,现在的代码运行时间比较慢,是否可以进一步提高程序的效率,另一方面是否可以有办法减轻算法编程的复杂度,提高编程效率。事实上这些问题正是有一定基础的用户经常会去思考的问题,本节将介绍一些MATLAB代码优化的技巧,用以提高代码的效率。,4.8.1循环的向量化,MATLAB是基于矩阵、向量计算的,因而循环的向量化可以大大提高代码的执行效率。但是很多时候在编程时,由于受到其他语言的影响,习惯性的很多用户还是会写for循环,下面以一个实例比较for循环与向量化程序的执行效率。为测试程序执行的快慢,采用tic和toc函数计算代码运行时间。,4.8.2循环的优化,循环的向量化可以提高程序的执行效率,但是有时必须要用到循环时,也是有一些技巧可以提高循环的执行效率的。如果两个循环执行的次数不同,则在外循环的执行次数选择循环少的,内循环的执行次数选择循环多的,这样可以提高执行速度。如果for循环中需要生成变量,可以预分配变量的空间,即事先确定变量的大小。,4.8.3M文件分析,Editor窗口中的Tools菜单用于M文件的分析,如图4.11所示,其中:CheckcodewithM-link:用于检查M文件代码逐行检查,给出代码的错误信息;ShowDependencyReport:列出当前M文件调用的子程序;OpenProfiler:生成程序执行效率的分析文件;,4.8.4提高编程效率的小技巧,(1)线性索引坐标的使用。一般在矩阵操作中,我们使用的比较多的是行列坐标,但是MATLAB中本身元素是按列存储的,线性坐标的使用可以很方便的提取元素中的值。(2)“:”和end的使用。“:”在矩阵中可以代替一行、一列、或者全部元素,而end可以提取最后的元素、指定行、列到最后的元素。“:”和end语句的使用让编写程序时不用关心矩阵具体的大小。,4.9本章小节,本章主要介绍了MATLAB程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 十二生肖水晶动物项目可行性研究报告技术工艺+设备选型+财务方案+厂区
- 2025年食品安全可追溯体系建设方案
- 智能灌溉施工方案
- 夜宵店营销方案策划书3
- 农业机械运营方案范文
- 南京改装车项目策划方案
- 元宵糖水店活动方案策划
- 医疗健康行业创业计划书提供全方位健康解决方案
- 养殖合作社项目实施方案
- 中秋节宴会设计思路及方案
- 广告设计师三级培训教程
- 《建港航法律法规》课件
- 促销与促销组合策略
- 热轧无缝钢管施工方案范本
- 数独比赛“六宫”练习题(96道)
- 湖北民族大学辅导员考试题库
- 2023年06月上海市浦东新区临港新片区文员招考聘用笔试题库含答案详解
- 养殖场兽医的聘用合同示本
- 外国教育史知到章节答案智慧树2023年山东师范大学
- 京东入驻流程
- 河南联通公司招聘考试真题
评论
0/150
提交评论