MATLAB7程序设计.ppt

上传人:小飞机 文档编号:5438887 上传时间:2023-07-07 格式:PPT 页数:54 大小:305.49KB
返回 下载 相关 举报
MATLAB7程序设计.ppt_第1页
第1页 / 共54页
MATLAB7程序设计.ppt_第2页
第2页 / 共54页
MATLAB7程序设计.ppt_第3页
第3页 / 共54页
MATLAB7程序设计.ppt_第4页
第4页 / 共54页
MATLAB7程序设计.ppt_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《MATLAB7程序设计.ppt》由会员分享,可在线阅读,更多相关《MATLAB7程序设计.ppt(54页珍藏版)》请在三一办公上搜索。

1、2023/7/7,第10章 MATLAB 7程序设计,1,第10章 MATLAB 7程序设计,教学目标 教学重点 教学过程,2023/7/7,第10章 MATLAB 7程序设计,2,教学目标,用交互式的方式来编写程序适用于命令行比较简单,输入比较方便,同时处理的问题步骤较少的情况。当需要处理重复、复杂且容易出错的问题时,可以进行控制流的程序设计,这就是M文件的编程工作方式。,2023/7/7,第10章 MATLAB 7程序设计,3,教学重点,MATLAB 7的控制流语言变量和函数的种类了解程序的调试和优化,2023/7/7,第10章 MATLAB 7程序设计,4,教学过程,M文本编辑器的基本知

2、识MATLAB 7的控制流语言变量和函数的种类程序设计的辅助函数程序的调试和优化,2023/7/7,第10章 MATLAB 7程序设计,5,1.M文本编辑器的基本知识,M文本编辑器 M文件的基本属性 M文件的组成部分 脚本式M文件 函数式M文件,2023/7/7,第10章 MATLAB 7程序设计,6,(1)M文本编辑器,M文件的语法类似于一般高级语言,是一种程序化的编程语言,但是,与传统的高级语言相比,M文件又有自己的特点。它只是一个简单的ASC型码文本文件,因此,它的语法比一般的高级语言要简单,程序也容易调试,并且有很好的交互性。,2023/7/7,第10章 MATLAB 7程序设计,7,

3、M文件的基本属性,M文件有两种,一种为脚本式(Script),一种为函数式(Function)。函数M文件必须满足一些标准,另外,它们还应该满足一些MATLAB 7的属性。主要有以下几点:函数式M文件名和出现在文件的第一行的函数名必须相同。实际上,MATLAB 7忽略了第一行的函数名,并且根据存储在硬盘上的文件名来执行函数。,2023/7/7,第10章 MATLAB 7程序设计,8,M文件的组成部分,函数式M文件的组成部分。调出Medit窗口,在里边输入如下内容:function f=fact(n)%函数的定义行%Compute a factorial value.%H1行%FACT(N)re

4、turns the factorial of N,%帮助文本%usually denoted by N!%Put simply,FACT(N)is PROD(1:N).%注释f=prod(1:n);%函数体,2023/7/7,第10章 MATLAB 7程序设计,9,M文件的组成部分及其功能,M文件的组成部分及其功能,2023/7/7,第10章 MATLAB 7程序设计,10,(2)脚本式M文件,用户可以将需要重复输入的所有命令按顺序放到一个扩展名为m的文本文件下,每次运行时只要输入该M文件的文件名即可。用户自己创建的M文件的文件名要避免与MATLAB 7的内置函数和工具箱中的函数重名,以免发生

5、内置函数被替换的情况。,2023/7/7,第10章 MATLAB 7程序设计,11,脚本式M文件举例,本脚本式M文件绘制一个正弦曲线:%此文件用于绘制【2pi,2pi】区间的正弦曲线图x=-2*pi:0.05:2*pi;y=sin(x);plot(x,y,c+)legend(正弦曲线图),2023/7/7,第10章 MATLAB 7程序设计,12,(3)函数式M文件,函数式M文件一般都要自带参数,并且有返回结果。函数式M文件的第一行都是以function开始,说明此文件是一个函数。函数式M文件中的变量都不是全局变量,仅在函数运行期间有效,函数运行完毕之后,它所定义的变量将从工作区间中清除。,2

6、023/7/7,第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

7、.n,year)else fprintf(%4d year is not a leap year.n,year)end,2023/7/7,第10章 MATLAB 7程序设计,14,2.控制流,最简单的程序控制就是顺序结构,用户依次输入命令语句即可。MATLAB 7语言还提供了4种高级的控制结构。它们是:if-else-end结构、switch-case-otherwise-end结构、for循环和while循环。,2023/7/7,第10章 MATLAB 7程序设计,15,(1)顺序结构,顺序结构是最简单的程序结构,用户在编写好程序之后,系统将按照程序的物理位置顺次执行。a=1;b=2;c=3

8、;s1=a+bs2=s1+cs3=s2/s2,2023/7/7,第10章 MATLAB 7程序设计,16,(2)ifend语句,只有一种选择时的情况 if 表达式执行语句end,2023/7/7,第10章 MATLAB 7程序设计,17,ifend语句,有两种选择时的情况 if 表达式 执行语句1 else 执行语句2end,2023/7/7,第10章 MATLAB 7程序设计,18,ifend语句,有3种或3种以上选择时的情况 if 表达式1 表达式1为真时的执行语句1 elseif表达式2 表达式2为真时的执行语句2 elseif表达式3 表达式3为真时的执行语句3elseifelse 所

9、有的表达式都为假时的执行语句 end,2023/7/7,第10章 MATLAB 7程序设计,19,(3)switchcaseend语句,switch开关语句 case条件语句,执行语句,执行语句 case 条件语句1,条件语句2,条件语句3,执行语句,执行语句 otherwise,执行语句,执行语句 end,2023/7/7,第10章 MATLAB 7程序设计,20,(4)trycatchend,try-catch模块给用户提供了一种错误捕获机制。换句话说,利用try-catch模块,MATLAB 7编译系统发现的错误将被其捕获,用户可以控制MATLAB 7怎样对发生的错误进行处理。try 执

10、行语句1catch执行语句 2end,2023/7/7,第10章 MATLAB 7程序设计,21,(5)for循环语句,For语句是一种循环语句,可以让用户很方地实现循环操作,从而可以从容地应付大规模的循环语句。for i=表达式,执行语句,执行语句 end,2023/7/7,第10章 MATLAB 7程序设计,22,(6)while循环语句,与for循环不同,while循环的判断控制可以是逻辑判断语句,因此,它的循环次数可以是一个不定数。这样就赋予了它比for循环更广泛的用途。while表达式 执行语句end,2023/7/7,第10章 MATLAB 7程序设计,23,(7)人机交互命令,终

11、止命令break和return 继续命令continue 等待用户反应命令pause echo命令 用户输入提示命令input 请求键盘输入命令keyboard,2023/7/7,第10章 MATLAB 7程序设计,24,3.变量和函数种类,与其他语言一样,MATLAB 7的变量有输入变量、输出变量和函数内使用的变量之分,而函数也有主函数、局部函数和子函数之分,本节将介绍这些不同种类变量和函数的特点。,2023/7/7,第10章 MATLAB 7程序设计,25,(1).函数变量及其作用域,在MATLAB 7语言中,变量可以分为输入变量、输出变量和函数内使用的变量。输入变量相当于函数的入口数据,

12、也是一个函数操作的主要对象,从某种意义上来说,函数的功能在于对输入变量进行一定的操作从而实现一定的功能。函数的输入变量为局部变量,函数对输入变量的一切操作和修改如果不依靠输出变量的话,将不会影响工作区间中该变量的值。,2023/7/7,第10章 MATLAB 7程序设计,26,函数变量及其作用域,变量的输入和输出规则 局部变量 全局变量 永久变量,2023/7/7,第10章 MATLAB 7程序设计,27,变量的输入和输出规则,MATLAB 7可以有任意数量的输入和输出变量。这些参数的特性和规则如下所示:(1)函数式M文件可以没有输入和输出变量。(2)函数可以用比M文件中的函数定义行所规定的输

13、入输出变量更少的变量进行调用。但是不能用比规定的输入输出变量更多的变量进行调用。(3)在一次调用中所用到的输入和输出变量的个数可以通过分别调用函数nargin和nargout来确定。因为nargin和nargout是函数而不是变量,所以用户不能用诸如nargin=nargin+pi之类的语句对它们进行重新赋值。,2023/7/7,第10章 MATLAB 7程序设计,28,局部变量,局部变量是在函数内部使用的变量,其影响范围只能在本函数内,每个函数在运行时,都占有独立的函数工作空间,此工作空间和MATLAB的工作空间时相互独立的,局部变量仅存在于函数的工作空间内。当函数执行完毕之后,该变量即自行

14、消失。,2023/7/7,第10章 MATLAB 7程序设计,29,全局变量,在MATLAB 7语言中,函数内部定义的变量都是局部变量,它们不被加载到工作区间中。有时,用户需要使用全局变量,这时要使用global函数来进行定义,而且在任何使用该全局变量的函数中都应加以定义,即使是在命令窗口也不例外。,2023/7/7,第10章 MATLAB 7程序设计,30,永久变量,除了通过全局变量共享数据外,函数式M文件还可以通过声明一个变量persistent来对函数中重复使用和递归调用的变量的访问进行限制,使用格式形如persistent(X Y Z)。永久变量与全局变量类似,但是它的范围被限制在声明

15、这些变量的函数内部,不允许在其他的函数中对它们进行改变。只要M文件还在MATLAB 7的内存中,永久变量就存在。,2023/7/7,第10章 MATLAB 7程序设计,31,(2)函数的分类,主函数 匿名函数 嵌套式函数 子函数 局部函数,2023/7/7,第10章 MATLAB 7程序设计,32,主函数,M文件中的第一个函数就叫做主函数,前边章节中所引用的函数事实上都是主函数,主函数之后可以是任意数量的子函数,它们可以作为主程序的子程序。一般来说,在命令窗口或是其他的M文件只能调用主函数,调用的时候就是直接调用其函数名。比如,函数average的M文件average.m如下:function

16、 y=average(x)%AVERAGE Mean of vector elements.y=sum(x)/length(x);%Actual computation,2023/7/7,第10章 MATLAB 7程序设计,33,匿名函数,匿名函数提供了一种创建简单程序的方法,使用它用户可以不必每次都编写M文件。用户可以在MATLAB 7的命令窗口或是其他任意M文件和脚本文件中使用匿名函数。匿名函数的格式如下所示。fhandle=(arglist)expr,2023/7/7,第10章 MATLAB 7程序设计,34,嵌套式函数,在MATLAB 7中,可以在一个函数的内部定义一个或多个其他的函数

17、,这些在内部定义的函数被称作嵌套式函数,应当注意的是,在嵌套式函数的内部也可以定义嵌套式函数。定义嵌套式函数时,只需在另一个M文件的内部定义该函数即可,同其他M文件一样,嵌套式函数包含有M文件的所有基本部分。,2023/7/7,第10章 MATLAB 7程序设计,35,子函数,与其他的高级语言一样,在MATLAB 7语言中也可以很方便地定义子函数,用来扩充函数的功能。在函数文件中题头定义的函数为主函数,而在函数体内定义的其他函数都被视为子函数。子函数只能为主函数或同一主函数下的其他子函数所使用。,2023/7/7,第10章 MATLAB 7程序设计,36,局部函数,MATLAB 7语言中把放置

18、在目录private下的函数称为局部函数,这些函数只有private目录的父目录中的函数才可以调用,其他目录下的函数不能调用。局部函数与子函数所不同的是,局部函数可以被其父目录下的所有函数所调用,而子函数则只能被其所在的M文件的主函数所调用。所以,局部函数在可用的范围上大于子函数;在函数编辑的结构上,局部函数与一般的函数文件的编辑相同,而子函数只能在主函数文件中编辑。,2023/7/7,第10章 MATLAB 7程序设计,37,(3)函数句柄,函数句柄提供了一种间接访问函数的手段,用户可以很方便地调用其他函数;提供函数调用过程中的可靠性;减少程序设计中的冗余;同时可以在使用函数的过程中保存函数

19、相关的信息,尤其是关于函数执行的信息。,2023/7/7,第10章 MATLAB 7程序设计,38,函数句柄,函数句柄的创建 函数句柄的调用 函数句柄的操作,2023/7/7,第10章 MATLAB 7程序设计,39,函数句柄的创建,函数句柄的创建比较简单,使用格式形如:fhandle=functionname其中fhandle为所创建的函数句柄,functionname为所创建的函数。,2023/7/7,第10章 MATLAB 7程序设计,40,函数句柄的创建,trigFun=sin,cos,tan;plot(trigFun2(-pi:0.01:pi),2023/7/7,第10章 MATLA

20、B 7程序设计,41,函数句柄的调用,function x=plotFHandle(fhandle,data)plot(data,fhandle(data)在命令窗口中调用程序如下。plotFHandle(sin,-pi:0.01:pi),2023/7/7,第10章 MATLAB 7程序设计,42,函数句柄的操作,2023/7/7,第10章 MATLAB 7程序设计,43,4.程序设计的辅助函数,执行函数 容错函数 时间运算函数,2023/7/7,第10章 MATLAB 7程序设计,44,(1)执行函数,执行函数及其功能,2023/7/7,第10章 MATLAB 7程序设计,45,(2)容错函

21、数,程序设计的好坏在很大程度上取决于其容错能力的大小。MATLAB 7语言提供了相应的报错及警告函数error、warning、lasterr、lastwarn以及errortrap on/off等,可以很方便地实现这方面的功能。,2023/7/7,第10章 MATLAB 7程序设计,46,(3)时间运算函数,常用的时间控制函数及其功能,2023/7/7,第10章 MATLAB 7程序设计,47,5.程序的调试和优化,程序的调试 程序的错误种类 错误的识别和程序调试 程序的优化 程序优劣的分析 程序优化的技巧 有效地使用内存,2023/7/7,第10章 MATLAB 7程序设计,48,(1)程

22、序的错误种类,在MATLAB 7的表达式中可能存在两种类型的错误,即语法错误和运行错误:语法错误 语法错误发生在M文件程序代码的生成过程中,一般是由函数参数输入类型有误或是矩阵运算阶数不符等引起。运行错误 运行错误一般指在程序运行过程中,出现溢出或是死循环等异常现象。,2023/7/7,第10章 MATLAB 7程序设计,49,(2)错误的识别和程序调试,对于简单的问题,使用下面的一种或几种方法可以方便地求解:将函数中输出关键值的行的分号(;)去掉,这样,这些运算的中间结果将在命令窗口中予以显示,用户可以据此来检查中间结果的正确性。在函数中添加一些语句,用来显示用户认为很重要的变量的值。使用k

23、eyboard命令中断程序,该命令实现函数工作区间和命令窗口工作区间的交互,从而获得用户所需要的信息,使用该命令后,程序将处于调试状态,此时命令窗口的提示符由“”变为“K”,用户可以进行相应的操作。在函数头前加“%”,这样就将函数式M文件变为脚本式M文件,而脚本式M文件运行时,其工作区间就是MATLAB 7的工作区间,这样在出现错误的时候就可以查询这个工作区间。,2023/7/7,第10章 MATLAB 7程序设计,50,错误的识别和程序调试,错误识别函数及其功能,2023/7/7,第10章 MATLAB 7程序设计,51,错误的识别和程序调试,程序断点的设置,2023/7/7,第10章 MA

24、TLAB 7程序设计,52,(3)程序优劣的分析,在MATLAB 7语言中,使用profile函数以及计时函数tic和toc来分析程序中各个部分的耗时情况,从而帮助用户找出程序中需要改进的地方。其中profile在计算相对耗时以及查找文件执行过程中瓶颈问题时更为有效,而tic和toc函数在计算绝对耗时时更为有效。,2023/7/7,第10章 MATLAB 7程序设计,53,(2)程序优化的技巧,程序的向量化操作 循环运算是MATLAB中的最大弱点,在程序设计中,应当尽量避免使用循环运算。用户可以通过将M文件向量化来优化M文件,所谓向量化就是使用向量和矩阵运算来代替for循环和while循环。数据的预定义 使用for循环和while循环来增加数据结构的大小时,将影响系统和内存的使用。提高效率的可行办法是进行预定义,,2023/7/7,第10章 MATLAB 7程序设计,54,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号