MATLAB7程序设计MATLAB7教程.ppt_第1页
MATLAB7程序设计MATLAB7教程.ppt_第2页
MATLAB7程序设计MATLAB7教程.ppt_第3页
MATLAB7程序设计MATLAB7教程.ppt_第4页
MATLAB7程序设计MATLAB7教程.ppt_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

2019/5/30,第10章 MATLAB 7程序设计,1,第10章 MATLAB 7程序设计,教学目标 教学重点 教学过程,2019/5/30,第10章 MATLAB 7程序设计,2,教学目标,用交互式一的方式来编写程序适用于命令行比较简单,输入比较方便,同时处理的问题步骤较少的情况。 当需要处理重复、复杂且容易出错的问题时,可以进行控制流的程序设计,这就是M文件的编程工作方式。,2019/5/30,第10章 MATLAB 7程序设计,3,教学重点,MATLAB 7的控制流语言 变量和函数的种类 了解程序的调试和优化,2019/5/30,第10章 MATLAB 7程序设计,4,教学过程,M文本编辑器的基本知识 MATLAB 7的控制流语言 变量和函数的种类 程序设计的辅助函数 程序的调试和优化,2019/5/30,第10章 MATLAB 7程序设计,5,1. M文本编辑器的基本知识,M文本编辑器 M文件的基本属性 M文件的组成部分 脚本式M文件 函数式M文件,2019/5/30,第10章 MATLAB 7程序设计,6,(1)M文本编辑器,M文件的语法类似于一般高级语言,是一种程序化的编程语言,但是,与传统的高级语言相比,M文件又有自己的特点。它只是一个简单的ASC型码文本文件,因此,它的语法比一般的高级语言要简单,程序也容易调试,并且有很好的交互性。,2019/5/30,第10章 MATLAB 7程序设计,7,M文件的基本属性,M文件有两种,一种为脚本式(Script),一种为函数式(Function) 。 函数M文件必须满足一些标准,另外,它们还应该满足一些MATLAB 7的属性。主要有以下几点: 函数式M文件名和出现在文件的第一行的函数名必须相同。实际上,MATLAB 7忽略了第一行的函数名,并且根据存储在硬盘上的文件名来执行函数。 ,2019/5/30,第10章 MATLAB 7程序设计,8,M文件的组成部分,函数式M文件的组成部分。 调出Medit窗口,在里边输入如下内容: function f = fact(n) %函数的定义行 % Compute a factorial value. %H1行 % FACT(N) returns the factorial of N, %帮助文本 % usually denoted by N! % Put simply, FACT(N) is PROD(1:N). %注释 f = prod(1:n); % 函数体,2019/5/30,第10章 MATLAB 7程序设计,9,M文件的组成部分及其功能,M文件的组成部分及其功能,2019/5/30,第10章 MATLAB 7程序设计,10,(2)脚本式M文件,用户可以将需要重复输入的所有命令按顺序放到一个扩展名为m的文本文件下,每次运行时只要输入该M文件的文件名即可。 用户自己创建的M文件的文件名要避免与MATLAB 7的内置函数和工具箱中的函数重名,以免发生内置函数被替换的情况。,2019/5/30,第10章 MATLAB 7程序设计,11,脚本式M文件举例,本脚本式M文件绘制一个正弦曲线: %此文件用于绘制【2pi,2pi】区间的正弦曲线图 x=-2*pi:0.05:2*pi; y=sin(x); plot(x,y,c+) legend(正弦曲线图),2019/5/30,第10章 MATLAB 7程序设计,12,(3)函数式M文件,函数式M文件一般都要自带参数,并且有返回结果 。 函数式M文件的第一行都是以function开始,说明此文件是一个函数。函数式M文件中的变量都不是全局变量,仅在函数运行期间有效,函数运行完毕之后,它所定义的变量将从工作区间中清除。,2019/5/30,第10章 MATLAB 7程序设计,13,函数式M文件举例,例11-4 判断某一年是否为闰年。 解:调出Medit窗口,在里边输入如下内容。 %该函数用于判断某一年是否为闰年 %使用格式为isleapea(y),其中y是用户所要计算的年份 function isleapyear(year) sign=0; if rem(year,4)=0 sign=sign+1; end,if rem(year,100)=0 sign=sign-1; end if rem(year,400)=0 sign=sign+1; end if sign=1 fprintf(%4d year is a leap year.n,year) else fprintf(%4d year is not a leap year.n,year) end,2019/5/30,第10章 MATLAB 7程序设计,14,2. 控制流,最简单的程序控制就是顺序结构,用户依次输入命令语句即可。 MATLAB 7语言还提供了4种高级的控制结构。它们是:if-else-end结构、switch-case-otherwise-end结构、for循环和while循环。,2019/5/30,第10章 MATLAB 7程序设计,15,(1)顺序结构,顺序结构是最简单的程序结构,用户在编写好程序之后,系统将按照程序的物理位置顺次执行。 a=1; b=2; c=3; s1=a+b s2=s1+c s3=s2/s2,2019/5/30,第10章 MATLAB 7程序设计,16,(2)ifend语句,只有一种选择时的情况 if 表达式 执行语句 end,2019/5/30,第10章 MATLAB 7程序设计,17,ifend语句,有两种选择时的情况 if 表达式 执行语句1 else 执行语句2 end,2019/5/30,第10章 MATLAB 7程序设计,18,ifend语句,有3种或3种以上选择时的情况 if 表达式1 表达式1为真时的执行语句1 elseif表达式2 表达式2为真时的执行语句2 elseif表达式3 表达式3为真时的执行语句3 elseif else 所有的表达式都为假时的执行语句 end,2019/5/30,第10章 MATLAB 7程序设计,19,(3) switchcaseend语句,switch开关语句 case条件语句, 执行语句,执行语句 case 条件语句1,条件语句2, 条件语句3, 执行语句,执行语句 otherwise, 执行语句,执行语句 end,2019/5/30,第10章 MATLAB 7程序设计,20,(4) trycatchend,try-catch模块给用户提供了一种错误捕获机制。换句话说,利用try-catch模块,MATLAB 7编译系统发现的错误将被其捕获,用户可以控制MATLAB 7怎样对发生的错误进行处理。 try 执行语句1 catch 执行语句 2 end,2019/5/30,第10章 MATLAB 7程序设计,21,(5) for循环语句,For语句是一种循环语句,可以让用户很方地实现循环操作,从而可以从容地应付大规模的循环语句。 for i =表达式, 执行语句,执行语句 end,2019/5/30,第10章 MATLAB 7程序设计,22,(6)while循环语句,与for循环不同,while循环的判断控制可以是逻辑判断语句,因此,它的循环次数可以是一个不定数。这样就赋予了它比for循环更广泛的用途。 while表达式 执行语句 end,2019/5/30,第10章 MATLAB 7程序设计,23,(7) 人机交互命令,终止命令break和return 继续命令continue 等待用户反应命令pause echo命令 用户输入提示命令input 请求键盘输入命令keyboard,2019/5/30,第10章 MATLAB 7程序设计,24,3. 变量和函数种类,与其他语言一样,MATLAB 7的变量有输入变量、输出变量和函数内使用的变量之分,而函数也有主函数、局部函数和子函数之分,本节将介绍这些不同种类变量和函数的特点。,2019/5/30,第10章 MATLAB 7程序设计,25,(1). 函数变量及其作用域,在MATLAB 7语言中,变量可以分为输入变量、输出变量和函数内使用的变量。 输入变量相当于函数的入口数据,也是一个函数操作的主要对象,从某种意义上来说,函数的功能在于对输入变量进行一定的操作从而实现一定的功能。函数的输入变量为局部变量,函数对输入变量的一切操作和修改如果不依靠输出变量的话,将不会影响工作区间中该变量的值。,2019/5/30,第10章 MATLAB 7程序设计,26,函数变量及其作用域,变量的输入和输出规则 局部变量 全局变量 永久变量,2019/5/30,第10章 MATLAB 7程序设计,27,变量的输入和输出规则,MATLAB 7可以有任意数量的输入和输出变量。这些参数的特性和规则如下所示: (1) 函数式M文件可以没有输入和输出变量。 (2) 函数可以用比M文件中的函数定义行所规定的输入输出变量更少的变量进行调用。但是不能用比规定的输入输出变量更多的变量进行调用。 (3) 在一次调用中所用到的输入和输出变量的个数可以通过分别调用函数nargin和nargout来确定。因为nargin和nargout是函数而不是变量,所以用户不能用诸如nargin=nargin+pi之类的语句对它们进行重新赋值。 ,2019/5/30,第10章 MATLAB 7程序设计,28,局部变量,局部变量是在函数内部使用的变量,其影响范围只能在本函数内,每个函数在运行时,都占有独立的函数工作空间,此工作空间和MATLAB的工作空间时相互独立的,局部变量仅存在于函数的工作空间内。当函数执行完毕之后,该变量即自行消失。,2019/5/30,第10章 MATLAB 7程序设计,29,全局变量,在MATLAB 7语言中,函数内部定义的变量都是局部变量,它们不被加载到工作区间中。有时,用户需要使用全局变量,这时要使用global函数来进行定义,而且在任何使用该全局变量的函数中都应加以定义,即使是在命令窗口也不例外。,2019/5/30,第10章 MATLAB 7程序设计,30,永久变量,除了通过全局变量共享数据外,函数式M文件还可以通过声明一个变量persistent来对函数中重复使用和递归调用的变量的访问进行限制,使用格式形如persistent (X Y Z)。永久变量与全局变量类似,但是它的范围被限制在声明这些变量的函数内部,不允许在其他的函数中对它们进行改变。只要M文件还在MATLAB 7的内存中,永久变量就存在。,2019/5/30,第10章 MATLAB 7程序设计,31,(2)函数的分类,主函数 匿名函数 嵌套式函数 子函数 局部函数,2019/5/30,第10章 MATLAB 7程序设计,32,主函数,M文件中的第一个函数就叫做主函数,前边章节中所引用的函数事实上都是主函数,主函数之后可以是任意数量的子函数, 它们可以作为主程序的子程序。一般来说,在命令窗口或是其他的M文件只能调用主函数,调用的时候就是直接调用其函数名。 比如,函数average的M文件average.m如下: function y = average(x) % AVERAGE Mean of vector elements. y = sum(x)/length(x); % Actual computation,2019/5/30,第10章 MATLAB 7程序设计,33,匿名函数,匿名函数提供了一种创建简单程序的方法,使用它用户可以不必每次都编写M文件。用户可以在MATLAB 7的命令窗口或是其他任意M文件和脚本文件中使用匿名函数。 匿名函数的格式如下所示。 fhandle = (arglist) expr,2019/5/30,第10章 MATLAB 7程序设计,34,嵌套式函数,在MATLAB 7中,可以在一个函数的内部定义一个或多个其他的函数,这些在内部定义的函数被称作嵌套式函数,应当注意的是,在嵌套式函数的内部也可以定义嵌套式函数。 定义嵌套式函数时,只需在另一个M文件的内部定义该函数即可,同其他M文件一样, 嵌套式函数包含有M文件的所有基本部分。,2019/5/30,第10章 MATLAB 7程序设计,35,子函数,与其他的高级语言一样,在MATLAB 7语言中也可以很方便地定义子函数,用来扩充函数的功能。在函数文件中题头定义的函数为主函数,而在函数体内定义的其他函数都被视为子函数。子函数只能为主函数或同一主函数下的其他子函数所使用。,2019/5/30,第10章 MATLAB 7程序设计,36,局部函数,MATLAB 7语言中把放置在目录private下的函数称为局部函数,这些函数只有private目录的父目录中的函数才可以调用,其他目录下的函数不能调用。 局部函数与子函数所不同的是,局部函数可以被其父目录下的所有函数所调用,而子函数则只能被其所在的M文件的主函数所调用。所以,局部函数在可用的范围上大于子函数;在函数编辑的结构上,局部函数与一般的函数文件的编辑相同,而子函数只能在主函数文件中编辑。,2019/5/30,第10章 MATLAB 7程序设计,37,(3)函数句柄,函数句柄提供了一种间接访问函数的手段,用户可以很方便地调用其他函数;提供函数调用过程中的可靠性;减少程序设计中的冗余; 同时可以在使用函数的过程中保存函数相关的信息,尤其是关于函数执行的信息。,2019/5/30,第10章 MATLAB 7程序设计,38,函数句柄,函数句柄的创建 函数句柄的调用 函数句柄的操作,2019/5/30,第10章 MATLAB 7程序设计,39,函数句柄的创建,函数句柄的创建比较简单,使用格式形如: fhandle=functionname 其中fhandle为所创建的函数句柄,functionname为所创建的函数 。,2019/5/30,第10章 MATLAB 7程序设计,40,函数句柄的创建, trigFun = sin, cos, tan; plot(trigFun2(-pi:0.01:pi) ,2019/5/30,第10章 MATLAB 7程序设计,41,函数句柄的调用,function x = plotFHandle(fhandle, data) plot(data, fhandle(data) 在命令窗口中调用程序如下。 plotFHandle(sin, -pi:0.01:pi),2019/5/30,第10章 MATLAB 7程序设计,42,函数句柄的操作,2019/5/30,第10章 MATLAB 7程序设计,43,4. 程序设计的辅助函数,执行函数 容错函数 时间运算函数,2019/5/30,第10章 MATLAB 7程序设计,44,(1)执行函数,执行函数及其功能,2019/5/30,第10章 MATLAB 7程序设计,45,(2)容错函数,程序设计的好坏在很大程度上取决于其容错能力的大小。MATLAB 7语言提供了相应的报错及警告函数error、warning、lasterr、lastwarn以及errortrap on/off等,可以很方便地实现这方面的功能。,2019/5/30,第10章 MATLAB 7程序设计,46,(3)时间运算函数,常用的时间控制函数及其功能,2019/5/30,第10章 MATLAB 7程序设计,47,5. 程序的调试和优化,程序的调试 程序的错误种类 错误的识别和程序调试 程序的优化 程序优劣的分析 程序优化的技巧 有效地使用内存,2019/5/30,第10章 MATLAB 7程序设计,48,(1)程序的错误种类,在MATLAB 7的表达式中可能存在两种类型的错误,即语法错误和运行错误 : 语法错误 语法错误发生在M文件程序代码的生成过程中,一般是由函数参数输入类型有误或是矩阵运算阶数不符等引起。 运行错误 运行错误一般指在程序运行过程中,出现溢出或是死循环等异常现象。,2019/5/30,第10章 MATLAB 7程序设计,49,(2)错误的识别和程序调试,对于简单的问题,使用下面的一种或几种方法可以方便地求解: 将函数中输出关键值的行的分号(;)

温馨提示

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

评论

0/150

提交评论