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

下载本文档

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

文档简介

1、2020/8/13,1,第五章MATLAB程序设计,一、 M文件的两种形式 M脚本文件和M函数文件,都是通过“M文件编辑调试器窗口”创建 (一)M文件的基本构成 1、脚本文件或函数文件的功能说明行(用%开头的注释行) 2、函数声明行(对于M函数文件必有,对于M脚本文件不需要)或clear all ; clc; close all (对于M函数文件不能有,对于M脚本文件,没有特殊需要时,建议使用) 3、帮助文本(用%开头),增加可读性,便于他人使用 4、编写和修改记录(用%开头) 5、程序体(对于M脚本文件)或者函数体(对于M函数文件) 其中,5必须有,1,3,4为了增加可读性,建议使用。2视M

2、文件的形式而定 例1:polyfit.m 和chapter2_1.m文件。,2020/8/13,2,(二)M脚本文件特点 (1) 脚本文件中的命令格式和语句构成,与在命令窗口中输入完全相同。 (2) 运行脚本文件时,只是简单地按顺序从文件中读取一条条命令,送到MATLAB命令窗口中去执行(自动的,非人为的)。 (3) 与在命令窗口中直接运行命令一样,脚本文件运行产生的变量都是驻留在MATLAB的工作空间(workspace)中,可以很方便地查看变量,除非用clear命令清除;脚本文件的命令也可以访问工作空间的所有数据,因此要注意避免变量的覆盖而造成程序出错。,一、 M文件的两种形式,2020/

3、8/13,3,(三)M函数文件的特点 (1) 第一行总是以“function”引导的函数声明行; 函数声明行的格式: function 输出变量列表 = 函数名(输入变量列表) 其中, function和函数名必有,其它的根据具体情况可选 (2) 函数文件在运行过程中产生的变量都存放在函数本身的工作空间; (3) 当文件执行完最后一条命令或遇到“return”命令时,就结束函数文件的运行,同时函数工作空间的变量就被清除; (4) 函数的工作空间随具体的M函数文件调用而产生,随调用结束而删除,是独立的、临时的,在MATLAB运行过程中可以产生任意多个临时的函数空间 注意:M脚本文件和M函数文件的

4、文件名及函数名的命名规则与MATLAB变量的命名规则相同。 例2:chapter2_1的运行过程,不仅说明上述规则,还说明调用过程和参数传递。,一、 M文件的两种形式,2020/8/13,4,二、函数调用和参数传递,chapter2_1.m,polyfit.m,2020/8/13,5,(一)子函数和私有函数 1. 主函数和子函数 一个M函数文件中,可包含一个以上函数,其中只有一个是主函数,其它为子函数。 (1) 在一个M函数文件中,主函数必须出现在最上方,其后是子函数,子函数的次序无任何限制; (2) 子函数不能被其它文件的函数调用,只能被同一文件中的函数(可以是主函数或子函数)调用; (3)

5、 同一文件的主函数和子函数变量的工作空间相互独立; (4) 用help和lookfor命令不能提供子函数的帮助信息。,二、函数调用和参数传递,2020/8/13,6,程序保存为Ex0511.m文件 function Ex0511( ) % 主函数,调用 “计算并绘制二阶系统时域响应”子函数 z1=0.3; Ex0502(z1); %调用Ex0502 hold on z1=0.5 Ex0502(z1) %调用Ex0502 hold on z1=0.707; Ex0502(z1) %调用Ex0502 function y=Ex0502(zeta) %子函数,计算并绘制二阶系统时域响应 x=0:0.

6、1:20; y=1-1/sqrt(1-zeta2)*exp(-zeta*x).*sin(sqrt(1-zeta2)*x+acos(zeta) plot(x,y),例3:编写绘制具有不同阻尼系数的二阶系统时域曲线的M函数文件,欠阻尼系统的时域输出y与x的关系为,,,2020/8/13,7,2. 私有函数 私有函数是指存放在private子目录中的M函数文件,具有以下性质: (1) 在private目录下的私有函数,只能被其父目录的M函数文件所调用,而不能被其它目录的函数调用,对其它目录的文件私有函数是不可见的,私有函数可以和其它目录下的函数重名; (2) 私有函数父目录的M脚本文件也不可调用私有

7、函数; (3) 在函数调用搜索时,私有函数优先于其它MATLAB路径上的函数。 3.在MATLAB中调用一个函数的搜索顺序 (1)查找是否是子函数; (2)查找是否是私有函数; (3)从当前路径中搜索此函数; (4)从搜索路径中搜索此函数。,(一)子函数和私有函数,2020/8/13,8,(二)局部变量和全局变量 1. 局部变量 局部变量(Local Variables)是在函数体内部使用的变量,其影响范围只能在本函数内,只在函数执行期间存在。 2. 全局变量 全局变量(Global Variables)是可以在不同的函数工作空间和MATALB工作空间中共享使用的变量。用global X定义

8、注意:全局变量在任何定义过的函数中都可以修改,因此不提倡使用全局变量;必须使用时应十分小心,建议把全局变量的定义放在函数体开始,全局变量用大写字符命名。,二、函数调用和参数传递,2020/8/13,9,(三)函数参数的个数 函数的输入输出参数的个数可以通过变量nargin和nargout获得 对于同一个函数名,可以有不同个数的输入参数和输出参数的情况。 nargin返回输入参数的个数 nargout返回输出参数的个数 例4:mean函数和polyfit函数,二、函数调用和参数传递,2020/8/13,10,三种基本的程序结构 顺序结构 循环结构 条件转移结构(选择结构) 已经证明,由以上三种基

9、本结构构成的程序能处理任何复杂的问题 注意:学习时,与C语言的三种基本程序结构的语法做比较,注意相同点和不同点,以便加深理解和容易记忆。,三、程序流程控制,2020/8/13,11,例5: clear all close all clc x1 = 1:0.2*pi:20*pi; y0 = sin(x1); figure plot(x1,y0),(一)、顺序结构,2020/8/13,12,(二)、循环结构,1、for . end循环结构语法: for 循环变量=array循环体 end 说明:循环体被循环执行,执行的次数就是array的列数,array可以是向量也可以是矩阵(其中,array是向

10、量的情况较常用)。循环变量依次取array的各列元素,每取一次循环体执行一次。例6:求出 1+3+5.+100 的值。mysum=0;for n=1:2:100 mysum=mysum+n;end,2020/8/13,13,(二)、循环结构,2、while . end循环结构语法: while 表达式循环体 end 说明:只要表达式为逻辑真,就执行循环体;一旦表达式为假,就结束循环。表达式可以是向量也可以是矩阵(其中,array是向量的情况较常用)。如果表达式为矩阵则当所有的元素都为真才执行循环体。如果表达式为nan(非数),MATLAB认为是假,不执行循环体。例7:计算1+3+5.+100

11、的值。mysum=0;n=1;while n=100 mysum=mysum+n; n=n+2 ;end,2020/8/13,14,1、ifelseend结构 说明:当有多个条件时,条件式1为假再判断elseif的条件式2,如果所有的条件式都不满足,则执行else的语句段n+1,当条件式为真则执行相应的语句段;Ifelseend结构也可以是没有elseif和else的简单结构。,(三)、条件转移结构,2020/8/13,15,2、switchcase开关结构 说明: (1) 将开关表达式依次与case后面的表达式进行比较,如果表达式1不满足,则与下一个表达式2比较,如果都不满足则执行other

12、wise后面的语句段n;一旦开关表达式与某个表达式相等,则执行其后面的语句段;(2) 开关表达式只能是标量或字符串。 (3) case后面的表达式可以是标量、字符串或元胞数组。若是元胞数组则将开关表达式与元胞数组的所有元素比较,只要某个元素与开关表达式相等,就执行其后语句段,(三)、条件转移结构,2020/8/13,16,3、try. catch. end试探结构 说明:首先试探性地执行语句段1,如果在此段语句执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并放弃这段语句,转而执行语句段2中的语句,当执行语句段2又出现错误,则终止该结构。,(三)、条件转移结构,2020/8/13

13、,17,1. break命令 可以使包含break的最内层的for或while语句强制终止,立即跳出该结构,执行end后面的命令,break命令一般和if结构结合使用。 2. continue命令 用于结束本次for或while循环,并继续进行下次循环。 3. return命令 终止当前命令的执行,并且立即返回到上一级调用函数或等待键盘输入命令,可以用来提前结束程序的运行。 注意:当程序进入死循环,则按Ctrl+break键来终止程序的运行。,(四)、流程控制语句,2020/8/13,18,4. pause命令 用来使程序运行暂停,等待用户按任意键继续。 5. keyboard命令 用来使程序

14、暂停运行,等待键盘命令,执行完自己的工作后,输入return语句,程序就继续运行。 6. input命令 用来提示用户应该从键盘输入数值、字符串和表达式,并接受该输入。 例11: a=input(input a number:) input a number: 45 b = a+20;,(四)、流程控制语句,2020/8/13,19,(一)P码文件 1. P码文件的生成 使用pcode命令生成,生成的P码文件与原M文件名相同,扩展名为“.p” 语法: pcode Filename.m %在当前目录生成Filename.p pcode Filename.m -inplace %在Filename

15、.m所在目录生成Filename.p 例12:pcode Ex0517.m %当前目录就生成了P码文件Ex0517.p。 2. P码文件的特点 (1) P码文件的运行速度比原M文件速度快 (2) 存在同名的M文件和P码文件时,则P码文件被调用 (3) P码文件保密性好:用字处理软件打开Ex0517.p文件,看到的是乱码。,四、M文件性能的优化和加速,2020/8/13,20,(二)M文件性能优化 1. 使用循环时,提高速度的措施 (1) 尽量用向量的运算来代替循环操作。 (2) 使用多重循环时,如果两个循环执行次数不同,建议在循环的外环执行循环次数少的,内环执行循环次数多的,也可以显著提高速度

16、。 (3) 应用Mex技术 考虑用其他语言,如C或Fortran语言,按照Mex技术要求的格式编写相应部分的程序,然后通过编译联接,形成在MATLAB可以直接调用的动态链接库(DLL)文件,这样就可以显著地加快运算速度(在8.1.1小节介绍)。 2. 大型矩阵的预先定维 3. 优先考虑内在函数 因为内在函数是由更底层的C语言构造的,其执行速度显然很快。 4. 采用高效的算法 5. 尽量使用M函数文件代替M脚本文件,四、M文件性能的优化和加速,2020/8/13,21,(三)程序剖析、JIT(Just In Time)和加速器 1. 程序性能剖析窗口 Profiler (1) 打开程序性能剖析窗

17、口Profiler (2) 对MATLAB的命令进行剖析 在Profiler中的“命令输入栏”中输入需要剖析的命令或者是m文件名(需是当前目录下的),然后单击“Start Profiling”按钮,则指示灯变为绿色,“Start Profiling”按钮变灰色,时间指示器的计时在累加;当命令运行结束时,状态恢复,并出现剖析报告。 (3) 查看剖析报告并根据报告做程序的优化 在 “剖析分析汇总表”(Profile Summary),从上到下按占用时间的多少排列。 例13: chapter2_1.m的剖析,四、M文件性能的优化和加速,2020/8/13,22,2. JIT(Just In Time

18、)和加速器 (1). JIT和加速器的加速范围 只对维数不超过3的“非稀疏”数组起作用; 只对“双精度”、“整数”、“字符串”和“逻辑”等四种数据类型起作用; 只对内部函数的调用起作用,对用户的M函数或MEX文件不起作用; 只对控制语句for、while、if、elseif、switch中标量运算的条件表达式起作用; 当一行程序中含有“不可加速的”命令或变量时,整行都不被加速; 当变量改变数据类型或维数,则该语句不被加速; 如果i和j不以虚数单位形式使用,则该语句不被加速; 在Intel系列CPU硬件上,Windows和Linux系统加速能力最强,(三)程序剖析、JIT和加速器,2020/8/13,23,2. JIT(Just In Time)和加速器 (2). JIT和加速器的开关函数 MATLAB6.5版总是把JIT和加速器置于开启状态,可以使用命令来控制JIT和加速器的开启和关闭。 语法: f

温馨提示

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

评论

0/150

提交评论