MATLAB51第4章程序设计初步课件

上传人:vosvybf****vycfil... 文档编号:240918385 上传时间:2024-05-17 格式:PPT 页数:80 大小:533.39KB
返回 下载 相关 举报
MATLAB51第4章程序设计初步课件_第1页
第1页 / 共80页
MATLAB51第4章程序设计初步课件_第2页
第2页 / 共80页
MATLAB51第4章程序设计初步课件_第3页
第3页 / 共80页
点击查看更多>>
资源描述
MATLAB SDU1第四章第四章 matlab的程序设计初步的程序设计初步MATLAB SDU1第四章 matlab的程序设计初步MATLAB SDU2m文件简介文件简介用户如想灵活应用matlab去解决实际问题,充分调用matlab的科学技术资源,就需要编辑m文件包含matlab语言代码的文件称为m文件,其扩展名为m。编辑m文件可使用各种文本编辑器。MATLAB SDU2m文件简介用户如想灵活应用matlaMATLAB SDU3一、一、matlab的工作模式的工作模式指令驱动模式指令驱动模式 通常通常matlab以指令驱动模式工作,即在以指令驱动模式工作,即在matlab 窗口下当用户输入单行指令时,窗口下当用户输入单行指令时,matlab 立即处理这条指令,并显示结果,立即处理这条指令,并显示结果,这就是这就是matlab命令行方式。命令行方式。命令行操作时,命令行操作时,matlab窗口只允许一次窗口只允许一次执行一行上的一个或几个语句。执行一行上的一个或几个语句。MATLAB SDU3一、matlab的工作模式指令驱动模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 SDU4例如:MATLAB 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命令行方式程序可读性差,而且不能存储,命令行方式程序可读性差,而且不能存储,对于对于处理复杂问题和大量数据时是不方便的处理复杂问题和大量数据时是不方便的,应编写成能存储的程序文件。应编写成能存储的程序文件。MATLAB SDU5x1=0:10,x2=0:3:11,MATLAB SDU6m文件模式文件模式将将matlab语句构成的程序存储成以语句构成的程序存储成以m为扩展为扩展名的文件,然后再执行该程序文件,这种工名的文件,然后再执行该程序文件,这种工作模式称为程序文件模式。作模式称为程序文件模式。程序文件不能在指令窗口下建立,因为指令程序文件不能在指令窗口下建立,因为指令窗口只允许一次执行一行上的一个或几个语窗口只允许一次执行一行上的一个或几个语句句。MATLAB SDU6m文件模式MATLAB SDU7二、二、m文件的创建文件的创建 m文件的类型是普通的文本文件,我们可以文件的类型是普通的文本文件,我们可以使用系统认可的文本文件编辑器来建立使用系统认可的文本文件编辑器来建立m文件。文件。如各种如各种edit编辑器,编辑器,windows的记事本和的记事本和word等。等。具体的创建方法:具体的创建方法:1.在在matlab命令窗命令窗 口点击口点击file 菜单菜单 new m-fileMATLAB SDU7二、m文件的创建 m文件的类型是普通MATLAB SDU8MATLAB SDU8MATLAB SDU9MATLAB SDU9MATLAB SDU102.点击点击file Save Workspace As 将工作空间中的内容存入文件。*edit 用各种edit 编辑器编制m文件。edit 用matlab自带的编辑器编制m文件。word 用word编辑m文件。m文件编辑器的设定文件编辑器的设定 m文件编辑器可自己设定,设定方法是matlab命令窗口 options 菜单下点击 Edit Preference 选定m文件编辑器。MATLAB SDU102.点击file Save MATLAB SDU11m文件编辑器缺省设置是文件编辑器缺省设置是 matlab editor还可设成:其他的还可设成:其他的Text Editor 从从“file”“preference”editor/debugger设置设置 注意:注意:所创建的所创建的m文件必须纳入文件必须纳入matlab搜索路搜索路 径后,才能在径后,才能在matlab命令窗口运行。命令窗口运行。MATLAB SDU11m文件编辑器缺省设置是 matlaMATLAB SDU12matlab搜索路径的设置 matlab 缺省路径是c:matlabbin.用pathtool路径浏览器设定当前目录 “file”-“set path”方法设定当前目录MATLAB SDU12matlab搜索路径的设置MATLAB SDU13二、二、matlab文件的类型文件的类型1.数据文件数据文件.mat mat文件是文件是matlab以标准二进制格式保存以标准二进制格式保存的数据文件,可将工作空间中有用的数据变的数据文件,可将工作空间中有用的数据变量保存下来。量保存下来。mat文件的生成和调用是由函数文件的生成和调用是由函数save和和load完成的完成的。MATLAB SDU13二、matlab文件的类型数据文件MATLAB SDU142.m文件文件 m文件的语法类似于文件的语法类似于c语言,但又有其自身特语言,但又有其自身特点。它只是一个简单的点。它只是一个简单的ASCII码文本文件,执码文本文件,执行程序时逐行解释运行程序,行程序时逐行解释运行程序,matlab是解释是解释性的编程语言。性的编程语言。m文件有两类文件有两类 独立的独立的m m文件文件 称命令文件,脚本称命令文件,脚本(script)script)可调用可调用m m文件文件 称函数文件称函数文件 FunctionsFunctionsMATLAB SDU142.m文件MATLAB SDU15脚本(命令)文件(脚本(命令)文件(Script)命令文件命令文件 简单的简单的m文件文件 命令文件实际上是一串指令的集合,与在命令窗口逐行执行文件中命令文件实际上是一串指令的集合,与在命令窗口逐行执行文件中的所有指令,其结果是一样的。没有输入输出参数。的所有指令,其结果是一样的。没有输入输出参数。“脚本脚本”本身反映这样一个事实:本身反映这样一个事实:MATLAB只是按文件只是按文件所写的指令执行。所写的指令执行。M脚本(命令)文件的构成较简单,其脚本(命令)文件的构成较简单,其特点特点是:是:它只是一串按用户意图排列而成的(包括控制流向指令在内的)它只是一串按用户意图排列而成的(包括控制流向指令在内的)MATLAB指令集。指令集。脚本文件运行后,所产生的所有变量都驻留在脚本文件运行后,所产生的所有变量都驻留在MATLAB基本工基本工作空间作空间(Base workspace)中。只要不使用中。只要不使用clear指令加以清除,指令加以清除,且且MATLAB指令窗不关闭,这些变量将一直保存在基本工作空指令窗不关闭,这些变量将一直保存在基本工作空间中。基本工作空间随间中。基本工作空间随MATLAB的启动而产生;只有关闭的启动而产生;只有关闭MATLAB时,该基本空间才被删除。时,该基本空间才被删除。MATLAB SDU15脚本(命令)文件(Script)命MATLAB SDU16M函数文件(函数文件(Function)与脚本(命令)文件不同,函数文件与脚本(命令)文件不同,函数文件(Function file)犹如一个犹如一个“黑箱黑箱”。从外界只能看到传给它。从外界只能看到传给它的输入量和送出来的计算结果,而内部运作是藏的输入量和送出来的计算结果,而内部运作是藏而不见的。而不见的。MATLAB SDU16M函数文件(Function)与MATLAB SDU17函数文件的函数文件的特点特点:从形式上看,与脚本文件不同,函数文件的第一行总是以从形式上看,与脚本文件不同,函数文件的第一行总是以“function”引导的引导的“函数申明行函数申明行”(Function declaration line)。该。该行还罗列出函数与外界联系的全部行还罗列出函数与外界联系的全部“标称标称”输入输出宗量。但对输入输出宗量。但对“输输入输出宗量入输出宗量”的标称数目并没有限制,即可以完全没有输入输出宗量,的标称数目并没有限制,即可以完全没有输入输出宗量,也可以是任意数目。也可以是任意数目。MATLAB允许使用比允许使用比“标称数目标称数目”较少的输入输出宗量,实现对函数较少的输入输出宗量,实现对函数的调用。的调用。从运行上看,与脚本文件运行不同,每当函数文件运行,从运行上看,与脚本文件运行不同,每当函数文件运行,MATLAB就就会专门为它开辟一个临时工作空间,称之谓会专门为它开辟一个临时工作空间,称之谓函数工作空间函数工作空间(Function workspace)。所有中间变量都存放在函数工作空间中。当执行完文件。所有中间变量都存放在函数工作空间中。当执行完文件最后一条指令或遇到最后一条指令或遇到return时,就结束该函数文件的运行,同时该临时,就结束该函数文件的运行,同时该临时函数空间及其所有的中间变量就立即被清除。时函数空间及其所有的中间变量就立即被清除。函数空间随具体函数空间随具体M函数文件的被调用而产生,随调用结束而删除。函函数文件的被调用而产生,随调用结束而删除。函数空间是数空间是相对独立的相对独立的、临时的临时的。在。在MATLAB整个运行期间,可以产生整个运行期间,可以产生任意多个临时函数空间。任意多个临时函数空间。假如在函数文件中,发生对某脚本文件的调用,那么该脚本文件运行假如在函数文件中,发生对某脚本文件的调用,那么该脚本文件运行产生的所有变量都存放于该函数空间之中,而不是存放在基本空间。产生的所有变量都存放于该函数空间之中,而不是存放在基本空间。MATLAB SDU17函数文件的特点:从形式上看,与脚本MATLAB SDU18函数函数m文件的格式:文件的格式:function 返回变量返回变量=函数名(输入变量)函数名(输入变量)注释说明语句段注释说明语句段 程序语句段程序语句段特定规则:特定规则:1.函数函数m文件第一行必须以单词文件第一行必须以单词function作为引作为引导词,必须遵循如下形式:导词,必须遵循如下形式:function=()2.m文件的文件名必须是文件的文件名必须是.m。3.程序中的变量均为局部变量,不保存在工作程序中的变量均为局部变量,不保存在工作空间中。其变量只在函数运行期间有效。空间中。其变量只在函数运行期间有效。MATLAB SDU18函数m文件的格式:MATLAB SDU19M函数文件示例function sa=circle(r,s)%CIRCLEplot a circle of radii r in the line specified by 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 error(输入宗量太多。输入宗量太多。);end;if nargin=1 s=b;end;MATLAB SDU19M函数文件示例function sMATLAB SDU20函数申明(定义)行函数申明(定义)行(Function declaration line):位于函数文件的首行,以位于函数文件的首行,以MATLAB关键字关键字function开头,函数名以及函数的输入输出宗开头,函数名以及函数的输入输出宗量都在这一行定义。量都在这一行定义。MATLAB SDU20函数申明(定义)行(FunctiMATLAB SDU21H1行行(The first help text line):紧随函数申明行之后以紧随函数申明行之后以%开头的第一注释行。开头的第一注释行。按按MATLAB自身文件的规则,自身文件的规则,H1行包含:大行包含:大写体的函数文件名;运用关键词简要描述的函写体的函数文件名;运用关键词简要描述的函数功能。该数功能。该H1行供行供lookfor关键词查询和关键词查询和help在线帮助使用。在线帮助使用。MATLAB SDU21H1行(The first helMATLAB SDU22在线帮助文本在线帮助文本(Help text)区区:H1行及其之后的连续以行及其之后的连续以%开头的所有注释行开头的所有注释行构成整个在线帮助文本。它通常包括:函数输构成整个在线帮助文本。它通常包括:函数输入输出宗量的含义,调用格式说明。入输出宗量的含义,调用格式说明。MATLAB SDU22在线帮助文本(Help text)MATLAB SDU23编写和修改记录编写和修改记录:与在线帮助文本区相隔一个空行,也以与在线帮助文本区相隔一个空行,也以%开头,开头,标志编写及修改该标志编写及修改该M文件的作者和日期、版本文件的作者和日期、版本记录。它用于软件档案管理。记录。它用于软件档案管理。MATLAB SDU23编写和修改记录:与在线帮助文本区相MATLAB SDU24函数体函数体(Function body):为清晰起见,它与前面的注释行以空行相隔。为清晰起见,它与前面的注释行以空行相隔。这部分内容由实现该这部分内容由实现该M函数文件功能的函数文件功能的MATLAB指令组成。它接收输入宗量,进行指令组成。它接收输入宗量,进行程序流控制,得到输出宗量。其中为阅读、理程序流控制,得到输出宗量。其中为阅读、理解方便,也配置适当的空行和注释。若仅从运解方便,也配置适当的空行和注释。若仅从运算角度看,惟有函数申明行和函数体两部分是算角度看,惟有函数申明行和函数体两部分是构成构成M函数文件所必不可少的。函数文件所必不可少的。MATLAB SDU24函数体(Function bodyMATLAB SDU25function r=rank(A,tol)%RANK Matrix rank.%RANK(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 1984-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 SDU25function r=rankMATLAB SDU26matlab内置函数文件内置函数文件 matlab自定义的函数文件称内置函数文件自定义的函数文件称内置函数文件 调用内置函数的方法:使用函数名并给出相应的入调用内置函数的方法:使用函数名并给出相应的入口、出口参数即可。口、出口参数即可。例如:sin.m函数 调用格式:y=sin(2*x)实际应用中:x=0:2*pi/180:2*pi;y=sin(2*x)plot(x,y)M 函数文件分两类:内置和自定义函数文件分两类:内置和自定义MATLAB SDU26matlab内置函数文件M 函数文MATLAB SDU27又如又如 sqrt(x)求求x的平方根的平方根 abs(x)求求x的绝对值的绝对值 det(a)求行列式的值求行列式的值 等等。等等。matlab拥有大量的内置数学函数,供我们在拥有大量的内置数学函数,供我们在数值运算和符号运算中调用。数值运算和符号运算中调用。MATLAB SDU27又如 sqrt(x)求x的MATLAB SDU28II 函数函数m文件文件 需要输入变量,返回输出变量需要输入变量,返回输出变量 matlab用户可以根据需要编辑自己的m文件,它们可以像库函数一样方便的调用,从而极大地扩展了matlab 的能力。对于某一类特殊问题,如创建了许多m函数文件,则可形成新的工具箱。这种用matlab语言创建定义新的matlab函数的功能,正体现了matlab语言强大的扩展功能。MATLAB SDU28II 函数m文件 需要输入变量,MATLAB SDU29M函数类型函数类型I 函数句柄 函数句柄并不是伴随函数文件而自动形成的文件函数句柄并不是伴随函数文件而自动形成的文件“属性属性”,是必须通过专门的定义才会生成的。是必须通过专门的定义才会生成的。为一个为一个函数定义句柄的方法函数定义句柄的方法有两种:有两种:利用利用符号;符号;*利用转换函数利用转换函数str2func。对函数句柄的内涵观察需借助专门指令对函数句柄的内涵观察需借助专门指令Functions实现。实现。例:为例:为MATLAB的的“内建内建”函数创建函数句柄,并观察其内函数创建函数句柄,并观察其内涵。涵。hsin=sin;%(1)创建创建class(hsin)%(2)类型判别类型判别CC=functions(hsin)%(3)借助指令借助指令function观察内涵观察内涵MATLAB SDU29M函数类型I 函数句柄函数句柄并MATLAB SDU30函数句柄是函数句柄是matlabmatlab特有的语言结构,其优点:特有的语言结构,其优点:方便地实现函数间互相调用方便地实现函数间互相调用兼容函数加载的所有方式兼容函数加载的所有方式拓宽子函数包括局部函数的使用范围拓宽子函数包括局部函数的使用范围提高函数调用的可靠性提高函数调用的可靠性减少程序设计中的冗余减少程序设计中的冗余提高重复执行的效率提高重复执行的效率数组、结构数组、元胞型数组结合定义数据数组、结构数组、元胞型数组结合定义数据MATLAB SDU30函数句柄是matlab特有的语言结MATLAB SDU31函数句柄函数句柄根据内置函数创建函数句柄根据内置函数创建函数句柄 FUNHANDLE=FUNCTION_NAME匿名函数创建函数句柄匿名函数创建函数句柄 FUNHANDLE=(ARGLIST)EXPRESSION 如果函数句柄不含任何参数,如果函数句柄不含任何参数,后列表必须用空括号表后列表必须用空括号表示,调用也必须使用空括号示,调用也必须使用空括号参阅help function_handle MATLAB SDU31函数句柄根据内置函数创建函数句柄MATLAB SDU32%本例通过本例通过sin函数及其句柄演示若干基本用法。函数及其句柄演示若干基本用法。%(1)函数句柄的创建)函数句柄的创建fhandle=str2func(sin);%(2)函数句柄在)函数句柄在sin(pi/4)“数值计算数值计算”中的情况中的情况ys=sin(pi/4)%函数直接调用函数直接调用yfold=feval(sin,pi/4)%feval指令的指令的“老式老式”调调yfnew=feval(fhandle,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,0,2*pi)%泛函指令的泛函指令的“老式老式”调用调用xnew=fminbnd(fhandle,0,2*pi)%泛函指令的泛函指令的“新式新式”调用调用MATLAB SDU32%本例通过sin函数及其句柄演示若MATLAB SDU33M函数类型II II 主函数和子函数主函数和子函数 多个函数代码,第一个是主函数,其多个函数代码,第一个是主函数,其它是子函数;主函数可外部调用,子函数它是子函数;主函数可外部调用,子函数不行;多个子函数排列次序可改变不行;多个子函数排列次序可改变MATLAB SDU33M函数类型II 主函数和子函数MATLAB SDU34子函数的性质:子函数的性质:每个子函数的第一行是其自己的函数申明行。每个子函数的第一行是其自己的函数申明行。在在M函数文件内,主函数的位置不可改变,但子函数的函数文件内,主函数的位置不可改变,但子函数的排列次序可任意改变。排列次序可任意改变。子函数只能被处于同一文件的主函数或其他子函数调用。子函数只能被处于同一文件的主函数或其他子函数调用。在在M函数文件中,任何指令通过函数文件中,任何指令通过“名字名字”对函数进行调对函数进行调用时,子函数的优先级仅次于内装函数。用时,子函数的优先级仅次于内装函数。同一文件的主函数、子函数的工作空间都是彼此独立的。同一文件的主函数、子函数的工作空间都是彼此独立的。各函数间的信息,或通过输入输出宗量传递,或通过全各函数间的信息,或通过输入输出宗量传递,或通过全局变量传递,或通过跨空间指令传递。局变量传递,或通过跨空间指令传递。help,lookfor等帮助指令都不能提供关于子函数的任何等帮助指令都不能提供关于子函数的任何帮助信息。帮助信息。(需要通过主函数需要通过主函数)子函数的算例子函数的算例P119 例例43。MATLAB SDU34子函数的性质:每个子函数的第一行是MATLAB SDU35私有(用)(局部)私有(用)(局部)private函数函数所谓所谓私用(局部)函数私用(局部)函数,是指位于,是指位于private目录目录上的上的M文件函数。文件函数。私用(局部)函数的性质:私用(局部)函数的性质:私用(局部)函数的构造与普通私用(局部)函数的构造与普通M函数完全相同。函数完全相同。私用(局部)函数的只能被私用(局部)函数的只能被private目录的直接父目目录的直接父目录上的录上的M函数文件所调用。它不能被其他目录上的任函数文件所调用。它不能被其他目录上的任何何M函数、函数、M脚本文件或脚本文件或MATLAB指令窗中的命令所指令窗中的命令所调用,也不能被直接父目录上的调用,也不能被直接父目录上的M脚本文件调用。脚本文件调用。M文件中,任何指令通过文件中,任何指令通过“名字名字”对函数进行调用时,对函数进行调用时,私用(局部)函数的优先级虽低于内装函数和子函数,私用(局部)函数的优先级虽低于内装函数和子函数,但高与其他任何目录上的函数。但高与其他任何目录上的函数。help,lookfor等指令都不能提供关于私用等指令都不能提供关于私用(局部)(局部)函数的任何函数的任何帮助信息(必须通过帮助信息(必须通过private父目录)。父目录)。MATLAB SDU35私有(用)(局部)private函MATLAB SDU36嵌套函数嵌套函数任一个任一个MATLAB函数体内定义函数,称之函数体内定义函数,称之为外部函数的嵌套函数(旧版本不支持)为外部函数的嵌套函数(旧版本不支持)需用需用end结束结束相互间的调用和工作空间的访问相互间的调用和工作空间的访问 例子例子 P122-P125MATLAB SDU36嵌套函数任一个MATLAB函数体内MATLAB SDU37局部变量和全局变量局部变量和全局变量局部(局部(Local)变量)变量它存在于函数空间内部的中间变量,产生于该函数的运行过程它存在于函数空间内部的中间变量,产生于该函数的运行过程中,其影响范围也仅限于该函数本身。中,其影响范围也仅限于该函数本身。全局(全局(Global)变量)变量通过通过global指令,指令,MATLAB也允许几个不同的函数空间以及基也允许几个不同的函数空间以及基本空间共享一个变量。这种被共享的变量称为全局变量。每个本空间共享一个变量。这种被共享的变量称为全局变量。每个希望共享全局变量的函数或希望共享全局变量的函数或MATLAB基本工作空间,必须逐个基本工作空间,必须逐个用用global对具体变量加以专门定义。没采用对具体变量加以专门定义。没采用global定义的函数定义的函数或基本空间,将无权享用全局变量。或基本空间,将无权享用全局变量。如果某个函数的运作使全局变量的内容发生了变化,那么其他如果某个函数的运作使全局变量的内容发生了变化,那么其他函数空间以及基本工作空间中的同名变量也就随之变化。函数空间以及基本工作空间中的同名变量也就随之变化。除非与全局变量联系的所有工作空间都被删除,否则全局变量除非与全局变量联系的所有工作空间都被删除,否则全局变量依然存在。依然存在。例:例:p125 例例4-5MATLAB SDU37局部变量和全局变量局部(LocalMATLAB SDU38三、三、MATLAB控制流控制流for循环结构循环结构while循环结构循环结构 if-else-end分支结构分支结构 switch-case结构结构 try-catch结构结构 控制程序流的其它常用指令控制程序流的其它常用指令 MATLAB SDU38三、MATLAB控制流for循环结MATLAB SDU391、for循环结构循环结构for x=array(commands)endFor循环的结构以及含义和其他高级语言的结构循环的结构以及含义和其他高级语言的结构和含义基本一致。和含义基本一致。一个简单的一个简单的for循环示例。循环示例。和其他语言一样和其他语言一样for循环可以有多重循环。循环可以有多重循环。MATLAB SDU391、for循环结构for x=arMATLAB 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 SDU40例:利用for循环求1!+2!+3MATLAB SDU412、while循环结构循环结构while expression(commands)end与与for循环设置固定循环次数来执行循环体相比循环设置固定循环次数来执行循环体相比较,较,MATLAB中的中的while循环是应用逻辑表达式循环是应用逻辑表达式来设置与判断是否执行循环体,循环次数依逻来设置与判断是否执行循环体,循环次数依逻辑判断条件来决定,循环次数是不固定的。辑判断条件来决定,循环次数是不固定的。例:例:Fibonacci数组的元素满足数组的元素满足Fibonacci规则:规则:a k+2=ak+ak+1,(k=1,2,);且且a1=a2=1。现要求该。现要求该数组中第一个大于数组中第一个大于10000的元素。的元素。MATLAB SDU412、while循环结构while MATLAB SDU42a(1)=1;a(2)=1;i=2;while a(i)8 sums=number*0.95*cost;end,sums%两个分支结构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%请注意请注意end的个数的个数disp(购买苹果的件数购买苹果的件数);n,disp(金额金额);sum,disp(元元);MATLAB SDU47n=input(请输入客户拟购买MATLAB SDU484、switch-case结构结构switch ex case test1(commands1)case test2 (commands2)case testk (commandsk)otherwise(commands)end例:学生成绩管理,用来演示例:学生成绩管理,用来演示switch结构的应用。结构的应用。MATLAB SDU484、switch-case结构swMATLAB SDU49%划分区域:满分划分区域:满分(100),优秀,优秀(90-99),良好,良好(80-89),及格,及格(60-79),不及格,不及格(10000 a(i),break;%跳出所在的一级循环。跳出所在的一级循环。end;end,i MATLAB SDU53clearMATLAB SDU54echo命令命令通常运行一个通常运行一个M文件时,文件中的命令不在屏幕文件时,文件中的命令不在屏幕上显示出来。上显示出来。如果如果M文件被执行之前,首先在文件被执行之前,首先在MATLAB命令窗命令窗中输入中输入echo命令并予以执行,然后再运行命令并予以执行,然后再运行M文件,文件,则则M文件中的程序将在文件中的程序将在MATLAB命令窗中显示出命令窗中显示出来,但影响程序的执行速度。来,但影响程序的执行速度。若要清除若要清除echo命令的影响,在命令的影响,在MATLAB命令窗命令窗中键入中键入“echo off”并回车即可。并回车即可。MATLAB SDU54echo命令通常运行一个M文件时,MATLAB SDU55Input()语句语句Input()语句用在语句用在M文件中,执行到文件中,执行到input()命令时,命令时,MATLAB暂停程序的执行,等待暂停程序的执行,等待用户用键盘赋值给用户用键盘赋值给input()指定的变量。指定的变量。Input()语句还可用于等待用户输入语句还可用于等待用户输入MATLAB表达式和字符串,跟其他语句配表达式和字符串,跟其他语句配合,可以实现合,可以实现“菜单菜单”的功能。不过的功能。不过MATLAB中有专用的菜单设置命令,一般中有专用的菜单设置命令,一般并不使用并不使用input()来建立。来建立。MATLAB SDU55Input()语句Input(MATLAB SDU56keyboard命令命令类似于类似于input()但功能更强的但功能更强的keyboard命令是命令是等待键盘输入内容,并把键盘输入的内容作为等待键盘输入内容,并把键盘输入的内容作为一个一个M文件来调用。文件来调用。例如,建立一个例如,建立一个M文件文件us.m:x=0:0.01*pi:2*pi;keyboard执行执行us.m,计算机返回一个提示符:,计算机返回一个提示符:k此时,可以输入一个函数,但要注意这个函数此时,可以输入一个函数,但要注意这个函数自变量和因变量的对应关系。自变量和因变量的对应关系。return命令返回正常状态,表示增加输入的文命令返回正常状态,表示增加输入的文本内容输入完毕,这一条命令是必须的。本内容输入完毕,这一条命令是必须的。MATLAB SDU56keyboard命令类似于inpuMATLAB SDU576、控制程序流的其它常用指令、控制程序流的其它常用指令(1)指令及使用格式指令及使用格式使用说明使用说明v=input(message)v=input(message,s)该指令执行时,该指令执行时,“控制权控制权”交给键盘;待输入结束,按下交给键盘;待输入结束,按下Enter键,键,“控制权控制权”交还交还MATLAB。message是提示用的是提示用的字符串。第一种格式用于键入数值、字符串、元胞数组等数字符串。第一种格式用于键入数值、字符串、元胞数组等数据;第二种格式,不管键入什么,总是以字符串形式赋给变据;第二种格式,不管键入什么,总是以字符串形式赋给变量量vkeyboard遇到遇到keyboard时,将时,将“控制权控制权”交给键盘,用户可从键盘输交给键盘,用户可从键盘输入各种入各种MATLAB指令。仅当用户输入指令。仅当用户输入return指令后,指令后,“控制控制权权”才交还给程序。它与才交还给程序。它与input的区别是:它允许输入任意多的区别是:它允许输入任意多个个MATLAB指令,而指令,而input只能输入赋给变量的值只能输入赋给变量的值breakbreak指令可导致包含该指令的指令可导致包含该指令的while、for环终止;也可在环终止;也可在if-end,switch-case,try-catch中导致中断中导致中断continue跳过位于其后的循环中的其他指令,执行循环的下一个迭代跳过位于其后的循环中的其他指令,执行循环的下一个迭代pausepause(n)第一种格式使程序暂停执行,等待用户按任意键继续;第二第一种格式使程序暂停执行,等待用户按任意键继续;第二种格式使程序暂停种格式使程序暂停n秒后,再继续执行秒后,再继续执行MATLAB SDU576、控制程序流的其它常用指令(1)MATLAB SDU58控制程序流的其它常用指令控制程序流的其它常用指令(2)指令及使用格式指令及使用格式使用说明使用说明return结束结束return指令所在函数的执行,而把控制转至主调函数指令所在函数的执行,而把控制转至主调函数或指令窗。否则,只有待整个被调函数执行完后,才会转或指令窗。否则,只有待整个被调函数执行完后,才会转出出error(message)显示出错信息显示出错信息message,终止程序,终止程序lasterr显示最新出错原因,并终止程序显示最新出错原因,并终止程序lastwarm显示显示MATLAB自动给出的最新警告程序继续运行自动给出的最新警告程序继续运行warning(message)显示警告信息显示警告信息message,程序继续运行,程序继续运行MATLAB SDU58控制程序流的其它常用指令(2)指令MATLAB SDU59四、四、函数调用和变量传递函数调用和变量传递 函数调用函数调用参数传递参数传递跨空间变量传递跨空间变量传递MATLAB SDU59四、函数调用和变量传递 函数调用MATLAB SDU60函数调用函数调用的命令行调用函数调用的命令行调用 functionname in1 in2.inN函数调用方式函数调用方式 out1,out2,.,outN=functionname(in1,in2.inN)输出方括号,输入小括号输出方括号,输入小括号MATLAB SDU60函数调用函数调用的命令行调用MATLAB SDU61M文件和内部伪代码文件和内部伪代码调用调用M文件时,文件时,matlab会对该文件进行解析,并会对该文件进行解析,并生成相应的内部伪代码(生成相应的内部伪代码(pseudocode,pcode)存放在内存,再次调用时直接调用内存)存放在内存,再次调用时直接调用内存中的中的pcode,避免对相同避免对相同M文件重复解析。文件重复解析。可以用可以用pcode 产生伪代码:难以阅读,保密性产生伪代码:难以阅读,保密性好好例例 p135 例例46MATLAB SDU61M文件和内部伪代码调用M文件时,mMATLAB SDU62例例2利用函数文件,实现直角坐标利用函数文件,实现直角坐标(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 SDU62例2利用函数文件,实现直角坐标(xMATLAB SDU63 参数传递参数传递 在调用函数时,在调用函数时,MATLAB用两个永久变量用两个永久变量nargin和和nargout分别记录调用该函数时的输分别记录调用该函数时的输入实参和输出实参的个数。只要在函数文件中入实参和输出实参的个数。只要在函数文件中包含这两个变量,就可以准确地知道该函数文包含这两个变量,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函件被调用时的输入输出参数个数,从而决定函数如何进行处理。数如何进行处理。MATLAB SDU63 参数传递MATLAB SDU64参数传递参数传递nargin在函数体内,用于获取实际输入宗量在函数体内,用于获取实际输入宗量nargout在函数体内,用于获取实际输出宗量在函数体内,用于获取实际输出宗量nargin(fun)获取获取fun指定函数的标称输入宗指定函数的标称输入宗量数量数nargout(fun)获取获取fun指定函数的标称输出指定函数的标称输出宗量数宗量数inputname(n)在函数体内使用,给出第在函数体内使用,给出第n个个输入宗量的实际调用变量名输入宗量的实际调用变量名MATLAB SDU64参数传递nargin在函数体内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)examp(x,y)examp(x,y,3)MATLAB SDU65 例 nargin用法示例。MATLAB SDU66跨空间变量传递跨空间变量传递跨空间计算串表达式的值跨空间计算串表达式的值跨空间赋值跨空间赋值MATLAB SDU66跨空间变量传递跨空间计算串表达式的MATLAB SDU67跨空间计算串表达式的值跨空间计算串表达式的值前面已介绍了实现不同工作空间之间变量传递的两种渠前面已介绍了实现不同工作空间之间变量传递的两种渠道:函数的输入输出宗量和全局变量。下面介绍第三个道:函数的输入输出宗量和全局变量。下面介绍第三个传递渠道:跨空间计算串表达式值的指令。传递渠道:跨空间计算串表达式值的指令。evalin(workspace,expression)跨空间计算串表达式值跨空间计算串表达式值说明:说明:workspace可取两个值:可取两个值:base和和caller该调用格式的执行机理:该调用格式的执行机理:当当workspace取取base表示计算表示计算eval(expression)时,将从基本工作空间获得变量值。时,将从基本工作空间获得变量值。当当workspace取取caller表示计算表示计算eval(expression)时,将从主调函数工作空间获得变量)时,将从主调函数工作空间获得变量值。主调函数是相对被调函数而言的。这里,被调函数是值。主调函数是相对被调函数而言的。这里,被调函数是指指evalin所在的函数。所在的函数。MATLAB SDU67跨空间计算串表达式的值前面已介绍了MATLAB SDU68evalin(workspace,expression1,expression2)跨空间计算替代串表达式跨空间计算替代串表达式值值说明:说明:workspace可取两个值:可取两个值:base和和caller该调用格式的执行机理:该调用格式的执行机理:先从所在函数空间获得变量值用先从所在函数空间获得变量值用eval(expression1)计算原串表达式;若该计算)计算原串表达式;若该计算失败,则在从失败,则在从workspace 指定的(基本或主调指定的(基本或主调函数)工作空间获取变量值,再通过函数)工作空间获取变量值,再通过eval(expression2)计算替代串表达式)计算替代串表达式。MATLAB SDU68evalin(workspaceMATLAB SDU69跨空间赋值跨空间赋值实现不同工作空间之间变量传递的第四个实现不同工作空间之间变量传递的第四个传递渠道是跨空间赋值指令:传递渠道是跨空间赋值指令:assignin(workspace,VN,x)跨空间向跨空间向VN变量赋值变量赋值说明:把当前工作空间内变量说明:把当前工作空间内变量x的值赋给的值赋给workspace指定空间名的指定空间名的VN变量。变量。MATLAB SDU69跨空间赋值实现不同工作空间之间变量MATLAB SDU70四、程序调试与优化四、程序调试与优化程序调试概述程序调试概述一般调试技巧一般调试技巧程序调试器的使用程序调试器的使用程序设计的优化程序设计的优化MATLAB SDU70四、程序调试与优化程序调试概述MATLAB SDU71程序调试概述程序调试概述MATLAB的调试器的调试器(Debugger)可以迅速地可以迅速地帮您找出程序错误所在,其帮您找出程序错误所在,其功能功能包含:包含:查询每一个函数的工作空间查询每一个函数的工作空间(Workspace).显示函数调用的堆栈显示函数调用的堆栈(Function Call Stack).一行一行地执行一行一行地执行M文件文件.MATLAB SDU71程序调试概述MATLAB的调试器(MATLAB SDU72一般调试技巧一般调试技巧一般而言,计算机程序可能发生的错误可分为两种:一般而言,计算机程序可能发生的错误可分为两种:语法错误(语法错误(Syntax Errors)逻辑错误(逻辑错误(Logic Errors)一般检测逻辑错误的方法:一般检测逻辑错误的方法:删除表达式最尾端的分号。删除表达式最尾端的分号。若调试一个单独函数,可在其第一行的函数申明行加上若调试一个单独函数,可在其第一行的函数申明行加上%,并,并定义输入变量的值,直接以脚本的方式来执行此定义输入变量的值,直接以脚本的方式来执行此M文件,并保文件,并保留所有变量于留所有变量于MATLAB工作空间中,以便后续查看及调试。工作空间中,以便后续查看及调试。在程序中加入在程序中加入keyboard命令,可使程序执行至此处即暂停,命令,可使程序执行至此处即暂停,并显示并显示“k”的提示号。此时可任意查看或改变工作空间的的提示号。此时可任意查看或改变工作空间的任何变量。若要继续执行程序,可在命令窗输入任何变量。若要继续执行程序,可在命令窗输入“return”并按下并按下Enter键。键。使用使用MATLAB程序调试器。程序调试器。MATLAB SDU72一般调试技巧一般而言,计算机程序可MATLAB SDU73程序调试器的使用程序调试器的使用M文本编辑器事实上就是调试器,包含了文本编辑器事实上就是调试器,包含了一系列的调试图标。一系列的调试图标。更多的调试选项,则出现在工具栏的更多的调试选项,则出现在工具栏的debug下拉式菜单中。下拉式菜单中。调试器调试程序的一般步骤:调试器调试程序的一般步骤:MATLAB SDU73程序调试器的使用M文本编辑器事实上MATLAB SDU74程序调试举例举例 教材p141 断点的设置和变量空间的检查MATLAB SDU74程序调试举例举例 教材p141 MATLAB SDU75程序的优化程序的优化代码的计时的意义:促进代码的优化代码的计时的意义:促进代码的优化代码计时的方法代码计时的方法 1.tic toc计时方法计时方法 2.etime(t1,t2)计时方法计时方法 (用(用clock计时)计时)3.用用cuptime计时方法计时方法MATLAB SDU75程序的优化代码的计时的意义:促进代MATLAB SDU76程序的优化举例程序的优化举例程序代码的向量化和对矩阵的熟悉:充分程序代码的向量化和对矩阵的熟悉:充分利用利用Matlab矩阵处理的优势矩阵处理的优势 例:例:求求1+1/2+1/3+1/1000000 程序求和程序求和 矩阵运算求和矩阵运算求和MATLAB SDU76程序的优化举例程序代码的向量化和对MATLAB SDU77程序代码程序代码矩阵的预先配置(内存的预先分配)矩阵的预先配置(内存的预先分配)例:例:a=1,2,3;4,5,6;7,8,9;%option y=zeros(1:100)for i=1,100 y(i)=det(ai)endMATLAB SDU77程序代码矩阵的预先配置(内存的预先MATLAB SDU78小小 结结 本节主要介绍了本节主要介绍了matlab语言程序设语言程序设计基础计基础掌握掌握2类类M文件,掌握文件,掌握M函数的创建函数的创建和引用,掌握和引用,掌握MATLAB控制流控制流 通过学习,应能编写简单程序,学通过学习,应能编写简单程序,学会程序的调试会程序的调试MATLAB SDU78小 结 本节主MATLAB SDU79思考题2 产生20个随机的二位随机整数,输出其中小于平均值的偶数MATLAB SDU79思考题2 产生20个随机的二位随机MATLAB51第4章程序设计初步课件
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!