《第10章MATLAB程序设计ppt课件》由会员分享,可在线阅读,更多相关《第10章MATLAB程序设计ppt课件(78页珍藏版)》请在金锄头文库上搜索。
1、第10章 MATLAB7.0程序设计MATLAB7.0拥有强大的数值计算和图形可视化功能。在之前的章节,用户主要是利用命令窗口和交互式对话框如图形窗口把想法和意图传送给机器,让系统执行操作。这种操作虽然比较便利,但是只能处理代码行数少的简单问题,对于大型问题就显得捉襟见肘。针对此问题,MATLAB作为一种高级运用软件,还提供了特有的交互式的程序文语,即MATLAB言语。用户可以运用MATLAB言语编写扩展名为.m的文件,方便灵敏地整合大量程序代码,从而处理大规模的工程问题。主要内容包括:M文件的特点和类型、变量、函数以及MATLAB程序构造和设计等根本内容。第10章 MATLAB7.0程序设计
2、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 functions。脚本文件是包含多
3、条MATLAB命令的文件;函数文件可以包含输入变量,并把结果传送给输出变量。两者的简单引见及区别如表所示。10.1.3 脚本式M文件脚本文件可以了解为较为简单的M文件,由于其没有输入和输出变量。下面用一个简单的例子阐明如何编写和运转脚本文件 edit在M文件中输入如下代码并保管为s.m文件 r=3.33; s=(r2)*pi在任务窗口中点右键并点run(或按F5)在Matlab命令窗口中观看运转结果阐明:脚本文件普通顺应于大型程序的反复操作,对个别变量的修正只需在脚本文件中进展即可而不需求对多数一样的代码进展反复操作。用户可以将需求反复输入的一切命令按顺序放到一个扩展名为.m的文本文件下,每次
4、运转时只需输入该M文件的文件名即可。用户本人创建的脚本文件的文件名要防止与MATLAB 7的内置函数和工具箱中的函数重名,以免发生内置函数被交换的情况。(由于脚本文件中的变量多数是全局变量它与Matlab程序共用一个任务空间)8脚本式M文件运用举例脚本式M文件绘制一个正弦曲线,Editx=-2*pi:0.05:2*pi;y=sin(x);plot(x,y,c+)legend(正弦曲线图)保管文件名为jh.m:在Matlab命令窗口中输入jh10.1.4 函数式M文件相对于脚本文件来说,函数文件稍显复杂。从外观上看来,函数文件只是在对应脚本文件的根底上,在文件中代码开场处多添加了一行函数定义行,
5、函数文件都是以函数声明行“function作为开场,其本质是:用户往MATLAB7.0函数库里边添加的子函数,即函数M文件中的变量都是部分变量,而非全局变量除非运用特别方式声明,但是在函数运转期间失效,函数运转终了之后,其定义的变量将从任务区间中去除,对于这一点,要留意和脚本文件的区别。 而脚本文件只是将一系列相关代码结合封装,没有输入参数和输出参数,即不自带参数,也不一定要前往结果。10.1.4 M文件的组成部分及其功能 组 成 部 分描 述函数定义行(仅限于函数式M文件)定义函数名,以及输入和输出变量的数目和顺序H1 行H1行对程序进行概括性的描述,使用help和lookfor命令都可以调
6、出此行帮助文本这是比H1 行更详细的帮助信息,使用help命令时与H1行一起显示函数体函数体是M文件的主要部分,程序的计算和设计都在此实现注释解释程序行的意义12函数式M文件的组成部分函数式M文件的组成部分。调出edit窗口,在里边输入如下内容: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:
7、n); % 函数体函数式M文件阐明1、函数文件中的变量除特别声明外都是部分变量。2、函数文件的函数名与文件名必需一样。3、函数文件被调用时Matlab会专门分配一个暂时任务空间,用于存储函数执行过程中的中间变量,当函数文件完成被调用的操作时,这个空间将被Matlab收回,空间中的变量也将被擦除,函数空间是独立的和暂时的,这与脚本文件存在着本质的区别。10.2 变量变量variables是MATLAB中的重要概念,与程序设计有亲密关系。因此,需求引见:变量的命名规那么、MATLAB中特殊变量和关键字、变量的分类,不同类型变量的区别及运用范围、变量的检测传送以及变长度函数等。10.2.1 命名变量
8、MATLAB中的变量不需求在运用前事先定义,但是必需遵照以下命名规那么:变量名区分大小写:HELLO和hello是不同的变量名。变量名最多能包含63个字符,如超出限制,从第64个字符开场包含,其后的字符都将被忽略;变量名必需以字母开场,其后可以是恣意数量的字母或下画线;不允许出现标点符号,由于很多标点符号在MATLAB中有特殊的意义,如total name与total_name会产生完全不同的结果;系统也会以为total,name由于逗号的分隔,不是一个变量。10.2.2 MATLAB特殊变量MATLAB预定义了假设干特殊变量Special Variables,这些变量具有系统默许的含义,如表
9、所示。10.2.3 MATLAB中关键字关键字是MATLAB程序设计中常用的流程语句控制变量。MATLAB有17个系统关键字,在命令窗口输入指令iskeyword,就可以查询17个显示为蓝色的关键字: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 t
10、he equals sign is not a valid target for an assignment.假设一定要运用与这些关键字类似的词作为变量名,可以将这些关键字中的某个或者某些字母改成大写 WHILE=1 %WHILE和while含义不同,前者是用户定义变量,后者是关键字WHILE = 110.2.4 不同类型的变量MATLAB中的变量可分为以下3类。部分变量Local Variables:只在特定空间内定义且有意义的变量。全局变量Global Variables:在多个空间可以调用和传送的变量。经过global指令来定义。永久变量Persistent Variables:只在函数
11、文件中声明和调用,并在不同函数之间传送的变量。经过persistent指令来定义。10.2.4 部分变量和全局变量阐明每个函数都有本人的部分变量,他们与根本任务空间中的变量是相互独立的,而且不同函数的部分变量是独立的,只能在函数内部运用假设两个或多个函数想共用同一个变量,那么就可以用global将它声明成全局变量global variables全局变量的运用可以减少参数的传送,假设合理利用全局变量,将可以提高程序的执行效率假设要查看任务空间的全局变量,那么输入whos global,可显示出全局变量global x yx=36;y=78;z=5;p=21;whos globalMATLAB中,
12、每一个函数有其独立的部分变量,这些暂时定义的变量不被加载到MATLAB的任务空间中,与其他函数或是MATLAB根本任务空间中的变量互不影响。除非特别定义了全局变量或者永久变量,否那么当函数调用终了时,一切部分变量将随之被擦除。脚本文件没有独立的任务空间,与其调用系统共用一个任务空间。当在MATLAB的命令窗口调用脚本文件时,共用MATLAB根本任务空间;而当在函数中调用时,那么运用函数空间存储变量。所以当脚本文件运用空间中已存在的变量时,将改动变量的值。10.2.4 部分变量和全局变量阐明运用举例:1新建脚本文件,取名为GV1,在其中定义全局变量GV,调用disp函数输出全局变量和部分变量v1
13、的值。global GVdisp(GV);disp(v1)2新建函数文件,取名为GV,在其中定义全局变量GV,调用disp函数输出全局变量的值。function GVglobal GVdisp(GV);dispv1运用举例:(3)在Matlab命令窗口输入: global GV GV=1;v1=2;(4)运转脚本GV1。脚本文件中的全局变量GV已被赋值为1,且由于脚本与Matlab共享任务空间,部分变量也被赋值为2.(5)运转函数GV。函数文件中的全局变量GV也被赋值为1.但v1没有被赋值,函数文件中的v1是部分变量与Matlab任务空间中定义的v1并不是同一个变量。运用举例:6在脚本文件中为
14、GV和v1重新赋值,并运转脚本。global GVGV=11;v1=3; disp(GV);disp(v1)7调用函数文件GV值改动,但是变量v1同样没有改动。10.3 函数函数是MATLAB中的一个重要概念,例如绘图函数plot、mesh、peak,三角函数sin、cos等在之前的章节曾多次调用。调用函数执行某种操作是MATLAB的常用功能。函数的作用是使问题处理模块化,接受输入、输出参数,并前往结果。MATLAB7.0中创建和调用函数的方法有两种,一是命令窗口输入代码,另一个是编写M-函数文件。根据创建方法、调用方式以及功能的不同,函数可以进展分类,本节将引见不同函数类型的函数包括:匿名函
15、数、主函数、子函数和嵌套函数。10.3.1 匿名函数匿名函数是MATLAB函数的简易方式,这种函数没有函数名,且不是M文件,只包含一个MATLAB的表达式和输入、输出参数。用户可以直接在命令窗口输入代码,创建匿名函数。匿名函数的创建格式如下。f=(arg1,arg2,.) expression其中f为创建的函数句柄,“arg1、arg2为输入变量,“expression为函数的主体表达式。函数句柄是间接访问函数的手段,可以运用户调用函数变得简单,提高过程的效率和可靠性,防止或减少程序设计中的冗余,并在执行函数调用过程中保管相关信息。匿名函数中可以携带多个输入参数sumAxBy=(x,y)(3*
16、x+4*y);sumAxBy(5,7)假设匿名函数中不包含任何的输入参数,后边的参数列表必需用空的括号表示t=()datestr(now);调用此函数时同样运用括号t(),否那么Matlab不执行程序。10.3.1 匿名函数阐明运用举例: show=()disp(hello)show = ()disp(hello) show() hello showshow = ()disp(hello)例如:右边的匿名函数功能为输出字符串“hello,而假设没有添加空格,那么不输出字符串。运用举例*:例:创建一个4次方计算函数。 f=(x)x.4f = (x)x.4 f(5)ans = 62510.3.2
17、主函数与子函数M文件方式存储的函数包含主函数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). functi
19、on 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 endend运用举例:一个函数可以调用本人函数体中的嵌套函数,如A可以调用B和D,但不能调用C,同一级的嵌套函数也可以相互调用,如B和D,可以调用比本人低一级的嵌套函数,如C可以调用D10.4 程序构造及流控制语句作为一种高级编程言语,MATLAB言语也提供了判别程序构造并控制程序运转的流程控制语句。普通来说MATLAN的程序按照大类,可以分为以下3种,其流程表示图如下图。顺序构
20、造循环构造分支构造10.4.1 顺序构造顺序构造是MATLAB程序构造中最根本的构造,不需求任何流程控制语句,完全是按照自上而下的顺序进展代码的执行,用户熟知的批处置文件就是典型的顺序构造。普通的程序中,都要包含顺序构造。运用举例*:例:运用脚本文件求100+10与100-10的值。 edit建立脚本文件s.ma=100;b=10;fprintf(sum=%fn,a+b);fprintf(sum=%fn,a-b);在Matlab命令窗口中输入:s.m10.4.2 循环构造-for语句循环构造普通用于规律性较强的运算,程序中被循环执行的语句称为循环体。MATLAB中的循环构造控制语句有for和w
21、hile两种,都属于“当型循环控制语句,即当条件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是循环构造的另一常用语句,其格式如下。while expression statements;end
22、其中expression代表条件表达式,而statements表示执行的循环体,普通情况下,expression提供的是一个标量,有时也可以是数组。以expression是标量为例,只需其为“真,那么statements循环体就会不断循环下去,直到expression变为“假为止;而假设expression是一个数组,那么statements循环与否的条件那么分别是数组一切元素均为“真和不全为“真。运用举例:while语句sum=0;i=0;while sum0y=x+1;else if x=0y=x;elsey=x-1;endend10.4.5 分支构造-switch语句switch语句也是
23、MATLAB中常用的多分支构造语句,常用于针对某个变量的不同取值来进展不同的操作。与if多分支语句相比较而言,switch语句主要用于条件多且单一的情况,比如情况分类、层次构造计算等。switch条件分支语句的调用格式如下。switch expression case value1 statements1 case value2 statements2 case value3 statements3.otherwise statementsend10.4.6 纠错构造-try-catch语句程序设计是出现错误和纠正错误的动态过程。try-catch语句用于对程序中的错误进展检测,假设发现错误,
24、系统会立刻跳入到相应的catch语句中,执行纠错指令。try-catch语句的调用格式和功能如下。try % try模块 statementcatch %catch模块 statementend运用举例:例:编写程序,实现对输入的两个矩阵进展乘数运算。建立脚本文件,保管为m.ma=input(enter the first matrix:)b=input(enter the second matrix:)try disp(a); disp(b); z=a*b; disp(z);运用举例:catch disp( * Error multiplying a*b)end在Matlab命令窗口中输入:
25、 menter the first matrix:enter the second matrix:10.4.7 跳出循环-continue语句continue语句的功能是跳过程序中未执行的循环语句来终了循环。其调用格式非常简单,即直接输入continue。Continue10.4.8 终了循环-break语句MATLAB程序设计中,break语句与continue语句功能类似,作用是终止本次循环,跳出最内层循环中一切剩下的语句,即根据条件而不用等到循环终了,便继续下一次循环。例如,查询300400之间第一个能被9整除的数。运用举例*:例:求解1+1/2+2/3+3/4+.+99/100这100
26、个数字之和。需求分析:100个数字从1到99/100,除了第一个数之外,一切的数都是分母比分子多1,且后面的数比前面数的分母多1.建立脚本文件保管为sm.ms=1;for i=1:100 s=s+i/(i+1);endfprintf(s=%fn,s)在Matlab命令窗口中输入sm运用举例*:例:求解圆周率的近似值,运用常用公式之一圆周率41-1/3+1/5-1/7+1/9,直到最后一项的绝对值小于107为止。需求分析:括号中的各项有着规律性的关系,即后项的分母是在前项分母的根底上加2,分子都是1,各项之间的加减号也是交替互换的,针对此类问题,运用循环语句t=1; %t表示计算式括号中的各项p
27、i=0; %圆周率,首先置0n=1;s=1; %n为表示分母的变量,s用于正负数的改动while abs(t)=1e-7 pi=pi+t; n=n+2; s=-s; t=s/n;endpi=4*pi;fprintf(pi=%fn,pi)运用举例*:例:运用条件构造编写程序,求分段函数 的值。 edit建立脚本文件,保管为part.mx=input(enter the value of x:)if x part运用举例*:例:运用switch条件分支编写程序判别学生考试成果的等级,分数共分5档,90100分为第一档,8090为第二档,7080为第三档,6070为第四档,少于60为不及格。提示:f
28、ixA函数用于取整函数。function markx=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 disp(grade 4); otherwise disp(fail);end10.5 交互控制指令MATLAB程序在运转时,用户可以实时的控制其形状,包括键盘输入、暂停、终止操作、错误报警、指令查询等。针对这些功能,引见MATLAB程序设计中的交互控制指令,包括input、keyboard、pause、re
29、turn、warning、error、echo指令。10.5.1 输入控制-input指令input指令的主要作用是提示用户在程序运转过程中向系统中输入参数包括数据、字符串和表达式。input指令的调用格式和详细功能如下:variable=input(wait):在屏幕上显示提示信息“wait,等待用户输入,并把用户输入的值赋给变量variable;运用举例:例:前例中建立的脚本文件part.m,当在matlab命令窗口中输入part后出现enter the value of x:x=input(enter the value of x:)if x,并把控制权交给键盘,等待用户的输入,显示如下
30、。K当用户输入return指令,按“Enter键,那么控制权交回给程序,程序继续运转,显示如下。K return阐明:keyboard指令与input指令功能较为类似,不同的是,input指令只允许输入变量的值,而keyboard指令却允许用户输入多行MATLAB指令。10.5.3 暂停执行-pause指令pause指令可以暂停或者终止程序的运转。执行pause指令时,系统暂停执行之前的操作,等待用户按恣意键继续执行。pause指令常用于程序的调试过程中和用户需求查看程序执行的中间结果的时候,其调用格式和功能如下。pause:暂停程序的执行,等待用户按恣意键继续。pause(n):暂停程序的执
31、行,n秒后继续执行n可以是分数。pause on:使后续的pause或者pause(n)指令予以执行。pause off:使后续的pause或者pause(n)指令不予以执行。10.5.3 暂停执行-pause指令运用举例:例:运用pause查看绘图结果:编写脚本文件保管为mesh.mfor n=3:22mesh(magic(n)pauseEnd mesh调用脚本,按恣意键继续下一个图的绘制。运用举例*:例:运用pausen编写函数文件,分别绘制x,x2,x3 x0,5的曲线图形。编写函数文件保管为power3.mfunction y1,y2,y3=power3(x)x=0:0.1:5;y1=
32、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指令都要灵敏,普通用在函数的末尾,MATLAB调用函数正在运转时,return指令可以强迫终了,或者在满足某条件时强迫退出此函数的运
33、转,并前往主调函数或者键盘。正常情况下,程序于end指令处终了,运用return指令可以提早终了程序。运用举例:例如,以下代码求向量相反数,当结果为1时,运用return指令退出循环。for x=-5:-1y=-x;disp(y);if y=1returnendend10.5.5 错误警告-warning指令warning指令与try-catch指令功能类似,都属于对MATLAB程序设计中的警告或错误情况进展捕获和处置的指令,常用于必要的错误提示,其调用格式如下。warning(message)其中“message表示显示的警告内容,出现警告时,程序继续进展。例如,在求两数的商时,假设0作为除数,运用错误警告机制。10.5.6 警告终止-error指令error指令的功能与warning指令类似,同样是针对程序中错误代码的报错显示,其常用调用格式和功能如下。errormessage:其中“message为显示的出错信息,此指令终止程序的执行。10.6 小结本章主要引见MATLAB言语和程序设计知识,经过本章学习,掌握如下的内容。M文件的概念的运用变量的命名和分类特殊变量和关键字变量检测函数不同类型的函数程序控制语句交互控制指令