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

下载本文档

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

文档简介

1、1,matlab的程序设计, matlab语言称为第四代编程语言,程序简洁、可读性很强而且调试十分容易。 是matlab重要组成部分。,2,m文件简介,用户如想灵活应用matlab去解决实际问题,充分调用matlab的科学技术资源,就需要编辑m文件 包含matlab语言代码的文件称为m文件,其扩展名为m。 编辑m文件可使用各种文本编辑器。,3,一、matlab的工作模式,指令驱动模式 通常matlab以指令驱动模式工作,即在matlab 窗口下当用户输入单行指令时,matlab 立即处理这条指令,并显示结果,这就是matlab命令行方式。 命令行操作时,matlab窗口只允许一次执行一行上的一

2、个或几个语句。,4,命令行方式程序可读性差,而且不能存储,对于复杂的问题,应编写成能存储的程序文件。 m文件模式 将matlab语句构成的程序存储成以m为扩展名的文件,然后再执行该程序文件,这种工作模式称为程序文件模式。 程序文件不能在指令窗口下建立,因为指令窗口只允许一次执行一行上的一个或几个语句。,5,m文件编辑器缺省设置是 c:windowsnotepad.exe 还可设成:c:windowswrite.exe c: c:program fileofficewinword.exe 注意:所创建的m文件必须纳入matlab搜索路 径后,才能在matlab命令窗口运行。,6,函数与M文件,二

3、、函数文件 函数接收输入参数,返回输出参数。函数文件也是以“.m”为扩展名。 三、程序文件与函数文件的主要区别 函数允许通过数值进行参数传递,而且函数使用局部变量而不是全局变量操作。 函数文件的第一行必须包括“function”这个关键字。函数文件的文件名必须和函数定义的函数名称相同。,7,MATLAB的函数M文件通常由以下几个部分组成 (1) 函数定义行 函数M文件的第一行用关键字“function”把M文件定义为一个函数并指定它的名字,并且与文件名必须相同,同时定义了函数的输入和输入参数。输入参数的定义用小括号(),如果有多个输入参数则用逗号分隔;输出参数的定义用中括号,如果有多个输出参数

4、则用逗号分隔。 (2)函数帮助文本 帮助文本指位于H1行之后函数体之前的说明文本,它同样以“%”符号开头,一般用来比较详细地介绍函数的功能和用法。在命令窗口用help命令时将显示函数的H1行和所有帮助文本 (3)函数体 是函数的主体部分,包括进行运行和赋值操作的所有MATLAB程序代码,其中可以有流程控制、输入输出、计算、赋值、注释以及函数调用等操作。 (4)注释 除了函数开始独立的帮助文本外,还可以在函数体中添加对语句的注释。注释必须以“%”符号开头,MATLAB在编译执行M文件时把每一行中“%”后面的全部内容作为注释不进行编译。,8,函数的基本结构,9,函数文件在运行过程中产生变量都存放在

5、函数本身的工作空间中。 当文件执行完最后一条命令,或遇到return命令时结束函数的运行,同时函数工作空间的变量被清除。 函数的工作空间随具体的M函数文件调用而产生,随调用结束而删除,是独立的、临时的,在MATLAB运行过程中可以产生任意多个临时的函数空间。,M文件的函数通过函数调用才会被执行,函数执行时:,10,例:在M文件编辑/调试器窗口中编写计算二阶系统时域响应的M函数文件,并在命令窗口调用该文件。,(1)编写函数代码,function y=ex0502(zeta) %ex0502画二阶系统时域曲线 x=0:0.1:20; y=1-1/sqrt(1-zeta2)*exp(-zeta*x)

6、.*sin(sqrt(1-zeta2)*x+acos(zeta); plot(x,y),(2)在命令窗口,y=ex0502(0.1),(1)输入阻尼系数,输出时域响应;(2)函数文件调用结束后查看x,y (3)运行时在plot(x,y)行设置断点,查看变量,11,子函数 一个M文件中可以定义多个函数,其中第一个定义的函数称为主函数,主函数名必须与M文件名相同,其它函数称为子函数;子函数只能被定义它的文件中的函数调用,其它函数和文件不能调用;同一文件的主函数和子函数变量工作空间相互独立;help和lookfor命令不提供子函数帮助信息。,私有函数 存放在private子目录中的M函数文件,具有性

7、质:在private目录下的私有函数,只能被其父目录的M函数文件调用,对其他目录的文件私有函数是不可见的,可以和其他目录下的函数重名;私有函数父目录的M脚本文件也不可调用私有函数;在函数调用搜索时,私有函数优先于其他MATALB路径上的函数。,调用函数搜索顺序 查找是否子函数 查找是否私有函数 从当前路径搜索此函数 从搜索路径中搜索此函数,12,例:将画二阶系统时域曲线的函数作为子函数,编写画多条曲线的程序,function Ex0511() %使用函数调用绘制二阶系统时域响应 z1=0.3; ex0502(z1); hold on z1=0.5; ex0502(z1); z1=0.7; ex

8、0502(z1);,主函数是Ex0511,子函数是ex0502,在主函数中3次调用子函数,exp2_9.m,13,局部变量和全局变量,(1)局部变量是在函数体内部使用的变量,其影响范围只能在本函数内,仅存在于函数的工作空间内,只在函数执行期间存在,函数执行完变量消失。 (2)全局变量是可以在不同函数工作空间和MATLAB工作空间中共享使用的变量。在使用前必须用global定义,而且每个要共享全局变量的函数和工作空间,都必须逐个用global对变量加以定义。,exp2_10.m,14,例:修改Ex0511,在主函数和子函数中使用全局变量,function Ex0512() global X X=

9、0:0.1:20; z1=0.3; ex0502(z1); hold on z1=0.5; ex0502(z1); z1=0.707; ex0502(z1),function y=ex0502(zeta) global X y=1-1/sqrt(1-zeta2)*exp(-zeta*x).*sin(sqrt(1-zeta2)*x+acos(zeta); plot(X,y),在需要使用的主函数和子函数中都需要定义,注意:由于全局变量在任何定义过的函数中都可以修改,因此不提倡使用全局变量;使用时必须十分小心,建议定义在函数体的开始,用大写字符命名,15,函数的参数,在MATLAB中,函数具有自己的

10、工作空间,函数内变量与外界的唯一联系就是通过函数的输入/输出参数。输入参数在函数中的任何变化,都仅在函数内进行,不会传递回去。,1.参数传递规则:,例:将Ex0511画二阶系统时域的函数修改,使用输入/输出参数来实现参数传递。,16,function Ex0513() %参数传递绘制二阶系统时域响应 z1=0.3; x1,y1=ex0502(z1); plot(x1,y1) hold on z1=0.5; x2,y2=ex0502(z1); plot(x2,y2) z1=0.7; x3,y3=ex0502(z1); plot(x3,y3),function x,y= ex0502(zeta)

11、x=0:0.1:20; y=1-1/sqrt(1-zeta2)*exp(-zeta*x).*sin(sqrt(1-zeta2)*x+acos(zeta);,17,1.函数参数的个数:,MATLAB函数的调用有一个与其他语言不同的特点:函数的输入/输出参数的数目都可以变化,用户可以根据参数的个数来编程。 (1)nargin变量和nargout变量。 nargin %在函数体内获取实际输入变量个数 nargout %在函数体内获取实际输出变量个数 nargin(fun) %在函数体外获取定义的输入参数个数 nargout(fun) %在函数体外获取定义的输出参数个数,18,例:计算2个数的和,根据

12、输入的参数个数不同使用不同的运算表达式。,function sum=Ex0514(x,y) if nargin=1 sum=x+0; else if nargin=0 sum=0; else sum=x+y end end,sum=Ex0514(1,2) sum=Ex0514(1) sum=Ex0514(1,2,3) nargin(Ex0514),19,function sum=Ex0514(x,y) if nargin=1 sum=x+0; else if nargin=0 sum=0; else sum=x+y end end if nargout=0 sum=0 end,Ex0514(2

13、,3),y=Ex0514(2,3),y,n=Ex0514(2,3),20,可变输入输出个数,【例2-20】 可以计算两个多项式的积 用 varargin 实现任意多个多项式的积,21,inline函数与匿名函数,有时,为了描述某个数学函数的方便,可以用inline( )函数直接编写该函数。形式相当于前面介绍的M-函数,但无需编写一个真正的Matlab文件,就可以描述出某种数学关系。 注意:不支持结构复杂的语句结构,只支持一个语句就能求出的函数值形式,22,inline 函数,可以免去文件 MATLAB 7.0,f=inline(sin(x.2+y.2),x,y),23,一、 MATLBA程序的

14、基本设计原则 1、后面的内容是程序的注解,要善于运用注解使程序更具可读性。 2、养成在主程序开头用clear指令清除变量的习惯,以消除工作空间中其他变量对程序运行的影响。但注意在子程序中不要用clear。 3、参数值要集中放在程序的开始部分,以便维护。要充分利用MATLAB工具箱提供的指令来执行所要进行的运算,在语句行之后输入分号使其及中间结果不在屏幕上显示,以提高执行速度。,24,4、input指令可以用来输入一些临时的数据;而对于大量参数,则通过建立一个存储参数的子程序,在主程序中用子程序的名称来调用。 5、程序尽量模块化,也就是采用主程序调用子程序的方法,将所有子程序合并在一起来执行全部

15、的操作。 6、充分利用Debugger来进行程序的调试(设置断点、单步执行、连续执行),并利用其他工具箱或图形用户界面(GUI)的设计技巧,将设计结果集成到一起。 7、设置好MATLAB的工作路径,以便程序运行。,25,8、MATLAB程序的基本组成结构 说明 清除命令:清除workspace中的变量和图形(clear,close) 定义变量:包括全局变量的声明及参数值的设定 逐行执行命令:指MATLAB提供的运算指令或工具箱提供的专用命令 控制循环 :包含for,if then,switch,while等语句 逐行执行命令 end 绘图命令:将运算结果绘制出来 当然更复杂程序还需要调用子程序

16、,或与simulink以及其他应用程序结合起来。,26,matlab的程序结构,matlab语言的程序结构与其它高级语言是一致的,分为顺序结构,循环结构,分支结构。 (1).顺序结构 依次顺序执行程序的各条语句 (2).循环结构 被重复执行的一组语句,循环是计算机解决问题的主要手段。 (3)条件转移 (4)开关结构 (5)试探结构(新),27,循环结构,for 结构 while 结构,28,步长缺省值为1,可以在正实数或负实数范围内任意指定。对于正数,循环变量的值大于终止值时,循环结束;对于负数,循环变量的值小于终止值时,循环结束。循环结构可以嵌套使用。 书写格式不必太过于拘泥,在Editor

17、编辑器中会自动进行处理。,1、for循环语句 基本格式 for 循环变量起始值:步长:终止值 循环体 end,29,求 的值,30, while end 循环 while循环将循环体中的语句循环执行不定次数。 语法为:while 表达式 循环体语句 end 表达式一般是由逻辑运算和关系运算以及一般运算组成的,以判断循环的进行和停止;只要表达式的值 非0,继续循环;直到表达式值为0,循环停止。,31,While循环和for循环的区别在于,while循环结构的循环体被执行的次数不是确定的,而for结构中循环体的执行次数是确定的。,32,例 求满足 的最小 值,while循环,for语句,编写函数供

18、以后调用,33,从键盘输入若干个数,当输入为0时结束输入,求这些数的平均值和它们的和。 分析:数字的数目不确定,0为循环结构的结束条件,因此选用while结构实现,例exp2_22.m,与循环语句相关的还有break语句,当在循环体内执行到该语句时,则程序将无条件跳出本层循环。,34,转移结构,35,这种结构实现了一种多路选择,比较复杂。可替代一般高级语言中的switch-case-end语句,36,计算分段函数 的值。 求分段函数 的值,例exp2_18.m,例exp2_19.m,37,例:根据阻尼系数绘制不同二阶系统的时域响应(调用子函数),,当,时,时,当,时,当,38,function

19、 y=Ex0516(z1) t=0:0.1:20; if (z1=0) else y=plotxy3(z1,t) end,function y1=plotxy1(zeta,x) y1=1-(1/sqrt(1-zeta2)*exp(-zeta*x).*sin(sqrt(1-zeta2)*x+acos(zeta); plot(x,y1),function y2=plotxy2(zeta,x) y2=1-exp(-x).*(1+x); plot(x,y2),function y3=plotxy3(zeta,x) y3=1-1/(2*sqrt(zeta2-1)*(exp(-(zeta-sqrt(zet

20、a2-1)*x)./(zeta-sqrt(1-zeta2). -exp(-(zeta+sqrt(zeta2-1)*x)./(zeta+sqrt(1-zeta2); plot(x,y3),y=Ex0516(0.3) hold on y=Ex0516(0.707) y=Ex0516(1.3),39,例:编写的绘制二阶系统时域响应曲线中的调用各子函数,改为利用函数句柄实现。,function y=Ex0521(z1) t=0:0.1:20; h_plotxy1=str2func(plotxy1) h_plotxy2=str2func(plotxy2) h_plotxy3=str2func(plotx

21、y3) if (z1=0) end,40,开关结构,41,42,使用开关语句结构时注意,当开关表达式的值等于表达式1时,将执行语句段1,执行完语句段1后转出开关体,无需像C语言那样在下一个case语句前加break。 当需要在开关表达式满足若干个表达式之一时执行某一程序段,则应该把这样的表达式用大括号括起来,中间用逗号分隔(实际上是定义单元结构) 当前面枚举的各表达式均不满足时,将执行otherwise语句后面的语句段,此语句等价于C语言中default语句。 程序的执行结果和各个case语句的次序无关(当两个case语句包含同样的条件,执行结果则和这两个语句的顺序有关)。 在case语句引导

22、的各个表达式中,不要用重复的表达式,否则列在后面的开关通路将永远不能执行。,43,和 C 语言的区别,当开关表达式的值等于某表达式,执行该语句后结束该结构,不用 break 同时满足若干个条件之一,则用单元形式 otherwise 语句,不是 default 程序的执行结果和各个case顺序无关 case 语句中条件不能重复,否则列在后面的条件将不能执行,44,通过键盘输入百分制成绩,输出成绩的等级。 分析,这是典型的多分支结构问题,可以用switch-case结构实现。程序中90-100分用字符A表示,80-89用字符B表示,70-79用字符C表示,60-69用字符D表示,60分以下用字符E

23、表示,n为键盘输入的成绩分数,例exp2_21.m,45,试探结构,全新结构,本语句结构首先试探性地执行语句段1,若出错,则将错误信息给保留的lasterr变量,放弃这段语句,转而执行语句段2中的语句,这种新的语句结构是C语言所没有的。当试探结构运行结束后,可以调用lasterr函数查询出错原因,空字符表示执行成功。, A=1,2,3;4,5,6; B=7,8,9;10,11,12; try C=A*B; catch C=A.*B; end C,46,循环程序的等价形式,从程序执行的角度考虑,循环程序是重复执行某一段程序,因此一般执行时间较长,从节省时间角度,给出一些循环程序的等价形式的特例。

24、 一般情况下,如果要确切考察程序的执行时间,可在程序开头启动定时器tic,在程序结束读出定时器的时间toc,47,1、数组运算的应用 MATLAB的基本数据单元为数组,定义了矩阵运算和数组运算两种运算,因此考虑两种运算的原理,循环程序在一些特殊情况下可以用数组运算代替。 例:求1100的平方,平方根和立方根。,例exp2_25.m,例exp2_26.m,48,2、逻辑数组的应用 例. 编程求3阶魔方矩阵大于等于5的元素的平方根 方法一:应用二重循环程序实现 方法二:应用逻辑数组实现,例exp2_27.m,例exp2_28.m,49,例. 编程求3阶魔方矩阵大于等于5的元素的平方根,同时对小于5

25、的元素求平方 方法一:应用二重循环程序实现 方法二:应用逻辑数组实现,例exp2_29.m,例exp2_30.m,50,程序性能剖析窗口,使用该窗口对命令运行时间进行分析,找出瓶颈进行改写,直到报告表明绝大多数运行时间花费在MATLAB内部函数上。,(1)打开窗口。选择菜单View-Profiler (2)在命令栏中输入需要剖析的命令,单击start profiling (3)查看剖析报告,从上至下按占用时间排列,查看详细内容,exp2_29,exp2_30输入profiler命令窗口查看明细,51,常用的编程命令(例exp2_8.m),pause:停止m文件的执行直至有键按下。pause(n

26、)将使程序暂停n秒。 echo on/off:控制是否在屏幕上显示程序内容。 keyboard:停止程序执行,把控制权交给键盘。输入return并回车后继续程序执行。 x=input(prompt):把输入的字符串作为提示符,等待使用者输入一个响应,然后把它赋值到x。,52,五、matlab程序流的控制,matlab的控制语句同c语言有相似之处, 但没有c 语言复杂、灵活和多变。因而语法比较简单,容易掌握。 echo 指令 用来控制m文件在执行过程中是否 显示 echo on 打开所有命令文件的显示方式 echo off 关闭所有命令文件的显示方式 echo 在以上两者间切换,53,input 提示用户从键盘输入数值、字符串、表达式。 例:n=input(How many apples= ) How many apples= 5 n = 5 pause 暂停,等待用户响应 可令m文件执行暂停,并在继续执行前按任一个键 。语法:pause ,pau

温馨提示

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

评论

0/150

提交评论