第章程序设计.ppt
《第章程序设计.ppt》由会员分享,可在线阅读,更多相关《第章程序设计.ppt(96页珍藏版)》请在三一文库上搜索。
1、2019年4月11日,第1页,第6章 MATLAB 语言程序设计,主要内容 M文本文件介绍 函数流程控制 函数变量 函数类型 函数操作 MATLAB 编程错误处理 程序设计的辅助函数 调试程序 优化程序,2019年4月11日,第2页,第6章 MATLAB 语言程序设计,MATLAB做为一种广泛用于科学计算的工具软件,不仅具有强大的数值计算、科学计算和绘图功能外,还具有强大的程序设计功能。 MATLAB提供了两种源程序文件格式:命令文件和函数文件,2019年4月11日,第3页,命令文件,命令文件类似于DOS下的批处理文件,它的执行方式很简单,用户只需在提示符下键入该命令文件的文件名,MATLAB
2、就会自动执行该命令文件的各条语句。命令文件能对MATLAB工作空间的数据进行处理,文件中所有语句的执行结果也完全返回到工作空间中,命令文件格式适用于用户做需要立即得到结果的小规模运算,2019年4月11日,第4页,函数文件,一个 M 文件通常包含五个部分,函数定义语句、H1 帮助行、帮助文本、函数体或者脚本文件语句和注释语句。H1 行为紧随函数定义语句后面的一行注释语句。当用户通过 help 命令查询该函数的说明信息时 H1 行显示为第一行,另外 lookfor 函数只检索和显示 H1 行。帮助文本为 H1 行后面连续的注释行,当在命令窗口中通过 help 命令查询该函数的说明信息时则在窗口中
3、显示这些内容。函数体为 M 文件的主要部分,是函数的执行代码。除上面的 H1 行和帮助文本外,为了易于理解,可以在书写代码时添加注释语句。这些注释语句在编译程序时会被忽略,因此不会影响编译速度和程序运行速度,但是能够增加程序的可读性。,2019年4月11日,第5页,M文本编辑器,是一个集编辑与调试两种功能于一体的工具环境。 有三种启动编辑器的操作方法 命令窗口edit 工具条 File菜单下 打开已有的M文件四种方法 命令窗口edit 文件名(不带扩展名) 工具条 File菜单下 当前路径,2019年4月11日,第6页,编写命令文件的步骤,新建文件、保存文件和运行(几种方法) 例5.1,命名为
4、exam5_1.m 程序行为 Y=5 1 2;8 3 7;9 6 8;5 5 5;4 2 3 Bar(Y,stack); Grid on; Set(gca,layer,top);,2019年4月11日,第7页,M函数文件介绍,函数式M文件 函数式 M 文件比脚本式 M 文件相对复杂一些,脚本文件不需要自带参数,也不一定返回结果,而函数文件一般要自带参数,并且有返回结果,以便于更好的把整个程序连为一段。函数文件也可以不带参数,此时文件中一般使用一些全局变量来实现与外界和其他函数之间的数据交换。 函数文件的第一行以 function 开始,说明此文件是一个函数。其实质为用户向 MATLAB 函数库
5、中添加的子函数。在默认情况下,函数文件中的变量都是局部变量,仅在函数运行期间有效,函数运行结束后,这些变量将从工作区中清除。 文件名的约定,2019年4月11日,第8页,M函数文件编程实例,一维向量求平均数 function y = average(x) % AVERAGE Mean of vector elements. % AVERAGE(X), where X is a vector, is the mean of vector elements. % Nonvector input results in an error. m,n = size(x); if (m = 1) | (n
6、= 1) | (m = 1 % Actual computation,2019年4月11日,第9页,函数流程控制,顺序结构 判断语句(ifelseend) 分支语句 循环语句 trycatchend语句 其他流程控制函数,2019年4月11日,第10页,顺序结构,顺序结构是最简单的程序结构,系统在编译程序时,按照程序的物理位置顺序执行。这种程序容易编制,但是结构单一,能够实现的功能有限。 例:不采用第3个变量,实现两个数值的交换,2019年4月11日,第11页,顺序结构举例,function a,b = exchange(a,b) % exchange the value of two num
7、bers without the third variable disp(step1:a = a + b); a = a + b disp(step2:b = a - b); b = a - b disp(step3:a = a - b); a = a - b disp(final result:);,2019年4月11日,第12页,判断语句(ifelseend),ifend ifelseend ifelseifelseend,2019年4月11日,第13页,判断语句,ifend 此时的程序结构如下: if 表达式 执行代码块 end 这是最简单的判断语句,只有一个判断语句,其中的表达式为逻辑
8、表达式,当表达式为真时,执行相应的语句,否则,直接跳到下一段语句。,2019年4月11日,第14页,判断语句,ifelseend 当程序有两个选择时,可以选择 ifelseend 结构,此时程序结构为: if 表达式 执行代码块1 else 执行代码块2 end 当判断表达式为真时,执行代码块1,否则执行代码块2。,2019年4月11日,第15页,判断语句,ifelseifelseend 上面的两种形式中,分别包含一个选择和两个选择,当判断包含多个选择时,可以采用elseif 语句,结构为: if 表达式1 执行代码块1 elseif 表达式2 执行代码块2 elseif else 执行代码块
9、 end 其中可以包含任意多个 elseif 语句。,2019年4月11日,第16页,条件语句实例,判断两个输入的参数是否都大于零,是则返回a and b both larger tan0 不全大于零则返回a and b not both larger tan0,2019年4月11日,第17页,分支语句,上一节中的 ifelseifelseend 语句可以适用于多种选择的流程控制,此时对 else之外的每一个选择语句设置一个表达式,表达式为真时则执行该模块。MATLAB 中的另一种多选择语句为分支语句。分支语句的结构为: switch 分支语句 case 条件语句 执行代码块 case 条件语
10、句1, 条件语句2, 条件语句3, . 执行代码块 otherwise 执行代码块 end,2019年4月11日,第18页,分支语句,其中的分支语句为一个变量,可以是数值变量或者字符串变量,如果该变量的值与某一条件相符,则执行相应的语句,否则,执行 otherwise 后面的语句。在每一个条件中,可以包含一个条件语句,可以包含多个条件,当包含多个条件时,将条件以单元数组的形式表示。 MATLAB 的分支语句类似于 C 语言的分支语句,但是又不完全相同:MATLAB 语句从上到下依次判断条件,条件符合则执行相应的代码块,之后退出该分支语句,因此在代码块后面不需要添加“break”语句。,2019
11、年4月11日,第19页,循环语句,在科学计算及生活实际中,会遇到许多有规律的重复运算。 如果一个计算过程,要重复一系列的计算步骤若干次,每次计算步骤完全相同,则这种算法过程称为循环过程。 MATLAB中有两种循环,一种是指定循环次数,另一种是每次需判定循环条件。 for 语句 while 语句,2019年4月11日,第20页,1for 语句,for 语句将相同的代码执行预定义的次数。for 语句的结构为: for 循环变量 = 表达式 执行代码块 end 生活中应用for 循环的例子很多。 求自然数前n项和 用二分法解方程比较应用命令文件函数文件的区别(命令文件exam5_6,函数文件fang
12、ch),2019年4月11日,第21页,2while 语句,while 语句用于将相同的代码块执行多次,但是次数并不预先指定,当 while 的条件表达式为真时,执行代码块,直到条件表达式为假。while 语句的结构为: while 表达式 执行代码块 end,2019年4月11日,第22页,While编程实例,求前n项和,使和小于等于100的n值,2019年4月11日,第23页,trycatchend语句,MATLAB 中的另一种判断语句为 trycatch 语句,这种语句可以包容程序运行中的错误,并返回错误类型。这种语句的结构为: try 运行代码块 catch 运行代码块 end 该语句
13、首先从上到下依次执行,如果遇到程序错误则运行下一个 catch 中的语句,依次向下进行。如果程序运行成功,则退出该判断语句。如果在 catch 和 end之间的程序运行出错,则程序运行终止,或者如果存在其他的 trycatch 结构,则运行下一个 trycatch 结构。可以利用 lasterr 命令查看发生错误的原因。,2019年4月11日,第24页,trycatchend语句,exam5_7 %try catch clear N=4; A=magic(3); try A_N=A(N,:); catch A_end=A(end,:) %如果程序出错则执行此行 end lasterr% 显示出
14、错原因,2019年4月11日,第25页,其他流程控制函数,continue:continue 语句通常用在循环控制中,包括 for 循环和 while 循环,用于结束当次循环,继续执行下一次循环,但是不结束当前循环。一般 continue 语句与 if 语句相结合,当满足一定的条件时,执行 continue 语句。 break:与 continue 相同的是,break 函数也是用于循环控制,中断当前循环。与 continue 不同,break 跳出当前循环,不再执行该循环的任何操作。 return:结束该程序的执行,返回到调用函数或者键盘。,2019年4月11日,第26页,算法的概念,算法可
15、以理解为由基本运算及规定的运算顺序所构成的完整的解题步骤,或者看成按照要求设计好有限的确切的计算序列,并且这样的步骤或序列能够解决一类问题 描述算法可以有不同的方式,例如,可以用自然语言和数学语言加以描述,也可以借助形式语言(算法语言)给出精确的说明,也可以用框图直观地显示算法的全貌,2019年4月11日,第27页,设计实例,写出一个求有限整数序列中最大值的算法 用自然语言叙述 先假定序列中第一个数为“最大值” 将序列中下一个数与最大值比较,得出另一个“最大值” 重复步骤2 这样的比较做到最后,最后得出的最大值即为有限整数序列中最大值,2019年4月11日,第28页,设计实例,用数学语言,写出
16、对任意3个数a,b和c求出最大值的算法 Max=a 如果ba,则max=b 如果cmax则max=c Max就是3个数中的最大值,2019年4月11日,第29页,设计实例,用matlab程序实现 a=input(a=) b=input(b=) c=input(c=) max=a; if bmax max=b end if cmax max=c end max,2019年4月11日,第30页,选择结构实例,求解一元二次方程 用数学语言来描述其算法 计算: 判断 则原方程无实数解 否则 输出解x1,x2,2019年4月11日,第31页,用Matlab程序实现,a=input(a=) b=input
17、(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,2019年4月11日,第32页,函数变量,变量类型 MATLAB将每个变量保存在一块内存空间中,这个空间称为工作区(workspace)主工作区包括所有通过命令窗口创建的变量和脚本文件运行生成的变量,脚本文件没有独立的工作区,而每个函数都有独立的工作区,将该函数的所有的变量保存在该工作区中。 局部变量 全局变量 永久变量,2019年4月11日,第33页,局部变量,每个函数都有自己的局部变量,这些变
18、量存储在该函数独立的工作区中,与其他函数的变量及主工作区中的变量分开存储。当函数调用结束时,这些变量随之删除,不保存在内存中。并且,除了函数返回值,该函数不改变工作区中其他变量的值。 然而脚本文件没有独立的工作区,当通过命令窗口调用脚本文件时,脚本文件分享主工作区,当函数调用脚本文件时,脚本文件分享主调函数的工作区。需要注意的是,如果脚本中改变了工作区中变量的值,则在脚本文件调用结束后,该变量的值发生改变。 在函数中,变量默认为局部变量。,2019年4月11日,第34页,全局变量,局部变量只在一个工作区内有效,无论是函数工作区还是 MATLAB 主工作区。与局部变量不同,全局变量可以在定义该变
19、量的全部工作区中有效。当在一个工作区内改变该变量的值时,该变量在其他工作区中的变量同时改变。 任何函数如果需要使用全局变量,则必须首先声明,声明格式为: global 变量名1 变量名2 如果一个 M 文件中包含的子函数需要访问全局变量,则需在子函数中声明该变量,如果需要在命令行中访问该变量,则需在命令行中声明该变量。,2019年4月11日,第35页,永久变量,除局部变量和全局变量外,MATLAB 中还有一种变量类型为永久变量。永久变量的特点为: 只能在 M 文件内部定义; 只有该变量从属的函数能够访问该变量; 当函数运行结束时,该变量的值保留在内存中,因此当该函数再次被调用时,可以再次利用这
20、些变量。 永久变量的定义方法为: persistent 变量名1 变量名2。,2019年4月11日,第36页,脚本文件和函数文件的区别,1、变量类型不同 2、参数的传递 3、执行(调用)方式不同,2019年4月11日,第37页,6.4 函数类型,6.4.1 匿名函数 6.4.2 主函数 6.4.3 子函数 6.4.4 嵌套函数 6.4.5 私有函数 6.4.6 重载函数,2019年4月11日,第38页,匿名函数,匿名函数提供了一种创建简单程序的方法,使用它用户可以不必每次都编写 M 文件。用户可以在 MATLAB 的命令窗口或是其他任意 M 文件和脚本文件中使用匿名函数。 匿名函数的格式为:
21、fhandle = (arglist) expr 其中 fhandle 是为该函数创建的函数句柄; 符号用于创建函数句柄;arglist 为用逗号分隔的参数列表;expr 为函数主体,为 MATLAB 表达式。,2019年4月11日,第39页,匿名函数示例,无参数调用方法 命令窗口下输入 t= ()datestr(now) t() 命令窗口显示当前的日期和时间 有参数调用方法 命令窗口下输入 h_sin=(x,y)(sin(x+y) h_sin(pi/3,pi/pi/6),2019年4月11日,第40页,主函数,通常每个 函数文件中的第一个函数为主函数,主函数可以被该文件之外的其他函数调用,而
22、子函数只能被该文件内的函数调用。主函数的调用通过存储该函数的 M 文件的文件名调用。,2019年4月11日,第41页,子函数,一个 M 文件中可以包括多个函数,除主函数之外的其他函数称为子函数。子函数只能被主函数或该文件内的其他子函数调用。每个子函数以函数定义语句开头,直至下一个函数的定义或文件的结尾。 当函数中调用函数时,系统判断其函数类型的顺序为:首先判断是否为子函数,然后判断是否为私有函数,最后判断其是否为当前目录下的 M 文件函数或者系统内置函数。由于子函数具有最高的优先级别,因此,在定义子函数时,可以采用已有的其他外部函数的名称。,2019年4月11日,第42页,嵌套函数,一个函数内
23、部可以定义其他的函数,这种内部的函数称作嵌套函数。 1嵌套函数的书写 定义嵌套函数时,只要在一个函数内部直接定义嵌套函数即可。需要注意的是当一个 M文件中存在嵌套函数时,该文件内的所有函数必须以 end 结尾。,2019年4月11日,第43页,例 嵌套函数的结构 function x = A(p1, p2) . function y = B(p3) . end . end,2019年4月11日,第44页,每个函数中可以嵌套多个函数。 例 多个平行嵌套函数 function x = A(p1, p2) . function y = B(p3) . end function z = C(p4) .
24、 end . End 在这个程序中,函数 A 嵌套了函数 B 和函数 C。,2019年4月11日,第45页,另外,嵌套函数还可以包含嵌套函数,结构如下。 function x = A(p1, p2) . function y = B(p3) . function z = C(p4) . end . end . end 在这段程序中,函数 A 嵌套了函数 B,函数 B 嵌套了函数 C。,2019年4月11日,第46页,2嵌套函数的调用 一个嵌套函数可以被下列函数调用: (1)该嵌套函数的上一层函数,如上面例 中函数 A 可以调用函数 B,函数 B 可以调用函数 C,但是函数 A 不能调用函数 C
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 章程 设计
链接地址:https://www.31doc.com/p-2573851.html