第10章MATLAB程序设计87.ppt

上传人:本田雅阁 文档编号:2565516 上传时间:2019-04-09 格式:PPT 页数:78 大小:509.01KB
返回 下载 相关 举报
第10章MATLAB程序设计87.ppt_第1页
第1页 / 共78页
第10章MATLAB程序设计87.ppt_第2页
第2页 / 共78页
第10章MATLAB程序设计87.ppt_第3页
第3页 / 共78页
第10章MATLAB程序设计87.ppt_第4页
第4页 / 共78页
第10章MATLAB程序设计87.ppt_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《第10章MATLAB程序设计87.ppt》由会员分享,可在线阅读,更多相关《第10章MATLAB程序设计87.ppt(78页珍藏版)》请在三一文库上搜索。

1、第10章 MATLAB7.0程序设计,MATLAB7.0拥有强大的数值计算和图形可视化功能。在之前的章节,用户主要是利用命令窗口和交互式对话框(如图形窗口)把想法和意图传递给机器,让系统执行操作。这种操作虽然比较便捷,但是只能解决代码行数少的简单问题,对于大型问题就显得捉襟见肘。针对此问题,MATLAB作为一种高级应用软件,还提供了特有的交互式的程序语言,即MATLAB语言。用户可以应用MATLAB语言编写扩展名为.m的文件,方便灵活地整合大量程序代码,从而解决大规模的工程问题。,主要内容包括:M文件的特点和类型、变量、函数以及MATLAB程序结构和设计等基本内容。,第10章 MATLAB7.

2、0程序设计,10.1 M文件,M文件就是一系列相关代码组成的一个扩展名为.m的文件,用户可以在MATLAB自带的M文件编辑窗口或者普通文本编辑器中编写代码,然后以“文件名+.m的后缀名”保存在MATLAB的工作空间,以后在MATLAB命令窗口直接调用文件名,就可以执行文件中一系列代码所综合表示的操作。,10.1.1 M文件的结构,M文件是一个文本文件,用户可以通过单击MATLAB主界面【FileNewM-File】菜单选项或单击工具栏【New M-File】图标,新建一个M文件。,10.1.2 M文件分类,M文件可分为脚本文件(MATLAB scripts)和函数文件(MATLAB funct

3、ions)。脚本文件是包含多条MATLAB命令的文件;函数文件可以包含输入变量,并把结果传送给输出变量。两者的简单介绍及区别如表所示。,10.1.3 脚本式M文件,脚本文件可以理解为较为简单的M文件,因为其没有输入和输出变量。下面用一个简单的例子说明如何编写和运行脚本文件 edit 在M文件中输入如下代码并保存为s.m文件 r=3.33; s=(r2)*pi 在工作窗口中点右键并点run(或按F5) 在Matlab命令窗口中观看运行结果,说明:脚本文件一般适应于大型程序的重复操作,对个别变量的修改只需在脚本文件中进行即可而不需要对多数相同的代码进行重复操作。 用户可以将需要重复输入的所有命令按

4、顺序放到一个扩展名为.m的文本文件下,每次运行时只要输入该M文件的文件名即可。 用户自己创建的脚本文件的文件名要避免与MATLAB 7的内置函数和工具箱中的函数重名,以免发生内置函数被替换的情况。(因为脚本文件中的变量多数是全局变量它与Matlab程序共用一个工作空间),8,脚本式M文件应用举例,脚本式M文件绘制一个正弦曲线, Edit x=-2*pi:0.05:2*pi; y=sin(x); plot(x,y,c+) legend(正弦曲线图) 保存文件名为jh.m: 在Matlab命令窗口中输入jh,10.1.4 函数式M文件,相对于脚本文件来说,函数文件稍显复杂。从外观上看来,函数文件只

5、是在对应脚本文件的基础上,在文件中代码开始处多添加了一行函数定义行, 函数文件都是以函数声明行“function”作为开始,其实质是:用户往MATLAB7.0函数库里边添加的子函数,即函数M文件中的变量都是局部变量,而非全局变量(除非使用特别形式声明),但是在函数运行期间失效,函数运行完毕之后,其定义的变量将从工作区间中清除,对于这一点,要注意和脚本文件的区别。,而脚本文件只是将一系列相关代码结合封装,没有输入参数和输出参数,即不自带参数,也不一定要返回结果。,10.1.4 M文件的组成部分及其功能,12,函数式M文件的组成部分,函数式M文件的组成部分。 调出edit窗口,在里边输入如下内容:

6、 function f = fact(n) %函数的定义行 % Compute a factorial value. %H1行 % FACT(N) returns the factorial of N, %帮助文本 % usually denoted by N! % Put simply, FACT(N) is PROD(1:N). %注释 f = prod(1:n); % 函数体,函数式M文件说明,1、函数文件中的变量除特别声明外都是局部变量。 2、函数文件的函数名与文件名必须相同。 3、函数文件被调用时Matlab会专门分配一个临时工作空间,用于存储函数执行过程中的中间变量,当函数文件完成

7、被调用的操作时,这个空间将被Matlab收回,空间中的变量也将被擦除,函数空间是独立的和临时的,这与脚本文件存在着本质的区别。,10.2 变量,变量(variables)是MATLAB中的重要概念,与程序设计有密切关系。因此,需要介绍: 变量的命名规则、 MATLAB中特殊变量和关键字、 变量的分类, 不同类型变量的区别及使用范围、变量的检测传递以及变长度函数等。,10.2.1 命名变量,MATLAB中的变量不需要在使用前事先定义,但是必须遵循以下命名规则: 变量名区分大小写:HELLO和hello是不同的变量名。 变量名最多能包含63个字符,如超出限制,从第64个字符开始(包含),其后的字符

8、都将被忽略;,变量名必须以字母开始,其后可以是任意数量的字母或下画线; 不允许出现标点符号,因为很多标点符号在MATLAB中有特殊的意义,如total name与total_name会产生完全不同的结果;系统也会认为total,name由于逗号的分隔,不是一个变量。,10.2.2 MATLAB特殊变量,MATLAB预定义了若干特殊变量(Special Variables),这些变量具有系统默认的含义,如表所示。,10.2.3 MATLAB中关键字,关键字是MATLAB程序设计中常用的流程语句控制变量。MATLAB有17个系统关键字,在命令窗口输入指令iskeyword,就可以查询17个显示为蓝

9、色的关键字:break,case,catch,continue,else,elseif,end,for,function,global,if,otherwise,persistent,return,switch,try,while。 如果把这些关键字作变量名,MATLAB将会发出一条错误信息。, for=1000 ? for=1000 | Error: The expression to the left of the equals sign is not a valid target for an assignment. 如果一定要使用与这些关键字类似的词作为变量名,可以将这些关键字中的某个

10、或者某些字母改成大写 WHILE=1 %WHILE和while含义不同,前者是用户定义变量,后者是关键字 WHILE = 1,10.2.4 不同类型的变量,MATLAB中的变量可分为以下3类。 局部变量(Local Variables):只在特定空间内定义且有意义的变量。 全局变量(Global Variables):在多个空间可以调用和传递的变量。通过global指令来定义。 永久变量(Persistent Variables):只在函数文件中声明和调用,并在不同函数之间传递的变量。通过persistent指令来定义。,10.2.4 局部变量和全局变量说明,每个函数都有自己的局部变量,他们与

11、基本工作空间中的变量是相互独立的,而且不同函数的局部变量是独立的,只能在函数内部使用 如果两个或多个函数想共用同一个变量,那么就可以用global将它声明成全局变量 global variables 全局变量的使用可以减少参数的传递,如果合理利用全局变量,将可以提高程序的执行效率,如果要查看工作空间的全局变量,则输入whos global,可显示出全局变量 global x y x=36; y=78; z=5; p=21; whos global,MATLAB中,每一个函数有其独立的局部变量,这些临时定义的变量不被加载到MATLAB的工作空间中,与其他函数或是MATLAB基本工作空间中的变量互

12、不影响。除非特别定义了全局变量或者永久变量,否则当函数调用结束时,所有局部变量将随之被擦除。 脚本文件没有独立的工作空间,与其调用系统共用一个工作空间。当在MATLAB的命令窗口调用脚本文件时,共用MATLAB基本工作空间;而当在函数中调用时,则使用函数空间存储变量。所以当脚本文件使用空间中已存在的变量时,将改变变量的值。,10.2.4 局部变量和全局变量说明,应用举例:,(1)新建脚本文件,取名为GV1,在其中定义全局变量GV,调用disp函数输出全局变量和局部变量v1的值。 global GV disp(GV); disp(v1) (2)新建函数文件,取名为GV,在其中定义全局变量GV,调

13、用disp函数输出全局变量的值。 function GV global GV disp(GV); disp(v1),应用举例:,(3)在Matlab命令窗口输入: global GV GV=1;v1=2; (4)运行脚本GV1。脚本文件中的全局变量GV已被赋值为1,且由于脚本与Matlab共享工作空间,局部变量也被赋值为2. (5)运行函数GV。函数文件中的全局变量GV也被赋值为1.但v1没有被赋值,函数文件中的v1是局部变量与Matlab工作空间中定义的v1并不是同一个变量。,应用举例:,(6)在脚本文件中为GV和v1重新赋值,并运行脚本。 global GV GV=11;v1=3; dis

14、p(GV); disp(v1) (7)调用函数文件GV值改变,但是变量v1同样没有改变。,10.3 函数,函数是MATLAB中的一个重要概念,例如绘图函数plot、mesh、peak,三角函数sin、cos等在之前的章节曾多次调用。调用函数执行某种操作是MATLAB的常用功能。函数的作用是使问题解决模块化,接受输入、输出参数,并返回结果。MATLAB7.0中创建和调用函数的方法有两种,一是命令窗口输入代码,另一个是编写M-函数文件。根据创建方法、调用方式以及功能的不同,函数可以进行分类,本节将介绍不同函数类型的函数包括:匿名函数、主函数、子函数和嵌套函数。,10.3.1 匿名函数,匿名函数是M

15、ATLAB函数的简易形式,这种函数没有函数名,且不是M文件,只包含一个MATLAB的表达式和输入、输出参数。用户可以直接在命令窗口输入代码,创建匿名函数。匿名函数的创建格式如下。 f=(arg1,arg2,.) expression 其中f为创建的函数句柄,“arg1、arg2”为输入变量,“expression”为函数的主体表达式。 函数句柄是间接访问函数的手段,可以使用户调用函数变得简单,提高过程的效率和可靠性,避免或减少程序设计中的冗余,并在执行函数调用过程中保存相关信息。,匿名函数中可以携带多个输入参数 sumAxBy=(x,y)(3*x+4*y); sumAxBy(5,7) 如果匿名

16、函数中不包含任何的输入参数,后边的参数列表必须用空的括号表示 t=()datestr(now); 调用此函数时同样使用括号t(),否则Matlab不执行程序。,10.3.1 匿名函数说明,应用举例:, show=()disp(hello) show = ()disp(hello) show() hello show show = ()disp(hello),例如:右边的匿名函数功能为输出字符串“hello”,而如果没有添加空格,则不输出字符串。,应用举例*:,例:创建一个4次方计算函数。, f=(x)x.4 f = (x)x.4 f(5) ans = 625,10.3.2 主函数与子函数,M文

17、件方式存储的函数包含主函数(primary function)、子函数(subfunction)和嵌套函数(nested function)等。 M文件可以包含任意多个函数,主函数是指M文件中的第一个函数。 保存时所用的函数文件名与主函数定义名相同 MATLAB中所有非匿名函数都需要在M文件中定义 子函数是除了主函数之外的函数,一个M文件可以有任意多个子函数,但是只能有一个主函数。,在MATLAB命令窗口或者其他M文件中,只可以对主函数进行调用,而对于子函数的调用,只局限于其所在M文件中的主函数和并列的子函数。即主函数范围比子函数要广,主函数可以在M文件外部调用,子函数则不行。 在M文件中创建

18、的子函数,需要单独声明,即,要使一个子函数对应一个函数声明行。 如果一个M文件中有多个子函数,那么这些子函数之间不存在优先级,都是并列关系,所以排列的前后顺序没有要求。 子函数中的变量是独立的,除非特别声明为全局变量,否则不能被主函数和其他子函数所访问。,10.3.3 嵌套函数,在MATLAB函数体内部定义函数,对于外部函数而言,此函数称为嵌套函数。 嵌套函数在M文件内部定义,与一般主函数一样,其包括函数的所有基本组成部分,结束时必须用end标识。,例如,下列代码中的主函数是A,A内嵌套了函数B,函数B的声明行为“function y=B(p3)”。 function x = A(p1, p2

19、) . function y = B(p3) . end . end,应用举例:,例:function A(x,y) B(x,y); D(y); function B(x,y) C(x); D(y); function C(x) D(x); end end end,应用举例:,一个函数可以调用自己函数体中的嵌套函数,如A可以调用B和D,但不能调用C,同一级的嵌套函数也可以相互调用,如B和D,可以调用比自己低一级的嵌套函数,如C可以调用D,10.4 程序结构及流控制语句,作为一种高级编程语言,MATLAB语言也提供了判断程序结构并控制程序运行的流程控制语句。一般来说MATLAN的程序按照大类,可

20、以分为以下3种,其流程示意图如图所示。 顺序结构 循环结构 分支结构,10.4.1 顺序结构,顺序结构是MATLAB程序结构中最基本的结构,不需要任何流程控制语句,完全是依照自上而下的顺序进行代码的执行,用户熟知的批处理文件就是典型的顺序结构。一般的程序中,都要包含顺序结构。,应用举例*:,例:使用脚本文件求100+10与100-10的值。, edit 建立脚本文件s.m a=100; b=10; fprintf(sum=%fn,a+b); fprintf(sum=%fn,a-b); 在Matlab命令窗口中输入: s.m,10.4.2 循环结构-for语句,循环结构一般用于规律性较强的运算,

21、程序中被循环执行的语句称为循环体。MATLAB中的循环结构控制语句有for和while两种,都属于“当型循环控制语句”,即当条件m为“真”时,反复执行a语句,直到m为假为止,才停止循环,for循环语句的结构如下。,for x=a statements; end 其中x表示循环变量,a一般是使用冒号进行步进的等差数列start:increment:end,stataements是循环体,最后是关键字end。for语句控制循环结构,循环次数一定,由a列数决定,即(end-start)/increment。,10.4.2 循环结构-for语句,10.4.3 循环结构-while语句,while是循环

22、结构的另一常用语句,其格式如下。 while expression statements; end 其中expression代表条件表达式,而statements表示执行的循环体,一般情况下,expression提供的是一个标量,有时也可以是数组。 以expression是标量为例,只要其为“真”,那么statements循环体就会一直循环下去,直到expression变为“假”为止;而如果expression是一个数组,那么statements循环与否的条件则分别是数组所有元素均为“真”和不全为“真”。,应用举例:,while语句 sum=0; i=0; while sum100 i=i+1

23、; sum=sum+i; end,10.4.4 分支结构-if语句,与循环结构一样,分支结构也是程序设计中常见的结构之一。当程序需要表达选择意向的时候,用户往往需要使用条件分支控制语句。条件分支结构的执行顺序一般是,条件P为“真”时,执行语句A,否则,执行语句B,在执行完成任意分支后,输出结果。MATLAB中常见的条件分支控制语句有if和switch语句。,if语句常用于检查逻辑运算、逻辑函数等逻辑表达式的真假,若为真则继续执行下面的指令,其基本格式如下。 if conditional expression statements; end,10.4.4 分支结构-if语句,应用举例:,if语句

24、求解方程 x=3; if x0 y=x+1; else if x=0 y=x; else y=x-1; end end,10.4.5 分支结构-switch语句,switch语句也是MATLAB中常用的多分支结构语句,常用于针对某个变量的不同取值来进行不同的操作。与if多分支语句相比较而言,switch语句主要用于条件多且单一的情况,比如情况分类、层次结构计算等。,switch条件分支语句的调用格式如下。 switch expression case value1 statements1 case value2 statements2 case value3 statements3 . oth

25、erwise statements end,10.4.6 纠错结构-try-catch语句,程序设计是出现错误和纠正错误的动态过程。try-catch语句用于对程序中的错误进行检测,如果发现错误,系统会立即跳入到相应的catch语句中,执行纠错指令。try-catch语句的调用格式和功能如下。 try % try模块 statement catch %catch模块 statement end,应用举例:,例:编写程序,实现对输入的两个矩阵进行乘数运算。 建立脚本文件,保存为m.m a=input(enter the first matrix:) b=input(enter the secon

26、d matrix:) try disp(a); disp(b); z=a*b; disp(z);,应用举例:,catch disp( * Error multiplying a*b) end 在Matlab命令窗口中输入: m enter the first matrix: enter the second matrix:,10.4.7 跳出循环-continue语句,continue语句的功能是跳过程序中未执行的循环语句来结束循环。其调用格式十分简单,即直接输入continue。 Continue,10.4.8 结束循环-break语句,MATLAB程序设计中,break语句与continu

27、e语句功能类似,作用是终止本次循环,跳出最内层循环中所有剩下的语句,即根据条件而不必等到循环结束,便继续下一次循环。例如,查询300400之间第一个能被9整除的数。,应用举例*:,例:求解1+1/2+2/3+3/4+.+99/100这100个数字之和。,需求分析:100个数字从1到99/100,除了第一个数之外,所有的数都是分母比分子多1,且后面的数比前面数的分母多1. 建立脚本文件保存为sm.m s=1; for i=1:100 s=s+i/(i+1); end fprintf(s=%fn,s) 在Matlab命令窗口中输入sm,应用举例*:,例:求解圆周率的近似值,使用常用公式之一 圆周率

28、4(1-1/3+1/5-1/7+1/9),直到最后一项的绝对值小于107为止。,需求分析:括号中的各项有着规律性的关系,即后项的分母是在前项分母的基础上加2,分子都是1,各项之间的加减号也是交替互换的,针对此类问题,使用循环语句 t=1; %t表示计算式括号中的各项 pi=0; %圆周率,首先置0 n=1;s=1; %n为表示分母的变量,s用于正负数的改变 while abs(t)=1e-7 pi=pi+t; n=n+2; s=-s; t=s/n; end pi=4*pi; fprintf(pi=%fn,pi),应用举例*:,例:使用条件结构编写程序,求分段函数 的值。, edit 建立脚本文

29、件,保存为part.m x=input(enter the value of “x“:) if x part,应用举例*:,例:使用switch条件分支编写程序判断学生考试成绩的等级,分数共分5档,90100分为第一档,8090为第二档,7080为第三档,6070为第四档,少于60为不及格。提示:fix(A)函数用于取整函数。,function mark x=input(enter the mark: ) switch fix(x/10) case9,10 disp(grade 1); case8,9 disp(grade 2); case7,8 disp(grade 3); case6,7

30、disp(grade 4); otherwise disp(fail); end,10.5 交互控制指令,MATLAB程序在运行时,用户可以实时的控制其状态,包括键盘输入、暂停、终止操作、错误报警、指令查询等。针对这些功能,介绍MATLAB程序设计中的交互控制指令,包括input、keyboard、pause、return、warning、error、echo指令。,10.5.1 输入控制-input指令,input指令的主要作用是提示用户在程序运行过程中向系统中输入参数(包括数据、字符串和表达式)。input指令的调用格式和具体功能如下: variable=input(wait):在屏幕上显

31、示提示信息“wait”,等待用户输入,并把用户输入的值赋给变量variable;,应用举例:,例:前例中建立的脚本文件part.m,当在matlab命令窗口中输入part后出现enter the value of x: x=input(enter the value of “x“:) if x0 y=x-1; elseif x=0 y=eps(x+1); else y=2*x+3; end disp(y),10.5.2 键盘控制-keyboard指令,keyboard指令常用在程序调试和运行中的变量修改。系统执行keyboard指令时,将停止运行,显示提示符“K”,并把控制权交给键盘,等待用户

32、的输入,显示如下。 K 当用户输入return指令,按“Enter”键,则控制权交回给程序,程序继续运行,显示如下。 K return 说明:keyboard指令与input指令功能较为类似,不同的是,input指令只允许输入变量的值,而keyboard指令却允许用户输入多行MATLAB指令。,10.5.3 暂停执行-pause指令,pause指令可以暂停或者终止程序的运行。执行pause指令时,系统暂停执行之前的操作,等待用户按任意键继续执行。 pause指令常用于程序的调试过程中和用户需要查看程序执行的中间结果的时候,其调用格式和功能如下。 pause:暂停程序的执行,等待用户按任意键继续

33、。 pause(n):暂停程序的执行,n秒后继续执行(n可以是分数)。,pause on:使后续的pause或者pause(n)指令予以执行。 pause off:使后续的pause或者pause(n)指令不予以执行。,10.5.3 暂停执行-pause指令,应用举例:,例:使用pause查看绘图结果:编写脚本文件保存为mesh.m for n=3:22 mesh(magic(n) pause End mesh 调用脚本,按任意键继续下一个图的绘制。,应用举例*:,例:使用pause(n)编写函数文件,分别绘制x,x2,x3 x0,5的曲线图形。,编写函数文件保存为power3.m funct

34、ion y1,y2,y3=power3(x) x=0:0.1:5; y1=x; subplot(3,1,1); plot(x,y1); pause(5);%第一个图绘制完成,程序暂停5秒时间,再接着 运行 y2=x.2; subplot(3,1,2); plot(x,y2); pause(5); y3=x.3; subplot(3,1,3); plot(x,y3);,10.5.4 终止操作-return指令,同样是终止操作指令,break指令一般只用于循环体内部,而return指令可以在循环语句之外结束操作。return指令的用法比continue和break指令都要灵活,一般用在函数的末尾,

35、MATLAB调用函数正在运行时,return指令可以强制结束,或者在满足某条件时强制退出此函数的运行,并返回主调函数或者键盘。正常情况下,程序于end指令处结束,使用return指令可以提前结束程序。,应用举例:,例如,下列代码求向量相反数,当结果为1时,使用return指令退出循环。 for x=-5:-1 y=-x; disp(y); if y=1 return end end,10.5.5 错误警告-warning指令,warning指令与try-catch指令功能类似,都属于对MATLAB程序设计中的警告或错误情况进行捕获和处理的指令,常用于必要的错误提示,其调用格式如下。 warni

36、ng(message) 其中“message”表示显示的警告内容,出现警告时,程序继续进行。 例如,在求两数的商时,如果0作为除数,使用错误警告机制。,10.5.6 警告终止-error指令,error指令的功能与warning指令类似,同样是针对程序中错误代码的报错显示,其常用调用格式和功能如下。 error(message):其中“message”为显示的出错信息,此指令终止程序的执行。,10.6 小结,本章主要介绍MATLAB语言和程序设计知识,通过本章学习,掌握如下的内容。 M文件的概念的应用 变量的命名和分类 特殊变量和关键字 变量检测函数 不同类型的函数 程序控制语句 交互控制指令,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1