第4章MATLAB中M文件和程序设计_第1页
第4章MATLAB中M文件和程序设计_第2页
第4章MATLAB中M文件和程序设计_第3页
第4章MATLAB中M文件和程序设计_第4页
第4章MATLAB中M文件和程序设计_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章第四章 M文件和程序设计文件和程序设计主要内容主要内容4.1 程序控制语句程序控制语句4.2 命令文件和函数文件命令文件和函数文件4.3 字符串的求值字符串的求值4.4 程序性能优化程序性能优化4.5 面向对象编程面向对象编程4.1 程序控制语句程序控制语句一、分支控制一、分支控制分支控制语句有分支控制语句有if和和switch两种语句两种语句if结构结构 if expressioncommands end【说明】【说明】当表达式当表达式expression的值为真,则执行的值为真,则执行commands语句语句组,否则跳过组,否则跳过commands语句组,执行语句组,执行end之后的

2、语句。之后的语句。4.1 程序控制语句程序控制语句if-else结构结构 if expression commands1 else commands2 end【说明】【说明】如果表达式如果表达式expression的值为真,的值为真,则执行语句组则执行语句组 commands1,然后跳过语句组然后跳过语句组commands2向下执行;向下执行;若表达式若表达式expression的值为假,的值为假,则跳过语句组则跳过语句组commands1,执行语句组执行语句组commands2。 4.1 程序控制语句程序控制语句if-elseif-else结构结构 if expression_1 comma

3、nd_1 elseif expression_2 command_2 elseif expression_n command_n else command_el end 【说明】【说明】 如果表达式如果表达式expression_1的值为真,则执行语句组的值为真,则执行语句组command_1,若表达式,若表达式expression_1的值为假,的值为假,则判断则判断expression_2的值,的值,若为真,则执行语句组若为真,则执行语句组command_2,否则向下继,否则向下继续判断表达式。如果所有续判断表达式。如果所有表达式都为假,则执行语表达式都为假,则执行语句组句组command_

4、el。4.1 程序控制语句程序控制语句例例4.1.14.1.1: 有分段函数有分段函数 341( )11sincos1xxxf xexxxx 计算并显示函数值。计算并显示函数值。编程输入编程输入x x的值,的值,switch-case结构结构 switch exp_const case value_1 commands_1 case value_2 commands_2 case value_n commands_n otherwise commands_ow end 4.1 程序控制语句程序控制语句【说明】【说明】表达式表达式exp_const的值和哪一个的值和哪一个case语句后的测试值相

5、等,就执行语句后的测试值相等,就执行那个那个case语句下的语句组。如果语句下的语句组。如果exp_const和所有测试值都不相等,和所有测试值都不相等,就执行就执行otherwise后的语句组后的语句组commands_ow。switch后的后的exp_const表达式可以为标量或者字符串。对于标量形表达式可以为标量或者字符串。对于标量形式,用关系运算符式,用关系运算符“= =”比较,对于字符串形式,用函数比较,对于字符串形式,用函数strcmp比较。比较。case语句后的语句后的value_n值可以是标量、字符串,也可以是细胞数组。值可以是标量、字符串,也可以是细胞数组。如果是细胞数组,如

6、果是细胞数组,Matlab会把表达式会把表达式exp_const的值和的值和细胞数组中的每个元素比较,只要有一个元素和细胞数组中的每个元素比较,只要有一个元素和exp_const值相同,比较结果就为相等。值相同,比较结果就为相等。4.1 程序控制语句程序控制语句二、循环控制二、循环控制for循环循环 for x=Array commands end【说明】【说明】 x称为循环变量,称为循环变量,commands称为循环体。循环称为循环体。循环的执行步骤是:循环变量从左到右依次取的执行步骤是:循环变量从左到右依次取Array数数组的一列,每取一列就执行一次循环体,循环体组的一列,每取一列就执行一

7、次循环体,循环体被执行的次数为被执行的次数为Array的列数。的列数。for循环一般用于循环一般用于循环次数已知的程序流程控制循环次数已知的程序流程控制 。4.1 程序控制语句程序控制语句while循环循环 while expression commands end【说明】【说明】 先判断表达式先判断表达式expression的值,如果其值为真,则执行的值,如果其值为真,则执行 commands循环体;执行完循环体后,继续判断表达式循环体;执行完循环体后,继续判断表达式expression的值,直到表达式的值,直到表达式expression的值为假,结束循环。的值为假,结束循环。while循环

8、通常用在循环次数未知的情况下,而且要在循环体修改循环通常用在循环次数未知的情况下,而且要在循环体修改循环表达式的值,否则容易造成死循环。循环表达式的值,否则容易造成死循环。break 从循环体中跳出,并使循环结束。从循环体中跳出,并使循环结束。4.1 程序控制语句程序控制语句例例4.1.2:输入物品的标签号码,显示物品的种类。其中标签号码为:输入物品的标签号码,显示物品的种类。其中标签号码为1、5、7的物品为食品,号码为的物品为食品,号码为10到到19的物品为办公用品,号码的物品为办公用品,号码为为20、24、28的为音像制品。的为音像制品。要求:不断从键盘输入标签号码,输入一个号码显示一次物

9、品要求:不断从键盘输入标签号码,输入一个号码显示一次物品种类,输入错误号码要给出提示,输入号码种类,输入错误号码要给出提示,输入号码0则结束输入。则结束输入。4.1 程序控制语句程序控制语句三、异常检测三、异常检测 Matlab有异常处理机制,即可以检测某些语句的执行是否正有异常处理机制,即可以检测某些语句的执行是否正确,如果发生运行错误,确,如果发生运行错误,Matlab的异常处理机制会捕捉到这个的异常处理机制会捕捉到这个错误,并跳转到用户指定的错误处理程序。错误,并跳转到用户指定的错误处理程序。try-catch语句语句 try commands catch handles end 【说明

10、】【说明】 执行语句组执行语句组commands,当语句组,当语句组commands执行执行发生错误时,跳转到错误处理语句组发生错误时,跳转到错误处理语句组handles。(例(例4.1.3)4.1 程序控制语句程序控制语句四、其他程序流控制语句四、其他程序流控制语句返回指令返回指令 return强制结束函数或者命令的调用,将控制权交给主调函数强制结束函数或者命令的调用,将控制权交给主调函数或者命令窗口。或者命令窗口。出错处理出错处理 error(message)显示出错信息显示出错信息message,中止程序运行,中止程序运行 errortrap发生错误后,程序继续执行或退出的状态切换发生错

11、误后,程序继续执行或退出的状态切换 lasterr显示显示Matlab给出的最新的出错给出的最新的出错信息,并中止程信息,并中止程序运行序运行4.1 程序控制语句程序控制语句警告处理警告处理 warning(message) 显示警告信息显示警告信息message,程序继续运行,程序继续运行 lastwarn 显示显示Matlab最新给出的警告信息,程序自动运行最新给出的警告信息,程序自动运行五、人机交互控制五、人机交互控制input v=input(message)将用户键入的内容赋给变量将用户键入的内容赋给变量v,messages是是显示信息显示信息 v=input(message, s)

12、 将用户键入的内容作为将用户键入的内容作为 字符串赋给变量字符串赋给变量v4.1 程序控制语句程序控制语句keyboard 从键盘读入多个从键盘读入多个Matlab指令,直到用户输入指令,直到用户输入return指令才返回。指令才返回。yesinput v=yesinput(Prompt, default, posible)【说明】【说明】 Prompt是显示在屏幕上的提示信息;是显示在屏幕上的提示信息;default是缺省值,即如果没有键是缺省值,即如果没有键 盘输入时变量盘输入时变量v赋值为赋值为default;posible是变量是变量v可能接受的值。可能接受的值。pausepause

13、暂停执行文件,等用户输入任意按键后继续执行暂停执行文件,等用户输入任意按键后继续执行pause(n)暂停暂停n秒后,程序继续执行秒后,程序继续执行dispdisp(X) 显示数组显示数组X的内容,但是不显示数组的内容,但是不显示数组X的名字的名字4.2 命令文件和函数文件命令文件和函数文件 用户可以把需要运行的用户可以把需要运行的Matlab指令保存在一个以指令保存在一个以“.m”为扩展名的文件中,通过在命令窗口键入这个文件的名字来为扩展名的文件中,通过在命令窗口键入这个文件的名字来运行文件中的运行文件中的Matlab指令,我们称这些文件为指令,我们称这些文件为m文件文件。按照。按照m文件文件

14、的组成和特点,可以分为的组成和特点,可以分为命令文件命令文件和和函数文件函数文件。 4.2 命令文件和函数文件命令文件和函数文件一、命令文件一、命令文件有关命令文件的描述如下:有关命令文件的描述如下: 命令文件没有输入参数也没有输出参数,只是一些命令文件没有输入参数也没有输出参数,只是一些Matlab命令和命令和函数的组合;函数的组合; 命令文件可以操作基本工作空间(命令文件可以操作基本工作空间(Base Workspace)的变量,)的变量,也可以生成新的变量。命令文件执行结束后新变量将保存在基本也可以生成新的变量。命令文件执行结束后新变量将保存在基本工作空间中,不会被自动清除;工作空间中,

15、不会被自动清除; 命令文件是用命令文件是用“.m”为扩展名的文件,只要命令文为扩展名的文件,只要命令文 件在搜索路径上,在命令窗口键入文件名就可以件在搜索路径上,在命令窗口键入文件名就可以 运行命令文件。运行命令文件。例例4.2.1:编写命令文件求解小于:编写命令文件求解小于1000且为且为2的整数次幂的整数次幂的正整数。的正整数。4.2 命令文件和函数文件命令文件和函数文件【说明】【说明】 M文件是一个文本文件,可以使用各种文本编辑器编辑和修改,也文件是一个文本文件,可以使用各种文本编辑器编辑和修改,也可以使用可以使用MATLAB的的M文件编辑器文件编辑器/调试器(调试器(Editor/De

16、bugger);); 在运行程序之前,一定要确定这个在运行程序之前,一定要确定这个M文件是否在文件是否在MATLAB的搜索路的搜索路径中。若不在,可以选择【径中。若不在,可以选择【 Path】菜单,在路径设置对话框中,加】菜单,在路径设置对话框中,加入该路径到所有搜索路径的最前端。一旦用【入该路径到所有搜索路径的最前端。一旦用【Set Path】菜单设置】菜单设置了搜索路径后,了搜索路径后,Matlab会自动保存这些路径;会自动保存这些路径; 在在MATLAB的命令窗口输入的命令窗口输入M文件名即可运行该命令文件;文件名即可运行该命令文件; M文件运行过程中产生的变量会驻留在基本工作空间文件运

17、行过程中产生的变量会驻留在基本工作空间 中,即使文件运行结束也不会被自动删除,只有关闭中,即使文件运行结束也不会被自动删除,只有关闭 了了MATLAB后基本工作空间才会被删除。后基本工作空间才会被删除。4.2 命令文件和函数文件命令文件和函数文件二、函数文件二、函数文件 函数文件的使用比命令文件更加灵活,能够更好的实现复杂问题的功函数文件的使用比命令文件更加灵活,能够更好的实现复杂问题的功能模块划分。函数文件如同一个能模块划分。函数文件如同一个“黑箱子黑箱子”,调用者仅仅需要把输入,调用者仅仅需要把输入变量传递给函数,就会得到函数的输出变量,即函数的运行结果。变量传递给函数,就会得到函数的输出

18、变量,即函数的运行结果。 对函数文件有如下的描述:对函数文件有如下的描述:函数文件要在第一行用函数文件要在第一行用function关键字来显式的定义;关键字来显式的定义;函数文件有输入变量和输出变量;函数文件有输入变量和输出变量;函数文件的名字和第一行所定义的函数名相同;函数文件的名字和第一行所定义的函数名相同;可以用比函数定义中数目少的输入变量和输出变量可以用比函数定义中数目少的输入变量和输出变量 来调用函数;来调用函数;函数文件内部定义的变量属于临时变量,只有函数函数文件内部定义的变量属于临时变量,只有函数 运行期间才被生成,函数运行结束后,这些临时变运行期间才被生成,函数运行结束后,这些

19、临时变 量会被量会被Matlab系统自动删除。系统自动删除。4.2 命令文件和函数文件命令文件和函数文件三、函数文件的组成三、函数文件的组成函数定义行函数定义行 函数函数M文件的第一行用关键字文件的第一行用关键字“function”把把M文件定义为一个文件定义为一个函数,指定函数的名字,同时定义了函数的输入变量和输出变函数,指定函数的名字,同时定义了函数的输入变量和输出变量。输入变量的定义用圆括号(),如果有多个输入变量则用量。输入变量的定义用圆括号(),如果有多个输入变量则用逗号分隔;输出变量的定义用中括号逗号分隔;输出变量的定义用中括号 ,如果有多个输出变量,如果有多个输出变量则用逗号分隔

20、。则用逗号分隔。 H1行行 所谓所谓H1行指帮助文本的第一行,它紧跟在定义行之行指帮助文本的第一行,它紧跟在定义行之 后并以后并以“%”符号开头,用于概括说明函数的功能。符号开头,用于概括说明函数的功能。 在命令窗口用在命令窗口用lookfor命令时将显示函数的命令时将显示函数的H1行。行。4.2 命令文件和函数文件命令文件和函数文件函数帮助文本函数帮助文本帮助文本指位于帮助文本指位于H1行之后函数体之前的说明文本,它同样以行之后函数体之前的说明文本,它同样以“%”符符号开头,一般用来比较详细地介绍函数的功能、用法以及函数的修号开头,一般用来比较详细地介绍函数的功能、用法以及函数的修改记录。在

21、命令窗口用改记录。在命令窗口用help命令时将显示函数的命令时将显示函数的H1行和所有帮助文行和所有帮助文本。本。函数体函数体是函数的主体部分,函数的功能是通过函数体实现的。函数体可以是函数的主体部分,函数的功能是通过函数体实现的。函数体可以包括所有的包括所有的Matlab合法命令、函数和流程控制语句。合法命令、函数和流程控制语句。例例4.2.2:编写函数文件求:编写函数文件求( )12.f nn 4.2 命令文件和函数文件命令文件和函数文件四、函数的输入变量和输出变量四、函数的输入变量和输出变量 1. 输入变量和输出变量的检测输入变量和输出变量的检测 检测输入变量和输出变量的函数,其格式和功

22、能如下:检测输入变量和输出变量的函数,其格式和功能如下: n = nargin用于函数内,返回实际输入变量的个数用于函数内,返回实际输入变量的个数 n = nargin(fun)获取获取fun函数的声明的输入变量个数函数的声明的输入变量个数 n = nargout用于函数体,返回实际输出变量的个数用于函数体,返回实际输出变量的个数 n = nargout(fun)获取获取fun函数的声明的输出变量个数函数的声明的输出变量个数 vname=inputname(n)用于函数内,返回第用于函数内,返回第n个输入变量的实际个输入变量的实际 调用变量名字调用变量名字 2. 数目可变的输入变量和输出变量数

23、目可变的输入变量和输出变量 Matlab支持输入变量和输出变量数目可变的函数。支持输入变量和输出变量数目可变的函数。 用户可以使用用户可以使用Matlab提供的两个指令来自己编写参提供的两个指令来自己编写参 数数目可变的函数。数数目可变的函数。 4.2 命令文件和函数文件命令文件和函数文件varargin数目可变的输入变量列表数目可变的输入变量列表varargout数目可变的输出变量列表数目可变的输出变量列表【说明】【说明】 编写参数数目可变的函数时,函数定义行的编写参数数目可变的函数时,函数定义行的“数目可变的变量数目可变的变量”要要放在放在“普通变量普通变量”之后;之后; varargin

24、的工作过程:的工作过程:varargin是一个细胞数组,里面放置的是是一个细胞数组,里面放置的是“数目可变的变量数目可变的变量”;函数被调用时,输入变量的传递规则是:实际输入变量依次逐个函数被调用时,输入变量的传递规则是:实际输入变量依次逐个传递传递 给函数定义的输入变量列表中的给函数定义的输入变量列表中的“普通输入变量普通输入变量”;然后把剩余的实际输入变量依次传递给然后把剩余的实际输入变量依次传递给varargin细胞细胞数组中的细胞;数组中的细胞;varargin细胞数组中的细胞作为一个细胞数组中的细胞作为一个“普通输入变量普通输入变量” 来使用。来使用。4.2 命令文件和函数文件命令文

25、件和函数文件例例4.2.3 :用参数可变的方法定义一个绘制圆环的函数。其中:用参数可变的方法定义一个绘制圆环的函数。其中第一个输入变量为基圆半径,是必选的参数;第二第一个输入变量为基圆半径,是必选的参数;第二个输入变量为内圆半径,为可选参数;还可以输入个输入变量为内圆半径,为可选参数;还可以输入可选的图形属性控制字符串。如果有输出变量,则可选的图形属性控制字符串。如果有输出变量,则不画图,只返回绘图数据;如果没有输出变量,则不画图,只返回绘图数据;如果没有输出变量,则绘制图形。绘制图形。 varargout的工作过程和的工作过程和varargin类似,只是其对应的是函数的输类似,只是其对应的是

26、函数的输出变量。出变量。4.2 命令文件和函数文件命令文件和函数文件五、有关工作空间五、有关工作空间 1. 工作空间工作空间 有了函数文件后,工组空间会变得复杂起来。有了函数文件后,工组空间会变得复杂起来。Matlab将工作空间分将工作空间分成成2类:类:基本工作空间基本工作空间基本工作空间是基本工作空间是Matlab启动后自动创建的,只有关闭了启动后自动创建的,只有关闭了Matlab后基后基本工作空间才会被删除。基本工作空间内部包括本工作空间才会被删除。基本工作空间内部包括Matlab建立的特殊建立的特殊变量(如变量(如pi、i、j、NaN等)和命令窗口执行语句过程中生成的变量。等)和命令窗

27、口执行语句过程中生成的变量。函数工作空间函数工作空间 函数工作空间是函数文件运行时自动创建的工作空间,函数工作空间是函数文件运行时自动创建的工作空间, 它是临时的,当函数运行完毕后,会被系统自动撤销。它是临时的,当函数运行完毕后,会被系统自动撤销。 其中保存了函数内部定义或者运算生成的临时变量,其中保存了函数内部定义或者运算生成的临时变量, 它们在函数执行完成后就不存在了。它们在函数执行完成后就不存在了。4.2 命令文件和函数文件命令文件和函数文件2. 局部变量和全局变量局部变量和全局变量局部变量局部变量 存在于函数工作空间的临时变量(即函数内部定义的变量)称为局部存在于函数工作空间的临时变量

28、(即函数内部定义的变量)称为局部变量。局部变量只能被定义它的函数使用。变量。局部变量只能被定义它的函数使用。 在函数的定义中,其输入变量和输出变量就是局部变量,即函数的输在函数的定义中,其输入变量和输出变量就是局部变量,即函数的输入变量和输出变量只能在本函数内部被使用。入变量和输出变量只能在本函数内部被使用。全局变量全局变量 通过通过global关键字可以定义全局变量。全局变量可以被所有工作空间关键字可以定义全局变量。全局变量可以被所有工作空间共享,即所有工作空间都可以访问全局变量,但是前共享,即所有工作空间都可以访问全局变量,但是前 提是使用之前要先在工作空间内用提是使用之前要先在工作空间内

29、用global关键字声明关键字声明 全局变量。建议在函数的开始处定义或声明全局变量,全局变量。建议在函数的开始处定义或声明全局变量, 全局变量的名字一般采用大写字母命名。全局变量的名字一般采用大写字母命名。 4.2 命令文件和函数文件命令文件和函数文件3. 跨工作空间的变量赋值跨工作空间的变量赋值 有些时候我们需要跨工作空间给变量赋值,有些时候我们需要跨工作空间给变量赋值,Matlab提供了相关的函数。提供了相关的函数。 格式:格式: assignin(ws, var, val) 【说明】【说明】 把当前工作空间的变量把当前工作空间的变量val赋值给赋值给ws工作空间的名为工作空间的名为var

30、的变量。的变量。 其中,其中,ws可以取:可以取: base表示基本工作空间表示基本工作空间 caller表主调函数工作空间表主调函数工作空间六、子函数和私有函数六、子函数和私有函数如果一个项目比较复杂,就需要编写大量的函数如果一个项目比较复杂,就需要编写大量的函数文件,这些函数文件通常都是该工程中专用的,其他程序文件,这些函数文件通常都是该工程中专用的,其他程序很少会用到。我们应该限制这些自编函数可以被调用的范很少会用到。我们应该限制这些自编函数可以被调用的范围,避免在围,避免在Matlab基本工作空间中出现过多的标识符,尽基本工作空间中出现过多的标识符,尽量避免在一个工作空间内出现同名函数

31、。为了限制函数的量避免在一个工作空间内出现同名函数。为了限制函数的使用范围,使用范围,Matlab支持子函数和私有函数。支持子函数和私有函数。4.2 命令文件和函数文件命令文件和函数文件 1.子函数子函数 Matlab允许一个函数文件内定义多个函数。其中,第一个定义的函数称允许一个函数文件内定义多个函数。其中,第一个定义的函数称为主函数,其他的函数称为子函数。为主函数,其他的函数称为子函数。关于主函数和子函数的描述如下:关于主函数和子函数的描述如下:每个文件的第一行定义的是主函数;每个文件的第一行定义的是主函数;只有主函数可以被其他程序调用;只有主函数可以被其他程序调用;函数文件的名字必须和主

32、函数相同;函数文件的名字必须和主函数相同;子函数只能被处在同一个文件中的主函数或者其他子子函数只能被处在同一个文件中的主函数或者其他子函数调用;函数调用;主函数和各个子函数的工组空间是彼此独立的,即每主函数和各个子函数的工组空间是彼此独立的,即每个函数拥有自己独立的工作空间。个函数拥有自己独立的工作空间。 4.2 命令文件和函数文件命令文件和函数文件2.私有函数私有函数 私有函数是在函数私有函数是在函数M文件所在目录的文件所在目录的private子目录中的函数子目录中的函数M文件,其性质如下:文件,其性质如下:私有函数只能被私有函数只能被private的直接父目录中定义的的直接父目录中定义的M

33、文件调用,文件调用, 其他目录的其他目录的M文件或者命令窗口无权调用私有函数。文件或者命令窗口无权调用私有函数。 私有函数的定义和构成和普通函数相同。私有函数的定义和构成和普通函数相同。例例4.2.4:编写函数文件求:编写函数文件求 1( )!1! 2! .!nkf nkn4.2 命令文件和函数文件命令文件和函数文件七、七、 M文件的执行文件的执行 当当Matlab遇到一个新的标识符遇到一个新的标识符corv时,它将按照下面步骤寻找这时,它将按照下面步骤寻找这个标识符。个标识符。 检查检查corv是否是一个变量名;是否是一个变量名; 检查检查corv是否是内建函数名;是否是内建函数名; 检查检

34、查corv是否是子函数;是否是子函数; 检查检查corv是否是私有函数;是否是私有函数; 检查检查corv是否是当前目录中的文件;是否是当前目录中的文件; 在在Set Path指定的路径内搜索指定的路径内搜索corv文件;文件; Matlab将使用最先找到的那个将使用最先找到的那个corv标识符。如果经过标识符。如果经过 上述步骤的搜索,也无法找到上述步骤的搜索,也无法找到corv标识符,则给出提示标识符,则给出提示 信息信息“? Undefined function or variable corv.”4.3 字符串的求值字符串的求值Matlab提供了字符串求值的函数,利用这些函数,可以用字

35、符串提供了字符串求值的函数,利用这些函数,可以用字符串构造构造Matlab的函数和命令,并运行这些字符串命令。的函数和命令,并运行这些字符串命令。一、一、eval y=eval(expression)计算字符串表达式计算字符串表达式expression a1, a2, . = eval(function(b1, b2, .) ) 计算函数调用的字符串表达式计算函数调用的字符串表达式【注意】【注意】eval的输入变量只能是字符串的输入变量只能是字符串例例4.3.1: 表达式字符串的计算表达式字符串的计算 例例4.3.2: eval和函数调用和函数调用4.3 字符串的求值字符串的求值二、二、 fe

36、val y1, y2, . = feval(function, x1, ., xn)【说明】【说明】function只能是函数名,不能是表达式字符串。只能是函数名,不能是表达式字符串。x1、x2等是调用函数等是调用函数function的输入变量,即函数的自变量值。的输入变量,即函数的自变量值。y1、y2等是函数的输出变量,即函数的返回值。等是函数的输出变量,即函数的返回值。例例4.3.3: feval的使用方法的使用方法 4.3 字符串的求值字符串的求值三、内联函数三、内联函数 用户可以用用户可以用M文件来建立函数,函数的功能可以很复杂,函数的输文件来建立函数,函数的功能可以很复杂,函数的输出

37、变量也可以有多个。对于简单的数学表达式,用出变量也可以有多个。对于简单的数学表达式,用M文件来建立函数就显文件来建立函数就显得不够方便。得不够方便。Matlab提供了内联函数的功能,内联函数可以将表达式转提供了内联函数的功能,内联函数可以将表达式转换为函数。内联函数是换为函数。内联函数是Matlab面向对象的一个类,其类型名为面向对象的一个类,其类型名为inline。1.内联函数的建立内联函数的建立 g = inline(expr)将串表达式将串表达式expr转换为内联函数转换为内联函数 g = inline(expr, arg1, arg2,.) 将串表达式将串表达式expr转化为以转化为以

38、arg1、arg2等为自变量(输等为自变量(输 入变量)的入变量)的 内联函数内联函数4.3 字符串的求值字符串的求值g = inline(expr,n)将串表达式将串表达式expr转化为以自变量转化为以自变量x,P1,P2,Pn为自变量的为自变量的 内联函数。其中内联函数。其中P必须大写。必须大写。例例4.3.4:建立内联函数表示数学函数,并计算的值:建立内联函数表示数学函数,并计算的值例例4.3.5:阅读下列程序代码,了解:阅读下列程序代码,了解inline的使用方法。的使用方法。4.3 字符串的求值字符串的求值2. 和内联函数有关的函数和内联函数有关的函数class(fun)%获取内联函

39、数的数据类型获取内联函数的数据类型char(fun)%获取内联函数的计算公式字符串获取内联函数的计算公式字符串argnames(fun)%获取内联函数的输入变量名字获取内联函数的输入变量名字vectorize(fun)%使内联函数具有数组运算规则使内联函数具有数组运算规则例例4.3.6:阅读下列程序代码,了解和内联函数相关的函数的使用方法。:阅读下列程序代码,了解和内联函数相关的函数的使用方法。4.4 程序性能优化程序性能优化 Matlab语言是解释执行的语言,其优点是编程简单、使用方便,语言是解释执行的语言,其优点是编程简单、使用方便,但其缺点就是程序执行速度缓慢,执行效率低下。对于复杂的程

40、序,但其缺点就是程序执行速度缓慢,执行效率低下。对于复杂的程序,程序员要考虑程序性能的优化,让应用程序既能够完成预期的功能,程序员要考虑程序性能的优化,让应用程序既能够完成预期的功能,又具有较快的运行速度和较高的执行效率。又具有较快的运行速度和较高的执行效率。一、源代码级的优化一、源代码级的优化 1. 循环的向量化循环的向量化 Matlab的运算功能是针对向量的,因此尽量少使用的运算功能是针对向量的,因此尽量少使用for循环和循环和wile循环,用向量化的数组代替单个元素的循环运算,即循环的向量化。循环,用向量化的数组代替单个元素的循环运算,即循环的向量化。循环的向量化不但能缩短源代码的长度,

41、还能加快循环的向量化不但能缩短源代码的长度,还能加快 程序的运行速度,提高程序的执行效率。程序的运行速度,提高程序的执行效率。例例4.4.1:求:求log(n)在在n从从1到到100之间的值,之间的值,n为整数。为整数。4.4 程序性能优化程序性能优化 2. 数组大小的预定义数组大小的预定义 Matlab在使用变量之前,不需要预先定义变量的名字和大小。如果在使用变量之前,不需要预先定义变量的名字和大小。如果变量的大小没有被显示的指定,则每当新赋值的元素下标超过变量变量的大小没有被显示的指定,则每当新赋值的元素下标超过变量的维数时,的维数时,Matlab就自动为变量扩充维数,这大大降低了程序的运

42、就自动为变量扩充维数,这大大降低了程序的运行效率。如果预先知道变量的维数,就可以预先定义好变量尺寸,行效率。如果预先知道变量的维数,就可以预先定义好变量尺寸,通常采用通常采用ones、zeros或者或者cell等函数预定义变量维数。等函数预定义变量维数。例例4.4.2:预定义变量维数编程:预定义变量维数编程4.4 程序性能优化程序性能优化3. 内存管理内存管理Matlab系统的运行会占用大量的内存,在编写系统的运行会占用大量的内存,在编写Matlab程序的时候程序的时候要给变量分派合理内存,提高内存使用效率,减少内存碎片产生。要给变量分派合理内存,提高内存使用效率,减少内存碎片产生。 没有用的

43、变量最好用没有用的变量最好用clear语句删除语句删除 尽量不产生大的临时变量尽量不产生大的临时变量 使用使用save和和load命令保存和读取变量命令保存和读取变量 尽量采用函数文件代替命令文件尽量采用函数文件代替命令文件4. 尽可能采用尽可能采用Matlab提供的函数提供的函数Matlab提供了大量的函数供用户调用,这些函数涵盖了提供了大量的函数供用户调用,这些函数涵盖了 大多数的常用操作。要尽可能使用大多数的常用操作。要尽可能使用Matlab提供的函数,提供的函数, 不要自己编写具有和不要自己编写具有和Matlab提供的函数具有相同功能提供的函数具有相同功能 的代码,这样无论从效率、可靠

44、性和开发时间上都是的代码,这样无论从效率、可靠性和开发时间上都是 得不偿失的。得不偿失的。4.4 程序性能优化程序性能优化二、程序加速器二、程序加速器MATLAB提供了提供了JIT(Just In Time)和加速器和加速器(Accelerator),用来加快,用来加快函数文件和命令文件的运行速度。函数文件和命令文件的运行速度。JIT和加速器可以通过和加速器可以通过MATLAB命命令开启和关闭,默认情况下令开启和关闭,默认情况下JIT和加速器都是启动的。和加速器都是启动的。 相关命令如下:相关命令如下:feature accel on开启加速器开启加速器feature accel off关闭加

45、速器关闭加速器feature JIT on开启开启JITfeature JIT off关闭关闭JIT4.5 面向对象编程面向对象编程 Matlab支持面向对象的程序设计方法,本节简单介绍支持面向对象的程序设计方法,本节简单介绍Matlab中面向对象中面向对象编程的基本概念和应用方法。编程的基本概念和应用方法。一、一、 类和对象类和对象类(类(Class)是一个抽象的概念,它是具有相同特征和行为的对象的集合。是一个抽象的概念,它是具有相同特征和行为的对象的集合。对象(对象(Object)是类的具体实例(是类的具体实例(Instance),相当于类集合中的具体),相当于类集合中的具体元素。元素。

46、例如:例如:浮点数浮点数double是一个类,是一个类,a=0.3定义了浮点数变量定义了浮点数变量a,a就是浮点就是浮点 数类的一个对象。数类的一个对象。 Matlab内建了内建了5个类:个类: char、double、cell、struct、sparse、unit8 我们可以通过我们可以通过class函数来获取变量的数据类型,函数来获取变量的数据类型, 其调用格式如下:其调用格式如下:str=class(v)%返回变量返回变量v的数据类型名称的数据类型名称 4.5 面向对象编程面向对象编程二、二、 属性和方法属性和方法 类中封装了该类对象共有的特征和行为。类中封装了该类对象共有的特征和行为。

47、属性(属性(Property) 对象的特征称为属性,用数据来表示。对象的属性通常用结构体来对象的特征称为属性,用数据来表示。对象的属性通常用结构体来描述,因此我们访问对象的属性可以象访问结构体的一样用成员运算符描述,因此我们访问对象的属性可以象访问结构体的一样用成员运算符“.”来访问,也可以用来访问,也可以用get和和set函数来访问对象的属性。函数来访问对象的属性。get(h,PropertyName)返回对象返回对象h的的PropertyName属性的值属性的值set(H,PropertyName, Value,.) 赋值赋值H对象的对象的PropertyName属性值为属性值为Value

48、。方法(方法(Method) 对象的行为称为方法,用函数来表示。某个类的方法对象的行为称为方法,用函数来表示。某个类的方法只能操作该类的对象。只能操作该类的对象。4.5 面向对象编程面向对象编程三、构造函数三、构造函数 Matlab中没有类的声明语句。定义对象要调用类的构造函数中没有类的声明语句。定义对象要调用类的构造函数(Constructor)。构造函数的名字必须与类同名,比如)。构造函数的名字必须与类同名,比如cell函数和函数和struct函数就分别是细胞数组类和结构体数组类的构造函数。函数就分别是细胞数组类和结构体数组类的构造函数。c=cell(3,3); %调用构造函数调用构造函数cell建立一个建立一个33的细胞数组的细胞数组 一些行为具有相同的定义,但实现方法不同,我们可以用同样名称的方法一些行为具有相同的定义,但实现方法不同,我们可以用同样名称的方法来描述这些操作,这种技术称为重载。被重载的函数具有相同的名字,但是对来描述这些操作,这种技术称为重载。被重载的函数具有相同的名字,但是对

温馨提示

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

评论

0/150

提交评论