第章程序设计

上传人:枫** 文档编号:567673279 上传时间:2024-07-22 格式:PPT 页数:96 大小:322KB
返回 下载 相关 举报
第章程序设计_第1页
第1页 / 共96页
第章程序设计_第2页
第2页 / 共96页
第章程序设计_第3页
第3页 / 共96页
第章程序设计_第4页
第4页 / 共96页
第章程序设计_第5页
第5页 / 共96页
点击查看更多>>
资源描述

《第章程序设计》由会员分享,可在线阅读,更多相关《第章程序设计(96页珍藏版)》请在金锄头文库上搜索。

1、第第6章章 MTALAB语言程序设计语言程序设计第第6章章 MATLAB 语言程序设计语言程序设计l主要内容M文本文件介绍文本文件介绍 函数流程控制函数流程控制 函数变量函数变量 函数类型函数类型 函数操作函数操作 MATLAB 编程错误处理编程错误处理 程序设计的辅助函数程序设计的辅助函数 调试程序调试程序 优化程序优化程序 辈族痞知宫悦纂揣靡刨蔫耸暂烧糊轰抒磐创掷皱坡颜堂踌附媚泄迷姻琅迅第章程序设计第章程序设计7/22/20241第第6章章 MTALAB语言程序设计语言程序设计第第6章章 MATLAB 语言程序设计语言程序设计lMATLAB做为一种广泛用于科学计算的工具软做为一种广泛用于科

2、学计算的工具软件,不仅具有强大的数值计算、科学计算和绘件,不仅具有强大的数值计算、科学计算和绘图功能外,还具有强大的程序设计功能。图功能外,还具有强大的程序设计功能。lMATLAB提供了两种源程序文件格式:提供了两种源程序文件格式:命令文命令文件件和和函数文件函数文件没醉撩帖低传排竹蛾四戍纬栓挑墓凿遂呜趴柴凡侯稼绥末否捉纫年读绅馏第章程序设计第章程序设计7/22/20242第第6章章 MTALAB语言程序设计语言程序设计命令文件命令文件 命令文件命令文件类似于类似于DOS下的批处理文件,它的执下的批处理文件,它的执行方式很简单,用户只需在提示符下键入该命行方式很简单,用户只需在提示符下键入该命

3、令文件的文件名,令文件的文件名,MATLAB就会自动执行该命就会自动执行该命令文件的各条语句。命令文件能对令文件的各条语句。命令文件能对MATLAB工工作空间的数据进行处理,文件中所有语句的执作空间的数据进行处理,文件中所有语句的执行结果也完全返回到工作空间中,行结果也完全返回到工作空间中,命令文件格命令文件格式适用于用户做需要立即得到结果的小规模运式适用于用户做需要立即得到结果的小规模运算算夺涧歼邓循屉褐郧诉帜猩备囤铅蘸乖音总你蚌偏暮棺援差凤挑渝狮糟博淖第章程序设计第章程序设计7/22/20243第第6章章 MTALAB语言程序设计语言程序设计函数文件函数文件l一个一个 M 文件通常包含五个

4、部分,函数定义语句、文件通常包含五个部分,函数定义语句、H1 帮助行、帮助文本、函数体或者脚本文件语句和注释帮助行、帮助文本、函数体或者脚本文件语句和注释语句。语句。H1 行为紧随函数定义语句后面的一行注释语句。行为紧随函数定义语句后面的一行注释语句。当用户通过当用户通过 help 命令查询该函数的说明信息时命令查询该函数的说明信息时 H1 行行显示为第一行,另外显示为第一行,另外 lookfor 函数只检索和显示函数只检索和显示 H1 行。帮助文本为行。帮助文本为 H1 行后面连续的注释行,当在命令行后面连续的注释行,当在命令窗口中通过窗口中通过 help 命令查询该函数的说明信息时则在窗命

5、令查询该函数的说明信息时则在窗口中显示这些内容。函数体为口中显示这些内容。函数体为 M 文件的主要部分,是文件的主要部分,是函数的执行代码。除上面的函数的执行代码。除上面的 H1 行和帮助文本外,为行和帮助文本外,为了易于理解,可以在书写代码时添加注释语句。这些了易于理解,可以在书写代码时添加注释语句。这些注释语句在编译程序时会被忽略,因此不会影响编译注释语句在编译程序时会被忽略,因此不会影响编译速度和程序运行速度,但是能够增加程序的可读性。速度和程序运行速度,但是能够增加程序的可读性。页毯架蘸撇呻防嚷栈锰嘻购院子茎罩泳能咽菜寅谓廷帛障赚悦迈稚兢赡孕第章程序设计第章程序设计7/22/20244

6、第第6章章 MTALAB语言程序设计语言程序设计M文本编辑器文本编辑器l是一个集编辑与调试两种功能于一体的工具环境。是一个集编辑与调试两种功能于一体的工具环境。l有三种启动编辑器的操作方法有三种启动编辑器的操作方法命令窗口命令窗口edit工具条工具条File菜单下菜单下l打开已有的打开已有的M文件四种方法文件四种方法命令窗口命令窗口edit 文件名(不带扩展名)文件名(不带扩展名)工具条工具条File菜单下菜单下当前路径当前路径盈彰欠喳搔秀澡白怂矮称悬案叭暇盐腮咖烧祈缘愤巢恤怖摆称梦禁纠肝犊第章程序设计第章程序设计7/22/20245第第6章章 MTALAB语言程序设计语言程序设计编写命令文件

7、的步骤编写命令文件的步骤l新建文件、保存文件和运行(几种方法)新建文件、保存文件和运行(几种方法)l例例5.1,命名为命名为exam5_1.ml程序行为程序行为lY=5 1 2;8 3 7;9 6 8;5 5 5;4 2 3lBar(Y,stack);lGrid on;lSet(gca,layer,top);缚袋岿窄圆敷腐宇连咎挤看迈歪返鞘彬络筹默荔迢岗罕苍营淬秉挣耐父蔗第章程序设计第章程序设计7/22/20246第第6章章 MTALAB语言程序设计语言程序设计M函数文件介绍函数文件介绍l函数式函数式M文件文件 l函数式函数式 M 文件比脚本式文件比脚本式 M 文件相对复杂一些,脚本文件不需文

8、件相对复杂一些,脚本文件不需要自带参数,也不一定返回结果,而函数文件一般要自带参数,要自带参数,也不一定返回结果,而函数文件一般要自带参数,并且有返回结果,以便于更好的把整个程序连为一段。函数文并且有返回结果,以便于更好的把整个程序连为一段。函数文件也可以不带参数,此时文件中一般使用一些全局变量来实现件也可以不带参数,此时文件中一般使用一些全局变量来实现与外界和其他函数之间的数据交换。与外界和其他函数之间的数据交换。l函数文件的第一行以函数文件的第一行以 function 开始,说明此文件是一个函数。开始,说明此文件是一个函数。其实质为用户向其实质为用户向 MATLAB 函数库中添加的子函数。

9、在默认情函数库中添加的子函数。在默认情况下,函数文件中的变量都是局部变量,仅在函数运行期间有况下,函数文件中的变量都是局部变量,仅在函数运行期间有效,函数运行结束后,这些变量将从工作区中清除。效,函数运行结束后,这些变量将从工作区中清除。l文件名的约定文件名的约定骇芋腰奈袱阮给鹏革神察恃奄饲常型备贬幢见淄泽屋耍晕秧桅了滥倍华莱第章程序设计第章程序设计7/22/20247第第6章章 MTALAB语言程序设计语言程序设计 M函数文件编程实例函数文件编程实例l一维向量求平均数一维向量求平均数lfunction y = average(x)l% AVERAGE Mean of vector eleme

10、nts.l% AVERAGE(X), where X is a vector, is the mean of vector elements.l% Nonvector input results in an error.lm,n = size(x);lif (m = 1) | (n = 1) | (m = 1 & n = 1)l error(Input must be a vector)lendly = sum(x)/length(x); % Actual computation巩销羽危倪艺躁纬赞馁俘厅胸绘旦属斥哨益郸天缉敷袍瑞捷庆案另导皮尤第章程序设计第章程序设计7/22/20248第第6章

11、章 MTALAB语言程序设计语言程序设计函数流程控制函数流程控制 l顺序结构顺序结构 l判断语句(判断语句(ifelseend) l分支语句分支语句 l循环语句循环语句 ltrycatchend语句语句 l其他流程控制函数其他流程控制函数 破伶赡筋填肺塌莹奎旧拨兔范崇躲噶推瑚氟淡蚊蛋惮艺营粥隆邢失牌甲盛第章程序设计第章程序设计7/22/20249第第6章章 MTALAB语言程序设计语言程序设计顺序结构顺序结构 l顺序结构是最简单的程序结构,系统在编译程顺序结构是最简单的程序结构,系统在编译程序时,按照程序的物理位置顺序执行。这种程序时,按照程序的物理位置顺序执行。这种程序容易编制,但是结构单一

12、,能够实现的功能序容易编制,但是结构单一,能够实现的功能有限。有限。l例:不采用第例:不采用第3个变量,实现两个数值的交换个变量,实现两个数值的交换 褒麓诞桨氖悠僳嚣策醇微患似伐蕊绵贼炒览挛陌疮再旗俺滚载数瘫溺旨漆第章程序设计第章程序设计7/22/202410第第6章章 MTALAB语言程序设计语言程序设计顺序结构举例顺序结构举例lfunction a,b = exchange(a,b)l% exchange the value of two numbers without the third variableldisp(step1:a = a + b);la = a + bldisp(ste

13、p2:b = a - b);lb = a - bldisp(step3:a = a - b);la = a - bldisp(final result:);瑞突它由讯殊罩恭恳薛卧益氰含厘驯双苹孔峪敢逊姜篇淹瓣挖害帧索涕艾第章程序设计第章程序设计7/22/202411第第6章章 MTALAB语言程序设计语言程序设计判断语句(判断语句(ifelseend) lifendlifelseendlifelseifelseend执秒抛陪奋腺迎京雅扒亲尉公亩彦牡仁蜂撮菏视碳笑持星灾函衬涟粕尘犹第章程序设计第章程序设计7/22/202412第第6章章 MTALAB语言程序设计语言程序设计判断语句判断语句lif

14、end l此时的程序结构如下:此时的程序结构如下:if 表达式表达式 执行代码块执行代码块endl这是最简单的判断语句,只有一个判断语句,这是最简单的判断语句,只有一个判断语句,其中的表达式为逻辑表达式,当表达式为真时,其中的表达式为逻辑表达式,当表达式为真时,执行相应的语句,否则,直接跳到下一段语句。执行相应的语句,否则,直接跳到下一段语句。 粗咨蛰芝簇挺彝谋傍廊喧炙绢胡割玖使贩槽砂硫拎溃狞誓喇运拾扔传浚鸭第章程序设计第章程序设计7/22/202413第第6章章 MTALAB语言程序设计语言程序设计判断语句判断语句lifelseend l当程序有两个选择时,可以选择当程序有两个选择时,可以选

15、择 ifelseend 结构,结构,此时程序结构为:此时程序结构为:if 表达式表达式 执行代码块执行代码块1else 执行代码块执行代码块2endl当判断表达式为真时,执行代码块当判断表达式为真时,执行代码块1,否则执行代码块,否则执行代码块2。蛊抠缓雌环佐幕部技伙来链娶梢囊先悲痢肾伺骸肄娩士藐烯汀尧粘昂韶予第章程序设计第章程序设计7/22/202414第第6章章 MTALAB语言程序设计语言程序设计判断语句判断语句lifelseifelseend l上面的两种形式中,分别包含一个选择和两个选择,当判断包上面的两种形式中,分别包含一个选择和两个选择,当判断包含多个选择时,可以采用含多个选择时

16、,可以采用elseif 语句,结构为:语句,结构为:if 表达式表达式1 执行代码块执行代码块1elseif 表达式表达式2 执行代码块执行代码块2elseif .else 执行代码块执行代码块endl其中可以包含任意多个其中可以包含任意多个 elseif 语句。语句。 肯绊柞遂慎业誊课矾基苔漏倚寄愈干你佯寸大系淀韦搅瘸讨猫懒宾窒删葬第章程序设计第章程序设计7/22/202415第第6章章 MTALAB语言程序设计语言程序设计 条件语句实例条件语句实例l判断两个输入的参数是否都大于零,是则返回判断两个输入的参数是否都大于零,是则返回a and b both larger tan0l不全大于零则

17、返回不全大于零则返回a and b not both larger tan0轮月绚饲弱魄倦汪揪辨外耍簧采郧梧旦个薪檬撑蔑撂石芦跃怒辩芋城赘某第章程序设计第章程序设计7/22/202416第第6章章 MTALAB语言程序设计语言程序设计分支语句分支语句 l上一节中的上一节中的 ifelseifelseend 语句可以适用于多种选择的语句可以适用于多种选择的流程控制,此时对流程控制,此时对 else之外的每一个选择语句设置一个表达式,之外的每一个选择语句设置一个表达式,表达式为真时则执行该模块。表达式为真时则执行该模块。MATLAB 中的另一种多选择语句中的另一种多选择语句为分支语句。分支语句的结

18、构为:为分支语句。分支语句的结构为:switch 分支语句分支语句 case 条件语句条件语句 执行代码块执行代码块 case 条件语句条件语句1, 条件语句条件语句2, 条件语句条件语句3, . 执行代码块执行代码块 otherwise 执行代码块执行代码块end倘獭险克睬段哲巾尔吴罐秩枷喜馅雇际蠢嚼匹泻抹征狼钳监糯娄录袒纬适第章程序设计第章程序设计7/22/202417第第6章章 MTALAB语言程序设计语言程序设计分支语句分支语句l其中的分支语句为一个变量,可以是数值变量或者字其中的分支语句为一个变量,可以是数值变量或者字符串变量,如果该变量的值与某一条件相符,则执行符串变量,如果该变量

19、的值与某一条件相符,则执行相应的语句,否则,执行相应的语句,否则,执行 otherwise 后面的语句。在后面的语句。在每一个条件中,可以包含一个条件语句,可以包含多每一个条件中,可以包含一个条件语句,可以包含多个条件,当包含多个条件时,将条件以单元数组的形个条件,当包含多个条件时,将条件以单元数组的形式表示。式表示。lMATLAB 的分支语句类似于的分支语句类似于 C 语言的分支语句,但语言的分支语句,但是又不完全相同:是又不完全相同:MATLAB 语句从上到下依次判断条语句从上到下依次判断条件,条件符合则执行相应的代码块,之后退出该分支件,条件符合则执行相应的代码块,之后退出该分支语句,因

20、此在代码块后面不需要添加语句,因此在代码块后面不需要添加“break”语句。语句。吊缓琼肠匈柿葛琼析蛛檬逮菜傍辅骂蛹桃菲戚瘪铭绵钮缓骚汇蒜匣腑席焰第章程序设计第章程序设计7/22/202418第第6章章 MTALAB语言程序设计语言程序设计循环语句循环语句 l在科学计算及生活实际中,会遇到许多有规律在科学计算及生活实际中,会遇到许多有规律的重复运算。的重复运算。l如果一个计算过程,要重复一系列的计算步骤如果一个计算过程,要重复一系列的计算步骤若干次,每次计算步骤完全相同,则这种算法若干次,每次计算步骤完全相同,则这种算法过程称为循环过程。过程称为循环过程。lMATLAB中有两种循环,一种是指定

21、循环次数,中有两种循环,一种是指定循环次数,另一种是每次需判定循环条件。另一种是每次需判定循环条件。lfor 语句语句lwhile 语句语句殿馒胆擅娇屋直哪札生疗疟恰王肥音扮羞纲源苫忘芝挖巷疙捏兼患江戒肤第章程序设计第章程序设计7/22/202419第第6章章 MTALAB语言程序设计语言程序设计1for 语句语句lfor 语句将相同的代码执行预定义的次数。语句将相同的代码执行预定义的次数。for 语句的结构为:语句的结构为:for 循环变量循环变量 = 表达式表达式 执行代码块执行代码块 endl生活中应用生活中应用for 循环的例子很多。循环的例子很多。l求自然数前求自然数前n项和项和l用

22、二分法解方程比较应用命令文件函数文件的用二分法解方程比较应用命令文件函数文件的区别(命令文件区别(命令文件exam5_6,函数文件,函数文件fangch)麦纱攫犊呈籍手冈涵德工凯哩亏洪吟答抹烙锅属艇瓢蹭畴页穷缮孟位赂簿第章程序设计第章程序设计7/22/202420第第6章章 MTALAB语言程序设计语言程序设计2while 语句语句lwhile 语句用于将相同的代码块执行多次,但语句用于将相同的代码块执行多次,但是次数并不预先指定,当是次数并不预先指定,当 while 的条件表达式的条件表达式为真时,执行代码块,直到条件表达式为假。为真时,执行代码块,直到条件表达式为假。while 语句的结构

23、为:语句的结构为:while 表达式表达式 执行代码块执行代码块end 破鳖箔靛映寺季坪斑盐脏蓟法趋嘻虑讶冒蹈戍十计导床障红乐吏宠升糯主第章程序设计第章程序设计7/22/202421第第6章章 MTALAB语言程序设计语言程序设计While编程实例编程实例l求前求前n项和,使和小于等于项和,使和小于等于100的的n值值摈兢贩惟隅辽沂串坟驼郁脸盔动挑辜末僻纫瑟杰翻狰胯护锡午桶帽筛迟俊第章程序设计第章程序设计7/22/202422第第6章章 MTALAB语言程序设计语言程序设计trycatchend语句语句lMATLAB 中的另一种判断语句为中的另一种判断语句为 trycatch 语句,这种语句语

24、句,这种语句可以包容程序运行中的错误,并返回错误类型。这种语句的结可以包容程序运行中的错误,并返回错误类型。这种语句的结构为:构为:try 运行代码块运行代码块catch运行代码块运行代码块endl该语句首先从上到下依次执行,如果遇到程序错误则运行下一该语句首先从上到下依次执行,如果遇到程序错误则运行下一个个 catch 中的语句,依次向下进行。如果程序运行成功,则退中的语句,依次向下进行。如果程序运行成功,则退出该判断语句。如果在出该判断语句。如果在 catch 和和 end之间的程序运行出错,则之间的程序运行出错,则程序运行终止,或者如果存在其他的程序运行终止,或者如果存在其他的 tryc

25、atch 结构,则运行结构,则运行下一个下一个 trycatch 结构。可以利用结构。可以利用 lasterr 命令查看发生错误命令查看发生错误的原因。的原因。突聂衅佃磅需诀吊智坠宿赘摆趁冗克纺蜀畏疽狙醒洼寞蠕碑羔恭还掖奸道第章程序设计第章程序设计7/22/202423第第6章章 MTALAB语言程序设计语言程序设计trycatchend语句语句exam5_7l%try catchlclearlN=4;lA=magic(3);ltryl A_N=A(N,:);lcatchl A_end=A(end,:) %如果程序出错则执行此行lendllasterr% 显示出错原因女臻窑泡洲阜私禾牌疫捶蔫角

26、鞘幽板翰褥棕臃默鲍南鲁圆提弯蛹劝捞漏沃第章程序设计第章程序设计7/22/202424第第6章章 MTALAB语言程序设计语言程序设计其他流程控制函数其他流程控制函数lcontinue:continue 语句通常用在循环控制中,包括语句通常用在循环控制中,包括 for 循环和循环和 while 循环,用于结束当次循环,继续执循环,用于结束当次循环,继续执行下一次循环,但是不结束当前循环。一般行下一次循环,但是不结束当前循环。一般 continue 语句与语句与 if 语句相结合,当满足一定的条件时,执行语句相结合,当满足一定的条件时,执行 continue 语句。语句。lbreak:与:与 co

27、ntinue 相同的是,相同的是,break 函数也是用于函数也是用于循环控制,中断当前循环。与循环控制,中断当前循环。与 continue 不同,不同,break 跳出当前循环,不再执行该循环的任何操作。跳出当前循环,不再执行该循环的任何操作。lreturn:结束该程序的执行,返回到调用函数或者键:结束该程序的执行,返回到调用函数或者键盘。盘。拿渠辜典碧圆彝拿厨熙筛剐蒂茄警肛咎澳惨跃蔷寸违胳托磁胺谈掸演疼倔第章程序设计第章程序设计7/22/202425第第6章章 MTALAB语言程序设计语言程序设计算法的概念算法的概念l算法可以理解为由基本运算及规定的运算顺序算法可以理解为由基本运算及规定的

28、运算顺序所构成的完整的解题步骤,或者看成按照要求所构成的完整的解题步骤,或者看成按照要求设计好有限的确切的计算序列,并且这样的步设计好有限的确切的计算序列,并且这样的步骤或序列能够解决一类问题骤或序列能够解决一类问题l描述算法可以有不同的方式,例如,可以用描述算法可以有不同的方式,例如,可以用自自然语言然语言和数学语言加以描述,也可以借助和数学语言加以描述,也可以借助形式形式语言语言(算法语言)给出精确的说明,也可以用(算法语言)给出精确的说明,也可以用框图直观地显示算法的全貌框图直观地显示算法的全貌晴蚜水挖确踩盼嘴烧绒较伎盐巡讥辕眨继硒明谢皿寿潦脏演然鲸列拇颊贾第章程序设计第章程序设计7/2

29、2/202426第第6章章 MTALAB语言程序设计语言程序设计设计实例设计实例l写出一个求有限整数序列中最大值的算法写出一个求有限整数序列中最大值的算法l用自然语言叙述用自然语言叙述1.先假定序列中第一个数为先假定序列中第一个数为“最大值最大值”2.将序列中下一个数与最大值比较,得出另一个将序列中下一个数与最大值比较,得出另一个“最最大值大值”3.重复步骤重复步骤24.这样的比较做到最后,最后得出的最大值即为有限这样的比较做到最后,最后得出的最大值即为有限整数序列中最大值整数序列中最大值锦眯队测斥靴笆史迸慧负胚史焙篮雀主盆爹好犬器辆昌押恩亨晶卷养撵豁第章程序设计第章程序设计7/22/2024

30、27第第6章章 MTALAB语言程序设计语言程序设计设计实例设计实例l用数学语言,写出对任意用数学语言,写出对任意3个数个数a,b和和c求出最大求出最大值的算法值的算法1.Max=a2.如果如果ba,则则max=b3.如果如果cmax则则max=c4.Max就是就是3个数中的最大值个数中的最大值迟博遇椽戴唉腾嘎顶怜瘁谆莆烤戳翼溢佯过橱鼎新示炬俏嗡粳唐汝徘碾瓣第章程序设计第章程序设计7/22/202428第第6章章 MTALAB语言程序设计语言程序设计设计实例设计实例l用用matlab程序实现程序实现a=input(a=)b=input(b=)c=input(c=)max=a;if bmax m

31、ax=b end if cmax max=cendmax泊氟夏床盅抓榆煞崔疼乔伶鄙柑玲滥玻惶雌执咀灭递凝导获材份嗡月掇秃第章程序设计第章程序设计7/22/202429第第6章章 MTALAB语言程序设计语言程序设计选择结构实例选择结构实例l求解一元二次方程求解一元二次方程l用数学语言来描述其算法用数学语言来描述其算法l计算:计算:l判断判断 则原方程无实数解则原方程无实数解l否则否则l输出解输出解x1,x2略躲姚胃抢纂块栖沼玄冬径桨箍升你涧匙薄茧统健嗓芬纹往煞樟幅锯猩荣第章程序设计第章程序设计7/22/202430第第6章章 MTALAB语言程序设计语言程序设计用用Matlab程序实现程序实现

32、a=input(a=)b=input(b=)c=input(c=)dt=b2-4*a*c;if dt0 disp(error)else x1=(-b+sqrt(dt)/2*a; x2=(-b-sqrt(dt)/2*a;end押镁它区梗国下燃皱哦怪勃垫扩哨捉晴仿鹏鸯徐疼坐祈建桐幽竟钙氟蒲价第章程序设计第章程序设计7/22/202431第第6章章 MTALAB语言程序设计语言程序设计函数变量函数变量l变量类型变量类型lMATLAB将将每每个个变变量量保保存存在在一一块块内内存存空空间间中中,这这个个空空间间称称为为工工作作区区(workspace)主主工工作作区区包包括括所所有有通通过过命命令令窗

33、窗口口创创建建的的变变量量和和脚脚本本文文件件运运行行生生成成的的变变量量,脚脚本本文文件件没没有有独独立立的的工工作作区区,而而每每个个函函数数都都有有独独立立的的工工作作区区,将将该该函函数数的的所所有的变量保存在该工作区中。有的变量保存在该工作区中。局部变量局部变量全局变量全局变量永久变量永久变量嚎衅庐恢笆季低酮块务鳖黔舞哈撕赛侄氖诡劫冈菊张催界葫蚁焉袜舍越隅第章程序设计第章程序设计7/22/202432第第6章章 MTALAB语言程序设计语言程序设计局部变量局部变量l每个函数都有自己的局部变量,这些变量存储在该函每个函数都有自己的局部变量,这些变量存储在该函数独立的工作区中,与其他函数

34、的变量及主工作区中数独立的工作区中,与其他函数的变量及主工作区中的变量分开存储。当函数调用结束时,这些变量随之的变量分开存储。当函数调用结束时,这些变量随之删除,不保存在内存中。并且,除了函数返回值,该删除,不保存在内存中。并且,除了函数返回值,该函数不改变工作区中其他变量的值。函数不改变工作区中其他变量的值。l然而脚本文件没有独立的工作区,当通过命令窗口调然而脚本文件没有独立的工作区,当通过命令窗口调用脚本文件时,脚本文件分享主工作区,当函数调用用脚本文件时,脚本文件分享主工作区,当函数调用脚本文件时,脚本文件分享主调函数的工作区。需要脚本文件时,脚本文件分享主调函数的工作区。需要注意的是,

35、如果脚本中改变了工作区中变量的值,则注意的是,如果脚本中改变了工作区中变量的值,则在脚本文件调用结束后,该变量的值发生改变。在脚本文件调用结束后,该变量的值发生改变。l在函数中,变量默认为局部变量。在函数中,变量默认为局部变量。牙诀旨抑涟上拢该手束斑刺咖讨忿琐售特辈衰逾尼蚜走禄崩生捅隔碰羌块第章程序设计第章程序设计7/22/202433第第6章章 MTALAB语言程序设计语言程序设计全局变量全局变量l局部变量只在一个工作区内有效,无论是函数工作区还是局部变量只在一个工作区内有效,无论是函数工作区还是 MATLAB 主工作区。与局部变量不同,全局变量可以在定义该主工作区。与局部变量不同,全局变量

36、可以在定义该变量的全部工作区中有效。当在一个工作区内改变该变量的值变量的全部工作区中有效。当在一个工作区内改变该变量的值时,该变量在其他工作区中的变量同时改变。时,该变量在其他工作区中的变量同时改变。l任何函数如果需要使用全局变量,则必须首先声明,声明格式任何函数如果需要使用全局变量,则必须首先声明,声明格式为:为:global 变量名变量名1 变量名变量名2l如果一个如果一个 M 文件中包含的子函数需要访问全局变量,则需在子文件中包含的子函数需要访问全局变量,则需在子函数中声明该变量,如果需要在命令行中访问该变量,则需在函数中声明该变量,如果需要在命令行中访问该变量,则需在命令行中声明该变量

37、。命令行中声明该变量。骆杨价教于本妒趣场歹让轰釉井赎仑兼斧漠筐种拢陨瓣幌兄肺东卢臻翰些第章程序设计第章程序设计7/22/202434第第6章章 MTALAB语言程序设计语言程序设计永久变量永久变量l除局部变量和全局变量外,除局部变量和全局变量外,MATLAB 中还有一中还有一种变量类型为永久变量。永久变量的特点为:种变量类型为永久变量。永久变量的特点为:只能在只能在 M 文件内部定义;文件内部定义;只有该变量从属的函数能够访问该变量;只有该变量从属的函数能够访问该变量;当函数运行结束时,该变量的值保留在内存中,因当函数运行结束时,该变量的值保留在内存中,因此当该函数再次被调用时,可以再次利用这

38、些变量。此当该函数再次被调用时,可以再次利用这些变量。l永久变量的定义方法为:永久变量的定义方法为:persistent 变量名变量名1 变量名变量名2。邓叭剐霹裙榨苑刑抛野遵李仟善港情蚊邮蕾崎烛狰弄贩嘉惯驾捶北熏噎汀第章程序设计第章程序设计7/22/202435第第6章章 MTALAB语言程序设计语言程序设计脚本文件和函数文件的区别脚本文件和函数文件的区别l1、变量类型不同、变量类型不同l2、参数的传递、参数的传递l3、执行(调用)方式不同、执行(调用)方式不同促醉桨典搜骸再瞧苑籍吭监艳诉觅便训陀蛇数墩对闯贪倚流劫又豢编绿供第章程序设计第章程序设计7/22/202436第第6章章 MTALA

39、B语言程序设计语言程序设计6.4 函数类型函数类型l6.4.1 匿名函数匿名函数l6.4.2 主函数主函数l6.4.3 子函数子函数l6.4.4 嵌套函数嵌套函数l6.4.5 私有函数私有函数l6.4.6 重载函数重载函数时辉久兵豹帆滞晃云充亏卢馆糠紊燥殆郝艳御两傻痢恢勇柑保孺童汇蛛敦第章程序设计第章程序设计7/22/202437第第6章章 MTALAB语言程序设计语言程序设计匿名函数匿名函数l匿名函数提供了一种创建简单程序的方法,使用它用匿名函数提供了一种创建简单程序的方法,使用它用户可以不必每次都编写户可以不必每次都编写 M 文件。用户可以在文件。用户可以在 MATLAB 的命令窗口或是其

40、他任意的命令窗口或是其他任意 M 文件和脚本文文件和脚本文件中使用匿名函数。件中使用匿名函数。l匿名函数的格式为:匿名函数的格式为:fhandle = (arglist) exprl其中其中 fhandle 是为该函数创建的函数句柄;是为该函数创建的函数句柄; 符号用符号用于创建函数句柄;于创建函数句柄;arglist 为用逗号分隔的参数列表;为用逗号分隔的参数列表;expr 为函数主体,为为函数主体,为 MATLAB 表达式。表达式。仿住给矢寞酣欢朔绢角甘溪揭舌颈洲单报盎钧它蒸卧孪楼井羚跨启酸积恿第章程序设计第章程序设计7/22/202438第第6章章 MTALAB语言程序设计语言程序设计匿

41、名函数示例匿名函数示例l无参数调用方法无参数调用方法命令窗口下输入命令窗口下输入t= ()datestr(now)t()命令窗口显示当前的日期和时间命令窗口显示当前的日期和时间l有参数调用方法有参数调用方法命令窗口下输入命令窗口下输入 h_sin=(x,y)(sin(x+y)h_sin(pi/3,pi/pi/6)多肺拧蔑冷欲刁媚称熔徽摘抓窑珊悔颧怨网又氏喉较载锌嘎扦囤通耐邓腑第章程序设计第章程序设计7/22/202439第第6章章 MTALAB语言程序设计语言程序设计主函数主函数 l通常每个通常每个 函数文件中的第一个函数为主函数,函数文件中的第一个函数为主函数,主函数可以被该文件之外的其他函

42、数调用,而主函数可以被该文件之外的其他函数调用,而子函数只能被该文件内的函数调用。主函数的子函数只能被该文件内的函数调用。主函数的调用通过存储该函数的调用通过存储该函数的 M 文件的文件名调用。文件的文件名调用。粉斩纲龚履谭明疥伯附酗改驶沫沁输迟谁榷或泻失杯狠碰莎献穆勒气唱渺第章程序设计第章程序设计7/22/202440第第6章章 MTALAB语言程序设计语言程序设计子函数子函数 l一个一个 M 文件中可以包括多个函数,除主函数之外的其文件中可以包括多个函数,除主函数之外的其他函数称为子函数。子函数只能被主函数或该文件内他函数称为子函数。子函数只能被主函数或该文件内的其他子函数调用。每个子函数

43、以函数定义语句开头,的其他子函数调用。每个子函数以函数定义语句开头,直至下一个函数的定义或文件的结尾。直至下一个函数的定义或文件的结尾。l当函数中调用函数时,系统判断其函数类型的顺序为:当函数中调用函数时,系统判断其函数类型的顺序为:首先判断是否为子函数,然后判断是否为私有函数,首先判断是否为子函数,然后判断是否为私有函数,最后判断其是否为当前目录下的最后判断其是否为当前目录下的 M 文件函数或者系统文件函数或者系统内置函数。由于子函数具有最高的优先级别,因此,内置函数。由于子函数具有最高的优先级别,因此,在定义子函数时,可以采用已有的其他外部函数的名在定义子函数时,可以采用已有的其他外部函数

44、的名称。称。 烃鄂傅讹依迷董接斌氢毖障沉苔事箱向兢致量挽际袋坊福源碾纬侧序墨断第章程序设计第章程序设计7/22/202441第第6章章 MTALAB语言程序设计语言程序设计嵌套函数嵌套函数 l一个函数内部可以定义其他的函数,这种内部一个函数内部可以定义其他的函数,这种内部的函数称作嵌套函数。的函数称作嵌套函数。l1嵌套函数的书写嵌套函数的书写l定义嵌套函数时,只要在一个函数内部直接定定义嵌套函数时,只要在一个函数内部直接定义嵌套函数即可。需要注意的是当一个义嵌套函数即可。需要注意的是当一个 M文件文件中存在嵌套函数时,该文件内的所有函数必须中存在嵌套函数时,该文件内的所有函数必须以以 end

45、结尾。结尾。盆谓谓凄梁址赶揩渡演伦浮嘲谆耪雄身岳隔啮露胃岩子讳台貉丙奇纲胶掉第章程序设计第章程序设计7/22/202442第第6章章 MTALAB语言程序设计语言程序设计l例例 嵌套函数的结构嵌套函数的结构function x = A(p1, p2). function y = B(p3) . end.end吕绕钎庸赠范宣氛非绊焰浆硒贤缩遣丑舷兆椎阉独柬底戚厉嚎便姿赊呵疲第章程序设计第章程序设计7/22/202443第第6章章 MTALAB语言程序设计语言程序设计l每个函数中可以嵌套多个函数。每个函数中可以嵌套多个函数。l例例 多个平行嵌套函数多个平行嵌套函数function x = A(p1

46、, p2). function y = B(p3) . end function z = C(p4) . end.End在这个程序中,函数在这个程序中,函数 A 嵌套了函数嵌套了函数 B 和函数和函数 C。尽爹夺哨陵酌洽喧洗豫棉早穴乃湛秩迎志蚀荔绊猛睫袋枢姚囊陪撑穿繁诗第章程序设计第章程序设计7/22/202444第第6章章 MTALAB语言程序设计语言程序设计l另外,嵌套函数还可以包含嵌套函数,另外,嵌套函数还可以包含嵌套函数, 结构如下。结构如下。function x = A(p1, p2). function y = B(p3) . function z = C(p4) . end .

47、end.endl在这段程序中,函数在这段程序中,函数 A 嵌套了函数嵌套了函数 B,函数,函数 B 嵌套了函数嵌套了函数 C。兄奶毕恢希编妒辣忠瞎脉月呛富纯孙的疏哆瞻拷和抿泡主缔科述十谊弧峦第章程序设计第章程序设计7/22/202445第第6章章 MTALAB语言程序设计语言程序设计l2嵌套函数的调用嵌套函数的调用l一个嵌套函数可以被下列函数调用:一个嵌套函数可以被下列函数调用:(1)该嵌套函数的上一层函数,如上面例)该嵌套函数的上一层函数,如上面例 中函数中函数 A 可以调用函数可以调用函数 B,函数,函数 B 可以调用函数可以调用函数 C,但是,但是函数函数 A 不能调用函数不能调用函数

48、C;(2)同一函数下的同级嵌套函数)同一函数下的同级嵌套函数(3)被任一低级别的函数调用。)被任一低级别的函数调用。酱碾限奔熔爷墒忆妥疾伐羚替础袭优鸯祷界铱语茶判坏函扁撕换伍播牛奶第章程序设计第章程序设计7/22/202446第第6章章 MTALAB语言程序设计语言程序设计私有函数私有函数 l私有函数是私有函数是 MATLAB 中的另一类函数,这类函数位中的另一类函数,这类函数位于名为于名为“private”的子文件夹中,只能被上一级文件的子文件夹中,只能被上一级文件夹中的函数或者这些函数所调用的夹中的函数或者这些函数所调用的 M 文件调用。如,文件调用。如,当前文件夹为当前文件夹为 matl

49、abmath,matlabmath 中包含子中包含子文件夹文件夹 private,则,则 private 中的函数只能被中的函数只能被 matlabmath 根目录下的函数及这些函数调用的根目录下的函数及这些函数调用的 M 文文件调用。件调用。l私有函数只能被其父文件夹中的函数调用,因此,用私有函数只能被其父文件夹中的函数调用,因此,用户可以开发自己的函数库,函数的名称可以与系统标户可以开发自己的函数库,函数的名称可以与系统标准准 M 函数库名称相同,而不必担心在函数调用时发生函数库名称相同,而不必担心在函数调用时发生冲突,因为冲突,因为 MATLAB 首先查找私有函数,再查找标首先查找私有函

50、数,再查找标准函数。准函数。臀硷回峻妄宦邹傅迈洼巢酥尿抛遂向截饱肥葬夕帚昨户硼禽或驹乡忌察槛第章程序设计第章程序设计7/22/202447第第6章章 MTALAB语言程序设计语言程序设计重载函数重载函数 l函数重载为程序编写和用户调用都提供了很大函数重载为程序编写和用户调用都提供了很大的方便。函数重载允许多个函数使用相同的函的方便。函数重载允许多个函数使用相同的函数名,不同的输入参数类型。在函数调用时,数名,不同的输入参数类型。在函数调用时,系统根据输入参数的情况自动选择相应的函数系统根据输入参数的情况自动选择相应的函数执行。执行。溉逼时保抓谣羹勤撬憋腑翘刮菏滴赛庭迷郁烂姓史准诫躲亿瓮台阎侗载

51、游第章程序设计第章程序设计7/22/202448第第6章章 MTALAB语言程序设计语言程序设计函数参数函数参数 l当调用函数时,主调函数通过函数参数的形式当调用函数时,主调函数通过函数参数的形式向被调函数传递数据,被调函数通过函数返回向被调函数传递数据,被调函数通过函数返回值的形式向主调函数返回数据。本节介绍函数值的形式向主调函数返回数据。本节介绍函数参数,内容包括:输入参数数目确定、输入可参数,内容包括:输入参数数目确定、输入可变数目的参数、向嵌套函数输入可选参数和修变数目的参数、向嵌套函数输入可选参数和修改参数值并返回。改参数值并返回。留话盲外鞭稗铝瞒锻荷散负饺探谭碌时蝎隘画职偏力认锤笆

52、继胰刷穴既组第章程序设计第章程序设计7/22/202449第第6章章 MTALAB语言程序设计语言程序设计l1函数参数数目确定函数参数数目确定l函数函数 nargin 和函数和函数 nargout 分别用于确定函分别用于确定函数的输入输出参数个数。在函数体内部用数的输入输出参数个数。在函数体内部用 nargin(nargout)确定输入输出参数后可以)确定输入输出参数后可以用条件语句确定需要执行的操作。用条件语句确定需要执行的操作。胳缀怕轧樊峦俩鸦械诽涪猿寂窿降性风暂怖昼劲罕澳重酚邯秆遣雨织怎竖第章程序设计第章程序设计7/22/202450第第6章章 MTALAB语言程序设计语言程序设计l参见

53、函数参见函数myplotl这个函数中可以接受这个函数中可以接受25个输入参数,通过个输入参数,通过nargin确定输入参数的个数,如果输入参数为确定输入参数的个数,如果输入参数为0则绘制图形,否则输出则绘制图形,否则输出x0,y0的值。的值。仅烩繁竿菏闯五幅鲤须肘歼跺图倦阉揪勋澈愧检殃榔涟洽通瞅拜擒盘柳惩第章程序设计第章程序设计7/22/202451第第6章章 MTALAB语言程序设计语言程序设计lfunction x0, y0 = myplot(x, y, npts, angle, subdiv)l% MYPLOT Plot a function.l% MYPLOT(x, y, npts,

54、angle, subdiv)l% The first two input arguments arel% required; the other three have default values.l .lif nargin 5, subdiv = 20; endlif nargin 4, angle = 10; endlif nargin Profiler;(3)对于已经在编辑器中打开的)对于已经在编辑器中打开的 M 文件,选择文件,选择 Tools-Open Profiler;(4)选中命令历史窗口中的一个或多个命令,点)选中命令历史窗口中的一个或多个命令,点击右键,选择击右键,选择 Pr

55、ofile Code;(5)在命令窗口中输入:)在命令窗口中输入:profile viewer。等洒命搁加澜悔哨京拂煤珐馁兢丽挨焉受圣贺侧黔臭萧驰孵谋豺秆栗炔酒第章程序设计第章程序设计7/22/202489第第6章章 MTALAB语言程序设计语言程序设计2运行运行 ProfilerlProfiler 的界面如图所示。在的界面如图所示。在 Run this code 中输入需要分析的命令或表达式,点击中输入需要分析的命令或表达式,点击 Start Profiling,开始分析。需要注意的是,分析的,开始分析。需要注意的是,分析的表达式必须出于表达式必须出于 MATLAB 的当前工作路径中,的当前

56、工作路径中,否则可能会得到错误的结果。否则可能会得到错误的结果。拍民症站匈翼师鬃型株瞳霓倦蜡擅罪汲茹励炸蓑橱几钒撵钞关嗜翌帽顷耸第章程序设计第章程序设计7/22/202490第第6章章 MTALAB语言程序设计语言程序设计3查看分析结果查看分析结果l分析完成后,分析完成后,Profiler 会生成分析报告,包括会生成分析报告,包括总体报告和针对每个函数的详细报告。总体报总体报告和针对每个函数的详细报告。总体报告中包括函数名、被调用次数、总运行时间、告中包括函数名、被调用次数、总运行时间、函数单独运行时间(即不包括其子函数的运行函数单独运行时间(即不包括其子函数的运行时间)及函数运行时间的图形显

57、示,如图所示。时间)及函数运行时间的图形显示,如图所示。用户可以点击每列的标题改变结果的排序方式,用户可以点击每列的标题改变结果的排序方式,也可以点击函数标题查看该函数的详细报告。也可以点击函数标题查看该函数的详细报告。赛耐良蛤朋瞅柏浆歉深猴慑某沿凌悯份涣弯潭榷锹渺亢媚橇雕蛾介指邻陵第章程序设计第章程序设计7/22/202491第第6章章 MTALAB语言程序设计语言程序设计l函数详细报告中包括该函数中每行代码的被调函数详细报告中包括该函数中每行代码的被调用次数和运行时间,并且可以显示其中的子函用次数和运行时间,并且可以显示其中的子函数、函数列表等,如图所示。数、函数列表等,如图所示。 砍四箕

58、掘湃袱辜逛兄处翻尉眯包翁淆享旨储窒般袖森扭哦买哪群撩噪啄揣第章程序设计第章程序设计7/22/202492第第6章章 MTALAB语言程序设计语言程序设计lProfiler 的运行主要是基于的运行主要是基于 profile 函数的运行结函数的运行结果。这里对果。这里对 profile 函数的使用做简单的介绍。函数的使用做简单的介绍。profile 函数的主要使用格式如表所示。函数的主要使用格式如表所示。命令说明profile on开始进行程序运行分析,清除已有的分析结果profile on -detail level指定分析的深度,level 可以是 mmex 或者 builtin,分别表示忽略

59、或包括嵌套函数profile on -history指定记录函数调用的确切顺序profile off延缓分析profile resume继续进行分析,不清除已有的结果profile viewer打开 Profilers = profile(status)显示当前 profile 状态的结构体stats = profile(info)延缓分析并显示当前 profile 状态的结构体4通过通过 profile 函数进行程序运行分析函数进行程序运行分析煞股靳汝融蔡激肆铸劣蚌萌羔益床馁孺称蝇素冗乎籍掌苏瑶种插晤皋瞅嗜第章程序设计第章程序设计7/22/202493第第6章章 MTALAB语言程序设计语言

60、程序设计通过通过 tic、toc 函数进行程序运行分析函数进行程序运行分析 l如果只需要了解程序的运行时间,或者比较一段程序在不同应如果只需要了解程序的运行时间,或者比较一段程序在不同应用条件下的运行速度,可以通过计时器来进行。计时器包含两用条件下的运行速度,可以通过计时器来进行。计时器包含两个函数:个函数:tic 和和 toc。tic 用于开始计时器,用于开始计时器,toc 用于关闭计时器,用于关闭计时器,并计算程序运行的总时间。如并计算程序运行的总时间。如tic - 所需计时的程序代码所需计时的程序代码 -toc对于小程序,如果其运行时间非常短,可以通过将其多次运行,计算总体对于小程序,如

61、果其运行时间非常短,可以通过将其多次运行,计算总体时间的方法进行,如:时间的方法进行,如:tic for k = 1:100 - 所需计时的程序代码所需计时的程序代码 - endtoc运行程序后,命令窗口会显示运行程序后,命令窗口会显示elapsed time is?seconds.乘易只嘛伙粤勺肠吞闭狙嗓柿搔鹰溺嘴象幻燎除汰输潮桶攒蝎沧蓄在善辗第章程序设计第章程序设计7/22/202494第第6章章 MTALAB语言程序设计语言程序设计程序优化的常用方法程序优化的常用方法l同样的功能可以采用不同的方法实现,不同的方法运同样的功能可以采用不同的方法实现,不同的方法运行速度不同,因此在程序中,方

62、法的选择可以在很大行速度不同,因此在程序中,方法的选择可以在很大程序上提高程序运行的效率。程序上提高程序运行的效率。桨诫系夏败旅闲窥和藉刁阵系蔡骂镶蓖邢炯啃坑炔赦暇聋桨泊此固爸毒猿第章程序设计第章程序设计7/22/202495第第6章章 MTALAB语言程序设计语言程序设计程序优化的常用方法程序优化的常用方法 1.使循环向量化使循环向量化2.为数组预分配内存为数组预分配内存3.对向量赋值时尽量避免改变变量的类型或数组大小;对向量赋值时尽量避免改变变量的类型或数组大小;4.对实数进行操作,尽量避免复数的操作;对实数进行操作,尽量避免复数的操作;5.合理使用逻辑运算符;合理使用逻辑运算符;6.避免重载避免重载 MATLAB 的内置函数和操作符;的内置函数和操作符;7.通常情况下,函数的运行效率高于脚本文件;通常情况下,函数的运行效率高于脚本文件;8.Load 和和 Save 函数效率高于文件输入输出函数;函数效率高于文件输入输出函数;9.避免在运行避免在运行 MATLAB 时运行其他大型后台程序。时运行其他大型后台程序。比雇夹嘎锄敌仟职牲御择坦顾仔撑鲜芬辖氨寸宫犬绢侠其坡励颈帖柜尼恒第章程序设计第章程序设计7/22/202496

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号