1、MATLAB SDU1MATLAB SDU2 用户如想灵活应用matlab去解决实际问题,充分调用matlab的科学技术资源,就需要编辑m文件 包含matlab语言代码的文件称为m文件,其扩展名为m。 编辑m文件可使用各种文本编辑器。MATLAB SDU3 指令驱动模式指令驱动模式 通常通常matlab以指令驱动模式工作,即在以指令驱动模式工作,即在matlab 窗口下当用户输入单行指令时,窗口下当用户输入单行指令时,matlab 立即处理这条指令,并显示结果,立即处理这条指令,并显示结果,这就是这就是matlab命令行方式。命令行方式。 命令行操作时,命令行操作时,matlab窗口只允许一次
2、窗口只允许一次执行一行上的一个或几个语句。执行一行上的一个或几个语句。MATLAB SDU4例如:x1=0:10 x1 = 0 1 2 3 4 5 6 7 8 9 10 x2=0:3:11x2 = 0 3 6 9x3=11.5:-3:0 x3 = 11.5000 8.5000 5.5000 2.5000MATLAB SDU5x1=0:10,x2=0:3:11,x3=11.5:-3:0 x1 = 0 1 2 3 4 5 6 7 8 9 10 x2 = 0 3 6 9x3 = 11.5000 8.5000 5.5000 2.5000 命令行方式程序可读性差,而且不能存储,命令行方式程序可读性差,而
3、且不能存储,对于对于处理复杂问题和大量数据时是不方便的处理复杂问题和大量数据时是不方便的,应编写成能存储的程序文件。应编写成能存储的程序文件。MATLAB SDU6m文件模式文件模式 将将matlab语句构成的程序存储成以语句构成的程序存储成以m为扩展为扩展名的文件,然后再执行该程序文件,这种工名的文件,然后再执行该程序文件,这种工作模式称为程序文件模式。作模式称为程序文件模式。 程序文件不能在指令窗口下建立,因为指令程序文件不能在指令窗口下建立,因为指令窗口只允许一次执行一行上的一个或几个语窗口只允许一次执行一行上的一个或几个语句句。MATLAB SDU7 m文件的类型是普通的文本文件,我们
4、可以文件的类型是普通的文本文件,我们可以使用系统认可的文本文件编辑器来建立使用系统认可的文本文件编辑器来建立m文文件。如各种件。如各种edit编辑器,编辑器,windows的记事本的记事本和和word等。等。具体的创建方法:具体的创建方法:1. 在在matlab命令窗命令窗 口点击口点击file 菜单菜单 new m-fileMATLAB SDU8MATLAB SDU9MATLAB SDU10 将工作空间中的内容存入文件。 *edit 用各种edit 编辑器编制m文件。 edit 用matlab自带的编辑器编制m文件。 word 用word编辑m文件。 m文件编辑器的设定文件编辑器的设定 m文
5、件编辑器可自己设定,设定方法是matlab命令窗口 options 菜单下点击 Edit Preference 选定m文件编辑器。MATLAB SDU11m文件编辑器缺省设置是文件编辑器缺省设置是 matlab editor还可设成:其他的还可设成:其他的Text Editor 从从“file” “preference” editor/debugger设置设置 注意:注意:所创建的所创建的m文件必须纳入文件必须纳入matlab搜索路搜索路 径后,才能在径后,才能在matlab命令窗口运行。命令窗口运行。 MATLAB SDU12 matlab搜索路径的设置 matlab 缺省路径是c:matl
6、abbin. 用pathtool路径浏览器设定当前目录 “file” - “set path” 方法设定当前目录MATLAB SDU131. 数据文件数据文件 .mat mat文件是文件是matlab以标准二进制格式保存以标准二进制格式保存的数据文件,可将工作空间中有用的数据的数据文件,可将工作空间中有用的数据变量保存下来。变量保存下来。 mat文件的生成和调用是由函数文件的生成和调用是由函数save和和load完成的完成的。MATLAB SDU142. m文件文件 m文件的语法类似于文件的语法类似于c语言,但又有其自身特语言,但又有其自身特点。它只是一个简单的点。它只是一个简单的ASCII码
7、文本文件,执码文本文件,执行程序时逐行解释运行程序,行程序时逐行解释运行程序,matlab是解释是解释性的编程语言。性的编程语言。 m文件有两类文件有两类 独立的独立的m m文件文件 称命令文件,脚本称命令文件,脚本(script)script) 可调用可调用m m文件文件 称函数文件称函数文件 FunctionsFunctionsMATLAB SDU15命令文件命令文件 简单的简单的m文件文件 命令文件实际上是一串指令的集合,与在命令窗口逐行执行文件中命令文件实际上是一串指令的集合,与在命令窗口逐行执行文件中的所有指令,其结果是一样的。没有输入输出参数。的所有指令,其结果是一样的。没有输入输
8、出参数。 “脚本脚本”本身反映这样一个事实:本身反映这样一个事实:MATLAB只是按文件只是按文件所写的指令执行。所写的指令执行。 M脚本(命令)文件的构成较简单,其脚本(命令)文件的构成较简单,其特点特点是:是: 它只是一串按用户意图排列而成的(包括控制流向指令在内的)它只是一串按用户意图排列而成的(包括控制流向指令在内的)MATLAB指令集。指令集。 脚本文件运行后,所产生的所有变量都驻留在脚本文件运行后,所产生的所有变量都驻留在MATLAB基本工基本工作空间作空间(Base workspace)中。只要不使用中。只要不使用clear指令加以清除,指令加以清除,且且MATLAB指令窗不关闭
9、,这些变量将一直保存在基本工作空指令窗不关闭,这些变量将一直保存在基本工作空间中。基本工作空间随间中。基本工作空间随MATLAB的启动而产生;只有关闭的启动而产生;只有关闭MATLAB时,该基本空间才被删除。时,该基本空间才被删除。MATLAB SDU16 与脚本(命令)文件不同,函数文件与脚本(命令)文件不同,函数文件(Function file)犹如一个犹如一个“黑箱黑箱”。从外界只能看到传给它。从外界只能看到传给它的输入量和送出来的计算结果,而内部运作是藏的输入量和送出来的计算结果,而内部运作是藏而不见的。而不见的。MATLAB SDU17从形式上看,与脚本文件不同,函数文件的第一行总是
10、以从形式上看,与脚本文件不同,函数文件的第一行总是以“function”引导的引导的“函数申明行函数申明行”(Function declaration line)。该行还罗列出函。该行还罗列出函数与外界联系的全部数与外界联系的全部“标称标称”输入输出宗量。但对输入输出宗量。但对“输入输出宗量输入输出宗量”的标称数目并没有限制,即可以完全没有输入输出宗量,也可以是任的标称数目并没有限制,即可以完全没有输入输出宗量,也可以是任意数目。意数目。MATLAB允许使用比允许使用比“标称数目标称数目”较少的输入输出宗量,实现对函数较少的输入输出宗量,实现对函数的调用。的调用。从运行上看,与脚本文件运行不同
11、,每当函数文件运行,从运行上看,与脚本文件运行不同,每当函数文件运行,MATLAB就就会专门为它开辟一个临时工作空间,称之谓会专门为它开辟一个临时工作空间,称之谓函数工作空间函数工作空间(Function workspace)。所有中间变量都存放在函数工作空间中。当执行完文件。所有中间变量都存放在函数工作空间中。当执行完文件最后一条指令或遇到最后一条指令或遇到return时,就结束该函数文件的运行,同时该临时,就结束该函数文件的运行,同时该临时函数空间及其所有的中间变量就立即被清除。时函数空间及其所有的中间变量就立即被清除。函数空间随具体函数空间随具体M函数文件的被调用而产生,随调用结束而删除
12、。函函数文件的被调用而产生,随调用结束而删除。函数空间是数空间是相对独立的相对独立的、临时的临时的。在。在MATLAB整个运行期间,可以产生整个运行期间,可以产生任意多个临时函数空间。任意多个临时函数空间。假如在函数文件中,发生对某脚本文件的调用,那么该脚本文件运行假如在函数文件中,发生对某脚本文件的调用,那么该脚本文件运行产生的所有变量都存放于该函数空间之中,而不是存放在基本空间。产生的所有变量都存放于该函数空间之中,而不是存放在基本空间。MATLAB SDU18函数函数m文件的格式:文件的格式: function 返回变量返回变量=函数名(输入变量)函数名(输入变量) 注释说明语句段注释说
13、明语句段 程序语句段程序语句段特定规则:特定规则:1. 函数函数m文件第一行必须以单词文件第一行必须以单词function作为引作为引导词,必须遵循如下形式:导词,必须遵循如下形式: function =()2. m文件的文件名必须是文件的文件名必须是 .m。3. 程序中的变量均为局部变量,不保存在工作程序中的变量均为局部变量,不保存在工作空间中。其变量只在函数运行期间有效。空间中。其变量只在函数运行期间有效。MATLAB SDU19function sa = circle(r,s)%CIRCLEplot a circle of radii r in the line specified by
14、 s.% r指定半径的数值指定半径的数值% s指定线色的字符串指定线色的字符串% sa圆面积圆面积% circle(r)利用蓝实线画半径为利用蓝实线画半径为 r 的圆周线的圆周线.% circle(r,s)利用串利用串 s 指定的线色画半径为指定的线色画半径为 r 的圆周线的圆周线.% sa=circle(r)计算圆面积,并画半径为计算圆面积,并画半径为 r 的蓝色圆面的蓝色圆面.% sa=circle(r,s)计算圆面积,并画半径为计算圆面积,并画半径为 r 的的 s 色圆面色圆面.% 编写于编写于2001年年4月月7日,修改于日,修改于2002年年8月月27日。日。if nargin2 e
15、rror(输入宗量太多。输入宗量太多。);end;if nargin=1 s=b;end;MATLAB SDU20 位于函数文件的首行,以位于函数文件的首行,以MATLAB关键字关键字function开头,函数名以及函数的输入输出宗开头,函数名以及函数的输入输出宗量都在这一行定义。量都在这一行定义。MATLAB SDU21 紧随函数申明行之后以紧随函数申明行之后以%开头的第一注释行。开头的第一注释行。按按MATLAB自身文件的规则,自身文件的规则,H1行包含:大行包含:大写体的函数文件名;运用关键词简要描述的写体的函数文件名;运用关键词简要描述的函数功能。该函数功能。该H1行供行供lookfo
16、r关键词查询和关键词查询和help在线帮助使用。在线帮助使用。MATLAB SDU22 H1行及其之后的连续以行及其之后的连续以%开头的所有注释行开头的所有注释行构成整个在线帮助文本。它通常包括:函数构成整个在线帮助文本。它通常包括:函数输入输出宗量的含义,调用格式说明。输入输出宗量的含义,调用格式说明。MATLAB SDU23 与在线帮助文本区相隔一个空行,也以与在线帮助文本区相隔一个空行,也以%开头,开头,标志编写及修改该标志编写及修改该M文件的作者和日期、版本文件的作者和日期、版本记录。它用于软件档案管理。记录。它用于软件档案管理。MATLAB SDU24 为清晰起见,它与前面的注释行以
17、空行相隔。为清晰起见,它与前面的注释行以空行相隔。这部分内容由实现该这部分内容由实现该M函数文件功能的函数文件功能的MATLAB指令组成。它接收输入宗量,进行指令组成。它接收输入宗量,进行程序流控制,得到输出宗量。其中为阅读、程序流控制,得到输出宗量。其中为阅读、理解方便,也配置适当的空行和注释。若仅理解方便,也配置适当的空行和注释。若仅从运算角度看,惟有函数申明行和函数体两从运算角度看,惟有函数申明行和函数体两部分是构成部分是构成M函数文件所必不可少的。函数文件所必不可少的。MATLAB SDU25function r = rank(A,tol)%RANK Matrix rank.% RAN
18、K(A) provides an estimate of the number of linearly% independent rows or columns of a matrix A.% RANK(A,tol) is the number of singular values of A% that are larger than tol.% RANK(A) uses the default tol = max(size(A) * norm(A) * eps.% Class support for input A:% float: double, single% Copyright 198
19、4-2004 The MathWorks, Inc. % $Revision: 5.11.4.2 $ $Date: 2004/04/10 23:30:08 $s = svd(A);if nargin=1 tol = max(size(A) * eps(max(s);endr = sum(s tol);.程序部分MATLAB SDU26matlab内置函数文件内置函数文件 matlab自定义的函数文件称内置函数文件自定义的函数文件称内置函数文件 调用内置函数的方法:使用函数名并给出相应的入调用内置函数的方法:使用函数名并给出相应的入口、出口参数即可。口、出口参数即可。 例如:sin.m函数 调用
20、格式:y=sin(2*x) 实际应用中: x=0:2*pi/180:2*pi; y=sin(2*x) plot(x,y)01234567-1-0.8-0.6-0.4-0.200.20.40.60.81M 函数文件分两类:内置和自定义函数文件分两类:内置和自定义MATLAB SDU27又如又如 sqrt(x) 求求x的平方根的平方根 abs(x) 求求x的绝对值的绝对值 det(a) 求行列式的值求行列式的值 等等。等等。matlab拥有大量的内置数学函数,供我们在拥有大量的内置数学函数,供我们在数值运算和符号运算中调用。数值运算和符号运算中调用。MATLAB SDU28II 函数函数m文件文件
21、 需要输入变量,返回输出变量需要输入变量,返回输出变量 matlab用户可以根据需要编辑自己的m文件,它们可以像库函数一样方便的调用,从而极大地扩展了matlab 的能力。 对于某一类特殊问题,如创建了许多m函数文件,则可形成新的工具箱。这种用matlab语言创建定义新的matlab函数的功能,正体现了matlab语言强大的扩展功能。MATLAB SDU29 I 函数句柄 函数句柄并不是伴随函数文件而自动形成的文件函数句柄并不是伴随函数文件而自动形成的文件“属性属性”,是必须通过专门的定义才会生成的。是必须通过专门的定义才会生成的。为一个为一个函数定义句柄的方法函数定义句柄的方法有两种:有两种
22、: 利用利用符号;符号;* 利用转换函数利用转换函数str2func。对函数句柄的内涵观察需借助专门指令对函数句柄的内涵观察需借助专门指令Functions实现。实现。例:为例:为MATLAB的的“内建内建”函数创建函数句柄,并观察其函数创建函数句柄,并观察其内涵。内涵。hsin=sin; %(1) 创建创建class(hsin) %(2) 类型判别类型判别CC=functions(hsin) %(3) 借助指令借助指令function观察内涵观察内涵MATLAB SDU30函数句柄是函数句柄是matlabmatlab特有的语言结构,其优点:特有的语言结构,其优点: 方便地实现函数间互相调用方
23、便地实现函数间互相调用 兼容函数加载的所有方式兼容函数加载的所有方式 拓宽子函数包括局部函数的使用范围拓宽子函数包括局部函数的使用范围 提高函数调用的可靠性提高函数调用的可靠性 减少程序设计中的冗余减少程序设计中的冗余 提高重复执行的效率提高重复执行的效率 数组、结构数组、元胞型数组结合定义数据数组、结构数组、元胞型数组结合定义数据MATLAB SDU31 根据内置函数创建函数句柄根据内置函数创建函数句柄 FUNHANDLE = FUNCTION_NAME 匿名函数创建函数句柄匿名函数创建函数句柄 FUNHANDLE = (ARGLIST)EXPRESSION 如果函数句柄不含任何参数,如果函
24、数句柄不含任何参数,后列表必须用空括号表后列表必须用空括号表示,调用也必须使用空括号示,调用也必须使用空括号 参阅help function_handle MATLAB SDU32%本例通过本例通过sin函数及其句柄演示若干基本用法。函数及其句柄演示若干基本用法。%(1)函数句柄的创建)函数句柄的创建fhandle=str2func(sin);%(2)函数句柄在)函数句柄在sin(pi/4)“数值计算数值计算”中的情况中的情况ys=sin(pi/4)%函数直接调用函数直接调用yfold=feval(sin,pi/4)%feval指令的指令的“老式老式”调调yfnew=feval(fhandle
25、,pi/4) %feval指令的指令的“新式新式”调用调用%(3)函数句柄在)函数句柄在sin(pi/4)“符号计算符号计算”中的情况中的情况Alpha=sym(pi/4);%定义符号常数定义符号常数yss=sin(Alpha)%函数直接调用函数直接调用yfold=feval(sin,Alpha) %feval指令的指令的“老式老式”调用调用ynews=feval(fhandle,Alpha) %feval指令的指令的“新式新式”调用调用%(4)函数句柄在泛函指令中的用法:在)函数句柄在泛函指令中的用法:在0,2*pi间求间求sin函数的函数的极小值。极小值。xold=fminbnd(sin,
26、0,2*pi) %泛函指令的泛函指令的“老式老式”调用调用xnew=fminbnd(fhandle,0,2*pi) %泛函指令的泛函指令的“新式新式”调用调用MATLAB SDU33 II II 主函数和子函数主函数和子函数 多个函数代码,第一个是主函数,其多个函数代码,第一个是主函数,其它是子函数;主函数可外部调用,子函数它是子函数;主函数可外部调用,子函数不行;多个子函数排列次序可改变不行;多个子函数排列次序可改变MATLAB SDU34 每个子函数的第一行是其自己的函数申明行。每个子函数的第一行是其自己的函数申明行。 在在M函数文件内,主函数的位置不可改变,但子函数的函数文件内,主函数的
27、位置不可改变,但子函数的排列次序可任意改变。排列次序可任意改变。 子函数只能被处于同一文件的主函数或其他子函数调用。子函数只能被处于同一文件的主函数或其他子函数调用。 在在M函数文件中,任何指令通过函数文件中,任何指令通过“名字名字”对函数进行调对函数进行调用时,子函数的优先级仅次于内装函数。用时,子函数的优先级仅次于内装函数。 同一文件的主函数、子函数的工作空间都是彼此独立的。同一文件的主函数、子函数的工作空间都是彼此独立的。各函数间的信息,或通过输入输出宗量传递,或通过全各函数间的信息,或通过输入输出宗量传递,或通过全局变量传递,或通过跨空间指令传递。局变量传递,或通过跨空间指令传递。 h
28、elp, lookfor等帮助指令都不能提供关于子函数的任何等帮助指令都不能提供关于子函数的任何帮助信息。帮助信息。(需要通过主函数需要通过主函数) 子函数的算例子函数的算例P119 例例43。MATLAB SDU35 所谓所谓私用(局部)函数私用(局部)函数,是指位于,是指位于private目录目录上的上的M文件函数。文件函数。 私用(局部)函数的性质:私用(局部)函数的性质: 私用(局部)函数的构造与普通私用(局部)函数的构造与普通M函数完全相同。函数完全相同。 私用(局部)函数的只能被私用(局部)函数的只能被private目录的直接父目目录的直接父目录上的录上的M函数文件所调用。它不能被
29、其他目录上的任函数文件所调用。它不能被其他目录上的任何何M函数、函数、M脚本文件或脚本文件或MATLAB指令窗中的命令所指令窗中的命令所调用,也不能被直接父目录上的调用,也不能被直接父目录上的M脚本文件调用。脚本文件调用。 M文件中,任何指令通过文件中,任何指令通过“名字名字”对函数进行调用时,对函数进行调用时,私用(局部)函数的优先级虽低于内装函数和子函数,私用(局部)函数的优先级虽低于内装函数和子函数,但高与其他任何目录上的函数。但高与其他任何目录上的函数。 help,lookfor等指令都不能提供关于私用等指令都不能提供关于私用(局部)(局部)函数的任何函数的任何帮助信息(必须通过帮助信
30、息(必须通过private父目录)。父目录)。MATLAB SDU36 任一个任一个MATLAB函数体内定义函数,称之函数体内定义函数,称之为外部函数的嵌套函数(旧版本不支持)为外部函数的嵌套函数(旧版本不支持) 需用需用end结束结束 相互间的调用和工作空间的访问相互间的调用和工作空间的访问 例子例子 P122-P125MATLAB SDU37 局部(局部(Local)变量)变量 它存在于函数空间内部的中间变量,产生于该函数的运行过程它存在于函数空间内部的中间变量,产生于该函数的运行过程中,其影响范围也仅限于该函数本身。中,其影响范围也仅限于该函数本身。 全局(全局(Global)变量)变量
31、 通过通过global指令,指令,MATLAB也允许几个不同的函数空间以及也允许几个不同的函数空间以及基本空间共享一个变量。这种被共享的变量称为全局变量。每基本空间共享一个变量。这种被共享的变量称为全局变量。每个希望共享全局变量的函数或个希望共享全局变量的函数或MATLAB基本工作空间,必须基本工作空间,必须逐个用逐个用global对具体变量加以专门定义。没采用对具体变量加以专门定义。没采用global定义的定义的函数或基本空间,将无权享用全局变量。函数或基本空间,将无权享用全局变量。 如果某个函数的运作使全局变量的内容发生了变化,那么其他如果某个函数的运作使全局变量的内容发生了变化,那么其他
32、函数空间以及基本工作空间中的同名变量也就随之变化。函数空间以及基本工作空间中的同名变量也就随之变化。 除非与全局变量联系的所有工作空间都被删除,否则全局变量除非与全局变量联系的所有工作空间都被删除,否则全局变量依然存在。依然存在。例:例:p125 例例4-5MATLAB SDU38 for循环结构循环结构 while循环结构循环结构 if-else-end分支结构分支结构 switch-case结构结构 try-catch结构结构 控制程序流的其它常用指令控制程序流的其它常用指令 MATLAB SDU39for x=array(commands)end For循环的结构以及含义和其他高级语言的
33、结构循环的结构以及含义和其他高级语言的结构和含义基本一致。和含义基本一致。 一个简单的一个简单的for循环示例。循环示例。 和其他语言一样和其他语言一样for循环可以有多重循环。循环可以有多重循环。MATLAB SDU40例:利用for循环求1!+2!+3!+ +5!的值 sum=0; for i=1:5 pdr=1; for k=1:i pdr=pdr*k; end sum=sum+pdr; endsum = 153MATLAB SDU41while expression(commands)end 与与for循环设置固定循环次数来执行循环体相比循环设置固定循环次数来执行循环体相比较,较,MA
34、TLAB中的中的while循环是应用逻辑表达式循环是应用逻辑表达式来设置与判断是否执行循环体,循环次数依逻来设置与判断是否执行循环体,循环次数依逻辑判断条件来决定,循环次数是不固定的。辑判断条件来决定,循环次数是不固定的。 例:例:Fibonacci数组的元素满足数组的元素满足Fibonacci规则:规则:a k+2=ak+ak+1,(k=1,2,);且且a1=a2=1。现要求该。现要求该数组中第一个大于数组中第一个大于10000的元素。的元素。MATLAB SDU42 a(1)=1;a(2)=1;i=2; while a(i)8 sums=number*0.95*cost;end,sums%
35、两个分支结构x=input(x=);if x=5000 sum=15*n;else if 5000n&n=2500 %&:为逻辑与为逻辑与 sum=16*n;else if 2500n&n=1000 sum=17*n;else if 1000n&n=500 sum=18*n;else if 500n&n=250 sum=19*n; else if 250n&n=100 sum=20*n; else if 100n&n=50 sum=22*n; else if 50n&n=10 sum=24*n else sum=28*nend;end;end;end;end;end;end;end %请注意请
36、注意end的个数的个数disp(购买苹果的件数购买苹果的件数);n,disp(金额金额);sum,disp(元元);MATLAB SDU48switch ex case test1 (commands1)case test2 (commands2)case testk (commandsk)otherwise (commands)end 例:学生成绩管理,用来演示例:学生成绩管理,用来演示switch结构的应用。结构的应用。MATLAB SDU49%划分区域:满分划分区域:满分(100),优秀,优秀(90-99),良好,良好(80-89),及格,及格(60-79),不及格,不及格(10000
37、a(i), break; %跳出所在的一级循环。跳出所在的一级循环。 end; end, i MATLAB SDU54 通常运行一个通常运行一个M文件时,文件中的命令不在屏幕文件时,文件中的命令不在屏幕上显示出来。上显示出来。 如果如果M文件被执行之前,首先在文件被执行之前,首先在MATLAB命令窗命令窗中输入中输入echo命令并予以执行,然后再运行命令并予以执行,然后再运行M文文件,则件,则M文件中的程序将在文件中的程序将在MATLAB命令窗中显命令窗中显示出来,但影响程序的执行速度。示出来,但影响程序的执行速度。 若要清除若要清除echo命令的影响,在命令的影响,在MATLAB命令窗命令窗
38、中键入中键入“echo off”并回车即可。并回车即可。MATLAB SDU55 Input( )语句用在语句用在M文件中,执行到文件中,执行到input( )命令时,命令时,MATLAB暂停程序的执行,等待暂停程序的执行,等待用户用键盘赋值给用户用键盘赋值给input( )指定的变量。指定的变量。 Input( )语句还可用于等待用户输入语句还可用于等待用户输入MATLAB表达式和字符串,跟其他语句配表达式和字符串,跟其他语句配合,可以实现合,可以实现“菜单菜单”的功能。不过的功能。不过MATLAB中有专用的菜单设置命令,一般中有专用的菜单设置命令,一般并不使用并不使用input( )来建立
39、。来建立。MATLAB SDU56 类似于类似于input( )但功能更强的但功能更强的keyboard命令是命令是等待键盘输入内容,并把键盘输入的内容作为等待键盘输入内容,并把键盘输入的内容作为一个一个M文件来调用。文件来调用。 例如,建立一个例如,建立一个M文件文件us.m:x=0:0.01*pi:2*pi;keyboard 执行执行us.m,计算机返回一个提示符:,计算机返回一个提示符:k 此时,可以输入一个函数,但要注意这个函数此时,可以输入一个函数,但要注意这个函数自变量和因变量的对应关系。自变量和因变量的对应关系。 return命令返回正常状态,表示增加输入的文命令返回正常状态,表
40、示增加输入的文本内容输入完毕,这一条命令是必须的。本内容输入完毕,这一条命令是必须的。MATLAB SDU57指令及使用格式指令及使用格式使用说明使用说明v=input(message)v=input(message,s)该指令执行时,该指令执行时,“控制权控制权”交给键盘;待输入结束,按下交给键盘;待输入结束,按下Enter键,键,“控制权控制权”交还交还MATLAB。message是提示用的是提示用的字符串。第一种格式用于键入数值、字符串、元胞数组等数字符串。第一种格式用于键入数值、字符串、元胞数组等数据;第二种格式,不管键入什么,总是以字符串形式赋给变据;第二种格式,不管键入什么,总是以
41、字符串形式赋给变量量vkeyboard遇到遇到keyboard时,将时,将“控制权控制权”交给键盘,用户可从键盘输交给键盘,用户可从键盘输入各种入各种MATLAB指令。仅当用户输入指令。仅当用户输入return指令后,指令后,“控制控制权权”才交还给程序。它与才交还给程序。它与input的区别是:它允许输入任意多的区别是:它允许输入任意多个个MATLAB指令,而指令,而input只能输入赋给变量的值只能输入赋给变量的值breakbreak指令可导致包含该指令的指令可导致包含该指令的while、for环终止;也可在环终止;也可在if-end,switch-case,try-catch中导致中断中
42、导致中断continue跳过位于其后的循环中的其他指令,执行循环的下一个迭代跳过位于其后的循环中的其他指令,执行循环的下一个迭代pausepause(n)第一种格式使程序暂停执行,等待用户按任意键继续;第二第一种格式使程序暂停执行,等待用户按任意键继续;第二种格式使程序暂停种格式使程序暂停n秒后,再继续执行秒后,再继续执行MATLAB SDU58指令及使用格式指令及使用格式使用说明使用说明return结束结束return指令所在函数的执行,而把控制转至主调函数指令所在函数的执行,而把控制转至主调函数或指令窗。否则,只有待整个被调函数执行完后,才会转或指令窗。否则,只有待整个被调函数执行完后,才
43、会转出出error(message)显示出错信息显示出错信息message,终止程序,终止程序lasterr显示最新出错原因,并终止程序显示最新出错原因,并终止程序lastwarm显示显示MATLAB自动给出的最新警告程序继续运行自动给出的最新警告程序继续运行warning(message)显示警告信息显示警告信息message,程序继续运行,程序继续运行MATLAB SDU59 函数调用函数调用 参数传递参数传递 跨空间变量传递跨空间变量传递MATLAB SDU60 函数调用的命令行调用函数调用的命令行调用 functionname in1 in2 . inN 函数调用方式函数调用方式 ou
44、t1,out2,.,outN=functionname(in1,in2.inN) 输出方括号,输入小括号输出方括号,输入小括号MATLAB SDU61 调用调用M文件时,文件时,matlab会对该文件进行解析,并会对该文件进行解析,并生成相应的内部伪代码(生成相应的内部伪代码(pseudocode, pcode)存放在内存,再次调用时直接调用内存中的存放在内存,再次调用时直接调用内存中的pcode,避免对相同避免对相同M文件重复解析。文件重复解析。 可以用可以用pcode 产生伪代码:难以阅读,保密性产生伪代码:难以阅读,保密性好好 例例 p135 例例46MATLAB SDU62 利用函数文
45、件,实现直角坐标利用函数文件,实现直角坐标(x,y)与与极坐标极坐标(,)之间的转换之间的转换函数文件函数文件tran.m: function rho,theta=tran(x,y) rho=sqrt(x*x+y*y); theta=atan(y/x); 调用调用tran.m的命令文件的命令文件main1.m: x=input(Please input x=:); y=input(Please input y=:); rho,the=tran(x,y); rho theMATLAB SDU63参数传递参数传递 在调用函数时,在调用函数时,MATLAB用两个永久变量用两个永久变量nargin和和
46、nargout分别记录调用该函数时的输分别记录调用该函数时的输入实参和输出实参的个数。只要在函数文件中入实参和输出实参的个数。只要在函数文件中包含这两个变量,就可以准确地知道该函数文包含这两个变量,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函件被调用时的输入输出参数个数,从而决定函数如何进行处理。数如何进行处理。MATLAB SDU64 nargin在函数体内,用于获取实际输入宗量在函数体内,用于获取实际输入宗量 nargout在函数体内,用于获取实际输出宗量在函数体内,用于获取实际输出宗量 nargin(fun) 获取获取fun指定函数的标称输入宗量指定函数的标称输入宗量
47、数数 nargout(fun) 获取获取fun指定函数的标称输出指定函数的标称输出宗量数宗量数 inputname(n) 在函数体内使用,给出第在函数体内使用,给出第n个个输入宗量的实际调用变量名输入宗量的实际调用变量名MATLAB SDU65 例 nargin用法示例。 函数文件examp.m: function fout=charray(a,b,c) if nargin=1 fout=a; elseif nargin=2 fout=a+b; elseif nargin=3 fout=(a*b*c)/2; end 命令文件mydemo.m: x=1:3;y=1;2;3; examp(x) e
48、xamp(x,y) examp(x,y,3)MATLAB SDU66 跨空间计算串表达式的值跨空间计算串表达式的值 跨空间赋值跨空间赋值MATLAB SDU67 前面已介绍了实现不同工作空间之间变量传递的两种前面已介绍了实现不同工作空间之间变量传递的两种渠道:函数的输入输出宗量和全局变量。下面介绍第渠道:函数的输入输出宗量和全局变量。下面介绍第三个传递渠道:跨空间计算串表达式值的指令。三个传递渠道:跨空间计算串表达式值的指令。evalin(workspace,expression)跨空间计算串表达式值跨空间计算串表达式值 说明:说明: workspace可取两个值:可取两个值:base和和ca
49、ller 该调用格式的执行机理:该调用格式的执行机理: 当当workspace取取base表示计算表示计算eval(expression)时,将从基本工作空间获得变量值。时,将从基本工作空间获得变量值。 当当workspace取取caller表示计算表示计算eval(expression)时,将从主调函数工作空间获得变量值。主调函数是相对时,将从主调函数工作空间获得变量值。主调函数是相对被调函数而言的。这里,被调函数是指被调函数而言的。这里,被调函数是指evalin所在的函数。所在的函数。MATLAB SDU68evalin(workspace,expression1, expression2
50、)跨空间计算替代串表达式值跨空间计算替代串表达式值 说明:说明: workspace可取两个值:可取两个值:base和和caller 该调用格式的执行机理:该调用格式的执行机理: 先从所在函数空间获得变量值用先从所在函数空间获得变量值用eval(expression1)计算原串表达式;若该计算)计算原串表达式;若该计算失败,则在从失败,则在从workspace 指定的(基本或主调指定的(基本或主调函数)工作空间获取变量值,再通过函数)工作空间获取变量值,再通过eval(expression2)计算替代串表达式)计算替代串表达式 。MATLAB SDU69 实现不同工作空间之间变量传递的第四个实