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

下载本文档

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

文档简介

1、MATLAB程序设计程序设计2程序控制结构程序控制结构1 M文件文件3程序调试程序调试1.掌握掌握M文件的特点及功能文件的特点及功能2.编写编写M函数函数文件的基本方法及步骤文件的基本方法及步骤3.掌握常用的几种程序控制结构掌握常用的几种程序控制结构1 M文件文件MATLAB的工作模式的工作模式M文件介绍文件介绍M函数文件相关概念函数文件相关概念 MATLAB的工作模式的工作模式指令指令(命令命令)执行模式执行模式 M文件程序执行方式文件程序执行方式命令执行模式命令执行模式 通常通常matlab以指令驱动模式工作,即在以指令驱动模式工作,即在matlab 命令窗口逐条输入命令,命令窗口逐条输入

2、命令,matlab 立即逐条解释立即逐条解释处理这条指令,并显示结果。处理这条指令,并显示结果。 命令行操作时,命令行操作时,matlab窗口只允许一次执行一窗口只允许一次执行一行上的一个或几个语句。行上的一个或几个语句。特点特点:操作简单、直观,但速度慢,执行过程不:操作简单、直观,但速度慢,执行过程不能保留。能保留。 M文件程序执行方式文件程序执行方式 将将matlab语句构成的程序存储成以语句构成的程序存储成以m为扩展名的文件,为扩展名的文件,然后再执行该程序文件,这种工作模式称为程序文件然后再执行该程序文件,这种工作模式称为程序文件模式。模式。 程序文件不能在命令窗口下建立,因为命令窗

3、口只允程序文件不能在命令窗口下建立,因为命令窗口只允许一次执行一行上的一个或几个语句。许一次执行一行上的一个或几个语句。特点:特点:1)和)和Basic一样是解释性的语言,语法简单、易调试;一样是解释性的语言,语法简单、易调试; 2)和其他语言相比初始运行速度慢,但)和其他语言相比初始运行速度慢,但M文件一经运行便文件一经运行便以代码存放在内存中,再次运行时,将直接从内存中取出运行,以代码存放在内存中,再次运行时,将直接从内存中取出运行,大大提高速度;大大提高速度; 3)M文件扩展了文件扩展了MATLAB的能力,包含一系列工具箱,的能力,包含一系列工具箱,如:自动控制、信号处理、小波分析等。如

4、:自动控制、信号处理、小波分析等。2. M文件文件 用用MATLAB语言编写的程序,称为语言编写的程序,称为M文件文件。(1) M文件的创建和打开文件的创建和打开 m文件的类型是普通的文本文件,可以使用文件的类型是普通的文本文件,可以使用系统认可的文本文件编辑器来系统认可的文本文件编辑器来创建创建m文件。文件。 如如:windows的记事本和的记事本和word等。等。 用用matlab自带的编辑器来自带的编辑器来创建创建m文件。文件。(建建议使用议使用)。 单击桌面图标单击桌面图标 ,或选中,或选中File:New:M-File ,或在命令窗输入指令,或在命令窗输入指令edit,都可以,都可以

5、打开空白打开空白的的M文件编辑器;点击文件编辑器;点击 ,打开已有打开已有的的M文件。文件。(2) M文件的分类文件的分类 M文件有两类:文件有两类:命令文件命令文件(脚本文件脚本文件)和和函数函数文件文件。它们的扩展名均为。它们的扩展名均为.m。 命令文件:将用户在命令文件:将用户在MATLAB环境下直接输入的多条环境下直接输入的多条语句或者命令语句或者命令,存存 放为放为 .m 后缀的文件,在命令行键入后缀的文件,在命令行键入文件名,来替代在命令窗口输入多条语句,一次执行成文件名,来替代在命令窗口输入多条语句,一次执行成批命令。批命令。函数文件:它是有特定书写规范的函数文件:它是有特定书写

6、规范的M文件。如果文件。如果M文件文件第一行包含第一行包含function, 则此文件为函数文件。每个函数则此文件为函数文件。每个函数文件都定义一个函数。用来文件都定义一个函数。用来扩充扩充Matlab的应用范围和满的应用范围和满足用户不同的实际需求。足用户不同的实际需求。M命令文件与函数文件的区别命令文件与函数文件的区别: (1)命令文件没有定义行,函数文件必须有定义行;)命令文件没有定义行,函数文件必须有定义行; (2)命令文件没有输入和输出变量,函数文件有输入和)命令文件没有输入和输出变量,函数文件有输入和输出变量;输出变量; (3)命令文件命令文件运行中可以调用工作空间中的数据,运行运

7、行中可以调用工作空间中的数据,运行中产生的变量为中产生的变量为全局变量全局变量。函数文件函数文件不能调用工作空间中不能调用工作空间中的数据,运行中产生的变量为的数据,运行中产生的变量为局部变量局部变量; (4)命令文件可以直接运行,函数文件不能直接运行,)命令文件可以直接运行,函数文件不能直接运行,而要以函数调用的方式来调用它。而要以函数调用的方式来调用它。 (5)命令文件的变量被保存)命令文件的变量被保存 在在 内存,而函数文件内定内存,而函数文件内定义的变量仅在函数内部起作用,执行完毕变量被擦出。义的变量仅在函数内部起作用,执行完毕变量被擦出。 3 . 关于编写关于编写M命令命令文件文件步

8、骤:步骤: 1)选取一种方式创建一个命令文件;)选取一种方式创建一个命令文件; 2)save as,注意必须该注意必须该M命令文件所在目录成为当前目命令文件所在目录成为当前目录;录; 3)运行)运行M命令文件:点击命令文件:点击Debug-Save and run;或;或者在命令窗口直接输入命令文件名,者在命令窗口直接输入命令文件名,注意要省略它的后注意要省略它的后缀名。缀名。4 . 关于关于M函数函数文件的构成、调用文件的构成、调用M函数文件第一行必须包含函数文件第一行必须包含function。(1)M函数文件一般由以下五个部分函数文件一般由以下五个部分构成构成: 1)函数定义行)函数定义行

9、格式为:格式为:function 输出参数输出参数=函数名函数名(输入参数)输入参数) 函数定义行,它表明该函数定义行,它表明该M文件包含一个文件包含一个函数函数,并且定义并且定义函数名函数名、输入和输出参数输入和输出参数。 例如:例如:“function f =limit (f,x,a)”,就是函数,就是函数limit的定义行,其中的定义行,其中function为关键字,为关键字,f为输出参为输出参数,数,limit为函数名,为函数名,f,x,a为输入参数。为输入参数。 2)H1行行 指帮助信息的第一行,在文件中的位置是第指帮助信息的第一行,在文件中的位置是第二行。这一行应该反映该二行。这一

10、行应该反映该M文件概括性的信息文件概括性的信息,是是该该M文件非常重要的信息,在文件非常重要的信息,在Matlab命令窗口中命令窗口中键入键入lookfor(查找)命令语句时,便搜索和显示(查找)命令语句时,便搜索和显示该行内容。该行内容。 3)帮助正文)帮助正文 从从H1行到第一个非注释性之间的注释为帮助行到第一个非注释性之间的注释为帮助正文,对文件查询帮助信息时,将显示正文,对文件查询帮助信息时,将显示H1行和帮行和帮助正文。助正文。 4)函数体)函数体(完成函数的功能,并非狭义的函数完成函数的功能,并非狭义的函数) 函数体包含了所有执行计算和赋值输出参数的函数体包含了所有执行计算和赋值输

11、出参数的 Matlab 代码。它可以是调用函数、流程控制、计代码。它可以是调用函数、流程控制、计算表达式、赋值、注释等内容。算表达式、赋值、注释等内容。 5)注释)注释 注释语句以百分号注释语句以百分号(%)开头,它可以出现在开头,它可以出现在M文件的任何地方,文件的任何地方, 用户也可以在一行代码的后面用户也可以在一行代码的后面加注解语句。加注解语句。 例例 编写函数文件求半径为编写函数文件求半径为r的圆的面积和周长。的圆的面积和周长。 (exfcircle.m)(2)M函数参数的函数参数的调用调用与参数传递与参数传递 在在MATLAB中,按照自顶向下、逐步求解的结构化中,按照自顶向下、逐步

12、求解的结构化程序设计。程序设计。M函数可以使程序模块化,且可通过函数调用函数可以使程序模块化,且可通过函数调用实现控制转移和相互的参数传递。实现控制转移和相互的参数传递。1)函数调用)函数调用 完整函数调用的命令格式:完整函数调用的命令格式:输出参数输出参数1,输出参数,输出参数2,=函数名(输入参数函数名(输入参数1,输入参数输入参数2)2)参数传递)参数传递 在调用函数时,在调用函数时,MATLAB用两个永久变量用两个永久变量nargin和和nargout分别记录调用该函数时的输入实参和输出实参的分别记录调用该函数时的输入实参和输出实参的个数。在函数文件中包含这两个变量,就可以准确地知道个

13、数。在函数文件中包含这两个变量,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函数该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理。如何进行处理。例:练习例:练习nargin用法用法,exnargin和和qhnargin6 . M函数函数文件的命名、规则文件的命名、规则 (1)Matlab对函数名的限制和对变量名的限制相同,对函数名的限制和对变量名的限制相同,Matlab只识别名字的前只识别名字的前31个字符;个字符; (2)函数名必须以字母开头,其余的字符可以是字母、)函数名必须以字母开头,其余的字符可以是字母、数字和下划线,有些操作系统可能会限制函数名的长度;

14、数字和下划线,有些操作系统可能会限制函数名的长度; (3)函数的文件名一般应该与函数名相同,即由函数)函数的文件名一般应该与函数名相同,即由函数名加上后缀名加上后缀“.m”组成;组成; (4)当函数的文件名和函数定义行的函数名不一样时,)当函数的文件名和函数定义行的函数名不一样时,Matlab将忽略函数名而确认文件名。不过最好将它们统将忽略函数名而确认文件名。不过最好将它们统一,以免出错。一,以免出错。7. M函数函数文件的相关概念文件的相关概念(1)局部变量)局部变量 局部变量只存在于单个函数工作空间,它产生于局部变量只存在于单个函数工作空间,它产生于该函数的运行过程当中,与其它函数是隔离的

15、。该函数的运行过程当中,与其它函数是隔离的。(2)全局变量)全局变量 用用 global 指令,就可以把一个变量定义为几个不指令,就可以把一个变量定义为几个不同函数和基本工作空间共享的同一个变量,即全局变同函数和基本工作空间共享的同一个变量,即全局变量。如果在当前工作空间已经存在了相同的变量,量。如果在当前工作空间已经存在了相同的变量, 系系统会出现警告。习惯上讲全局变量定义为大写字母,统会出现警告。习惯上讲全局变量定义为大写字母, 如:如:global A B C 全局变量存在整个全局变量存在整个workspace工作空间,所有的函工作空间,所有的函数都可以对其进行调用和修改。数都可以对其进

16、行调用和修改。 可以在若干函数中把某一变量定义为全局变量,那么可以在若干函数中把某一变量定义为全局变量,那么这些函数将公用这个变量,所有函数都可以对其存取和修这些函数将公用这个变量,所有函数都可以对其存取和修改。改。 函数文件的内部变量是局部的,而命令文件的内部变函数文件的内部变量是局部的,而命令文件的内部变量是全局变量。量是全局变量。 全局变量的作用域,即全程有效。因此是整个工作区全局变量的作用域,即全程有效。因此是整个工作区间函数之间传递数据的一个方式。间函数之间传递数据的一个方式。 1)简单编制一个求矩阵的加法的)简单编制一个求矩阵的加法的function函数,函数,定义全局变量定义全局

17、变量G1=10,其中矩阵分别为:,其中矩阵分别为: a=1 1;2 2, b=3 3;4 4。 qhjiafa.m 2)再编制一个求矩阵乘法的)再编制一个求矩阵乘法的function函数,计函数,计算结果,体会全局变量的作用。算结果,体会全局变量的作用。qhchengfa.m 注意:注意:程序设计中程序设计中,全局变量固然可带来某些方便,全局变量固然可带来某些方便,但却破坏了函数对变量的封装,降低了程序的可读性和但却破坏了函数对变量的封装,降低了程序的可读性和可靠性;可靠性; 不提倡用全局变量,一定要用的话最好取个不提倡用全局变量,一定要用的话最好取个能反映变量含义的名字,以免混淆。能反映变量

18、含义的名字,以免混淆。例例:全局变量应用示例全局变量应用示例注意问题:注意问题:1. 函数函数m文件第一行必须以单词文件第一行必须以单词function作为引作为引导词,表示该导词,表示该M文件是一个函数文件,必须遵文件是一个函数文件,必须遵循如下形式:循如下形式: function 输出参数输出参数=函数名函数名(输入参数)输入参数)2. 函数名的命名规则与变量名相同,函数名的命名规则与变量名相同,m文件的文文件的文件名必须是件名必须是 .m。3. 程序中的变量均为局部变量,不保存在工作程序中的变量均为局部变量,不保存在工作空间中。空间中。 其变量只在函数运行期间有效。其变量只在函数运行期间

19、有效。(2) (插播)(插播)matlab的数据文件的数据文件.mat mat文件是文件是matlab以标准二进制格式保存的数据以标准二进制格式保存的数据文件,可将工作空间中有用的文件,可将工作空间中有用的数据变量数据变量保存下来。保存下来。 mat文件的生成和调用是由函数文件的生成和调用是由函数save和和load完成完成的。的。顺序结构顺序结构选择结构选择结构循环结构循环结构2程序控制结构程序控制结构 顺序结构顺序结构数据的输入输出数据的输入输出 (1) 数据的输入数据的输入input命令:从键盘输入数据该函命令:从键盘输入数据该函数的调用格式为:数的调用格式为: A=input(提示信息

20、,提示信息,s);提示信息用于提示用户输入什么类型的提示信息用于提示用户输入什么类型的数据数据。若加若加s-选项,则允许输入字符串,比如:选项,则允许输入字符串,比如: a=input(name?,张三张三),否则,不可。,否则,不可。 (2)数据的输出数据的输出disp命令:显示器输出数据其调用命令:显示器输出数据其调用格式为格式为: disp(输出项输出项) 其中输出项既可以为字符串,也可以为矩阵。其中输出项既可以为字符串,也可以为矩阵。用用disp输出的显示方式不同,比较紧凑,没有矩阵名字。输出的显示方式不同,比较紧凑,没有矩阵名字。例例:求一元二次方程求一元二次方程ax2+bx+c=0

21、的根。的根。(exdisp.m) (3) 数据的暂停数据的暂停暂停程序的执行可以使用暂停程序的执行可以使用pause函数,其调用格式为:函数,其调用格式为:pause(延迟秒数延迟秒数)如果省略延迟时间,直接使用如果省略延迟时间,直接使用pause,则将暂停程序,则将暂停程序,直到用户按任一键后程序继续执行。直到用户按任一键后程序继续执行。 若要强行中止程序的运行可使用若要强行中止程序的运行可使用Ctrl+C命令。命令。2. 选择结构选择结构(1) 条件分支语句条件分支语句if语句语句 在在MATLAB中,中,if语句有语句有3种格式。种格式。 1) 单分支单分支if语句:语句: if 条件条

22、件 语句组语句组 end 2)双分支)双分支if语句:语句: if 条件条件 语句组语句组1 else 语句组语句组2 end3) 多分支多分支if语句语句(如果(如果-那么那么-否则)否则)if 条件条件1 语句组语句组1 elseif 条件条件2 语句组语句组2 elseif 条件条件m 语句组语句组m else 语句组语句组n end 语句用于实现多分支选择结构,注意此结构的条件语句用于实现多分支选择结构,注意此结构的条件优先问题。(优先问题。(exif.m)(2)switch语句语句switch 表达式表达式 (开关量)(开关量) case 表达式表达式1 (情况(情况1) 语句组语句

23、组1 case 表达式表达式2 语句组语句组2 case 表达式表达式m 语句组语句组m otherwise 语句组语句组n end 与与c不同的是,在不同的是,在switch结构中,如果第一个结构中,如果第一个case条条件满足,那么执行完对应的语句体后直接执行件满足,那么执行完对应的语句体后直接执行end后的后的语句,而不再判断其它语句,而不再判断其它case。 (exswitch.m)(3)try语句(试探式语句)语句(试探式语句)语句格式为:语句格式为: try 语句组语句组1 catch 语句组语句组2 end try语句先试探性执行语句组语句先试探性执行语句组1,如果语句组,如果语

24、句组1在执行在执行过程中出现错误,则将错误信息赋给保留的过程中出现错误,则将错误信息赋给保留的 lasterr 变变量,并转去执行语句组量,并转去执行语句组2。 例:例: 矩阵乘法运算要求两矩阵的维数相容,否则会矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。(阵的点乘。(extry.m)3. 循环结构循环结构(1)硬循环语句)硬循环语句for语句,知道循环次数,无条件语句,知道循环次数,无条件循环。循环。for语句的格式为:语句的格式为: for 循环变量(循环变量(x=初值初值:步长步长:终值

25、)终值) 循环体语句循环体语句 end 每个每个for和一个和一个end配对。配对。 (exfor.m)(2)条件循环语句)条件循环语句while语句,不确定循环次数语句,不确定循环次数(当(当-就就-) while语句的一般格式为:语句的一般格式为: while (条件条件) 循环体语句循环体语句 end例例 求阶乘大于或等于求阶乘大于或等于9999的最小整数(的最小整数(exwhile.m) 若条件成立,则执行循环体语句,执行后在判断若条件成立,则执行循环体语句,执行后在判断条件是否成立,如果不成立跳出循环。只做条件满足条件是否成立,如果不成立跳出循环。只做条件满足的事情。的事情。(3)循

26、环的嵌套)循环的嵌套 如果一个循环结构的循环体又包括如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或一个循环结构,就称为循环的嵌套,或称为多重循环结构。称为多重循环结构。exfor.m(4)break语句和语句和continue语句语句它们一般与它们一般与if语句配合使用。语句配合使用。break语句用于语句用于终止终止循环的执行。循环的执行。 当在循环体当在循环体内执行到该语句时,程序将跳出循环,继续执内执行到该语句时,程序将跳出循环,继续执行循环语句的下一语句。行循环语句的下一语句。continue语句控制语句控制跳过跳过循环体中的某些语句。循环体中的某些语句。 当在循环体

27、内执行到该语句时,程序将跳过循当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续下一次循环。环体中所有剩下的语句,继续下一次循环。例例:求求100,200之间第一个能被之间第一个能被21整除的整数整除的整数(exbreak.m)编程提醒编程提醒 (1)计算过程中,当有些中间变量(或不重要的变)计算过程中,当有些中间变量(或不重要的变量)的值我们不想显示时,就在命令后面加上分号量)的值我们不想显示时,就在命令后面加上分号“;” (2)多条命令可以写在同一行,只需要用逗号或分)多条命令可以写在同一行,只需要用逗号或分号将它们隔开;号将它们隔开; (3)有时某些命令或者数据在一行不能全部显示,)有时某些命令或者数据在一行不能全部显示,或者是为了形式上的美观,我们可以在必要的地方加上或者是为了形式上的美观,我们可以在必要的地方加上续行符(续行符(“”),当然一个数字或者字符串(变量名或),当然一个数字或者字符串(变量名或者函数名等)不能断成两行;者函数名等)不能断成两行; (4)编写的程序中,需

温馨提示

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

评论

0/150

提交评论