收藏 分享(赏)

第五讲__MATLAB_M文件与函数.ppt

上传人:czsj190 文档编号:5247108 上传时间:2019-02-14 格式:PPT 页数:37 大小:138KB
下载 相关 举报
第五讲__MATLAB_M文件与函数.ppt_第1页
第1页 / 共37页
第五讲__MATLAB_M文件与函数.ppt_第2页
第2页 / 共37页
第五讲__MATLAB_M文件与函数.ppt_第3页
第3页 / 共37页
第五讲__MATLAB_M文件与函数.ppt_第4页
第4页 / 共37页
第五讲__MATLAB_M文件与函数.ppt_第5页
第5页 / 共37页
点击查看更多>>
资源描述

1、第五讲 M文件与函数,第五讲 M文件与函数,5.1 MATLAB的控制流 5.2 脚本文件和函数文件 5.3 串演算函数,5.1 MATLAB的控制流,5.1.1 for循环结构 5.1.2 while循环结构 5.1.3 if-else-end分支结构 5.1.4 switch-case结构 5.1.5 try-catch结构 5.1.6 其它常用指令 与其它高级语言类似,但有自身的特点,5.1.1 for循环结构,for x=array(commands) end x为循环变量,(commands)为循环体 循环体的执行次数array的列数 每次循环,x依次取数组的一列,5.1.1 for

2、循环结构,for ii=1:10; %ii依次取1,2,10 x(ii)=ii; %对每个ii值,重复执行由该指令构成的循环体 end; x %要求显示运行后数组x的值 x =1 2 3 4 5 6 7 8 9 10 在for后面的表达式中的数组可以是任何合法的MATLAB数组 应该尽量提高代码向量化程度,避免循环 避免使用i,j作为循环变量,5.1.2 while循环结构,while expression(commands) end expression的值为逻辑真(非0),则执行循环体,直到表达式值为假,5.1.2 while循环结构,Fibonacci数组的元素满足Fibonacci 规

3、则:求该数组中第一个大于10000的元素,5.1.2 while循环结构,a(1)=1;a(2)=1;ii=2; while a(ii)=10000a(ii+1)=a(ii-1)+a(ii); %当现有的元素仍小于10000时,求解下一个元素ii=ii+1; end; ii,a(ii),5.1.2 while循环结构,一般情况下,表达式都是标量 MATLAB允许它为数组,此时只有数组元素都为真时,循环体才被执行 如果表达式为空数组,被认为是假 While循环与for循环的区别在于,while循环体被执行的次数是不确定的(由expression的值决定),而for结构中循环体的执行次数是确定的(

4、由for后的数组的列数决定) 。,5.1.3 if-else-end分支结构,if expression1(commands1) elseif expression2(commands2) else(commandsk) end,5.1.3 if-else-end分支结构,表达式又是由多个表达式组成,MATLAB尽可能少的检测这些子表达式的值。例如,表达式为(子表达式1|子表达式2)当MATLAB检测到子表达式为真时,它就认为表达式为真,而不对子表达式2进行检测。if指令判决和break指令的配合使用,可以强制终止for 循环和while循环。,5.1.3 if-else-end分支结构,用f

5、or循环指令来寻求Fibonacci数组中第一个大于10000的元素 n=100;a=ones(1,n); %产生一个1行100列的全1数组 for ii=3:na(ii)=a(ii-1)+a(ii-2);if a(ii)=10000a(ii),break; %跳出所在的一级循环end; end,ii,5.1.4 switch-case结构,switch ex ex为标量或字符串case test1(commands1) ex等于test1时,执行组命令1,然后跳过该结构case testk(commandsk) ex等于testk时,执行组命令k,然后跳过该结构otherwise 可无(co

6、mmands) 表达式不等于前面所有检测值时,则执行改组命令 end,5.1.4 switch-case结构,当遇到switch结构时,MATLAB将表达式的值依次与各个case指令后面的检测值进行比较:(结构保证至少有一组命令会执行)如比较结果为假,则取下一个检测值再比较;如比较结果为真,则执行相应的一组指令,然后跳出该结构;如所有比较结果都为假,则MATLAB将执行otherwise后面的一组指令。 Switch指令后面的表达式为一个标量或字符串时:对于标量形式的表达式有:表达式= =检测值i对于字符串有调用strcmp来比较: strcmp(表达式,检测值i) case后的检测值还可以是

7、元胞数组。此时,将表达式的值与元胞数组的所有元素进行比较,如有某个元素与表达式的值相等,则结果为真。,5.1.4 switch-case结构,学生的成绩管理,用来演示switch结构 clear; %划分区域:满分(100),优秀(90-99),良好(80-89),及格(60-79),不及格(60)。 for i=1:10;ai=89+i;bi=79+i;ci=69+i;di=59+i;end;c=d,c; Name= Jack,Marry,Peter, Rose, Tom; %元胞数组 Mark=72,83,56,94,100;Rank=cell(1,5); %创建一个含5个元素的构架数组S

8、,它有三个域。 S=struct(Name,Name,Marks,Mark,Rank,Rank);,5.1.4 switch-case结构,for i=1:5switch S(i).Markscase 100 %得分为100时S(i).Rank=满分; %列为满分等级case a %得分在90和99之间S(i).Rank= 优秀; %列为优秀等级 case b %得分在80和89之间S(i).Rank= 良好; %列为良好等级case c %得分在60和79之间S(i).Rank= 及格; %列为及格等级otherwise %得分低于60。S(i).Rank=不及格; % 列为不及格等级 en

9、d end,5.1.4 switch-case结构,%将学生姓名,得分,等级等信息打印出来。 disp(学生姓名 , 得分 , 等级);disp( ) for i=1:5; disp(S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank); end; 学生姓名 得分 等级Jack 72 及格 Marry 83 良好 Peter 56 不及格Rose 94 优秀Tom 100 满分,5.1.5 try-catch结构,try(commands1) 总被执行,正确则跳出 catch(commands2) 命令1出错,执行命令2 en

10、d 可用lasterr查询出错原因,成功执行为空串。 命令组2也出错,则终止该结构,5.1.5 try-catch结构,clear,N=4;A=magic(3); %设置3行3列魔方矩阵A。 tryA_N=A(N,:), %取A的第N行元素 catchA_end=A(end,:), %如果取A(N,:)出错,则改取A的最后一行 end lasterr %显示出错原因A_end =4 9 2 ans =Index exceeds matrix dimensions. 超出矩阵维数,5.1.6 其它常用指令,v=input(message) 键盘输入变量v的数据(数值、字符串、数组元素等),mes

11、sage为提示用字符串 keyboard 控制权交给键盘,可以输入各种MATLAB指令。输入return指令,返回程序,5.1.6 其它常用指令,break 跳出循环,导致循环终止 continue 跳过其他指令,执行下一次循环 pause pause(n) 程序暂停,按任意键继续;暂停n秒,5.1.6 其它常用指令,return 结束所在函数的执行,返回调用函数或指令窗(程序出口) error(message) 显示出错信息message,并终止程序,5.1.6 其它常用指令,lasterr 显示最新的出错信息,并终止程序 lastwarn 显示最新的警告信息,程序继续执行 warning(

12、message) 显示警告信息message,程序继续,5.2 脚本文件和函数文件,5.2.1 M脚本文件 5.2.2 M函数文件 5.2.3 局部变量和全局变量 5.2.4 M文件的一般结构,5.2.1 M脚本文件,简单问题,直接在指令窗输入指令计算 若问题复杂,控制流复杂或重复计算,则需编制M脚本文件 MATLAB只是按脚本文件的指令执行 脚本文件的构成简单,5.2.1 M脚本文件,脚本文件的特点: 只是一串按用户意图排列的指令集合,包括控制流指令 脚本文件运行后,产生的变量驻留在基本工作空间中,5.2.2 M函数文件,与脚本文件不同,外界只能看到传给它的输入量和送出的计算结果,而内部运作

13、是看不见的。函数文件的特点: 第一行为函数声明行,以“function”开头。函数声明给出函数的调用格式、标称的输入输出量(个数不限) 调用函数时,输入输出量可以少于标称个数,5.2.2 M函数文件,函数文件运行时,MATLAB专门为它开辟函数工作空间(Function workspace),所有中间变量都保存在其中。 函数工作空间是独立于基本工作空间的,它随函数调用产生,随调用结束删除,所以中间变量也将被清除 若函数中调用脚本文件,脚本产生的变量保存在函数工作空间中,5.2.3 局部变量和全局变量,1. 局部变量(Local) 存在于函数空间内部的中间变量,产生于函数运行过程中,存在于函数空

14、间的中间变量,影响范围限于函数本身。 2. 全局变量(Global) 通过global指令,MATLAB允许几个不同的函数空间及基本工作空间共享的变量。 它必须用global指令声明,除非与全局变量联系的所有工作空间都被删除,否则全局变量依然存在。 如果某个函数使全局变量的内容发生了变化,则其他函数空间及基本工作空间中的同名变量也随之变化。,5.2.3 局部变量和全局变量,所有工作空间都需用global声明,才能共享全局变量 全局变量必须在使用前声明,建议放在函数体首行 建议用大写字符命名全局变量 减少使用全局变量(损害函数的封装性),5.2.4 M文件的一般结构,从结构上看,脚本文件只比函数

15、文件少一个函数声明行 典型M函数文件的结构: (1) 函数声明行(Function declaration line)位于函数文件的首行,以关键字function开始,函数名及输入输出量都由次行定义。,5.2.4 M文件的一般结构,(2) H1行(The first help text line)紧随函数声明行后的第一注释行。按MATLAB的规则,H1行包括:大写体的函数文件名;运用关键词简要描述函数功能。H1行供lookfor查询和help使用。,5.2.4 M文件的一般结构,(3) 在线帮助文本区(Help text)H1行及其后的连续注释行。通常包括:函数输入输出量的含义,调用格式说明

16、(4) 编写和修改记录与在线帮助文本区相隔一个空行的注释行。标志编写、修改该文件的作者、日期、版本记录。用于软件档案管理,5.2.4 M文件的一般结构,(5) 函数体(Function body)用MATLAB指令实现函数功能。为便于阅读和理解,应该使用适当的空行和注释。 从运算的角度看,只有函数声明和函数体是函数文件必不可少的部分,5.2.4 M文件的一般结构,【例7.3-1】M函数文件示例。 函数声明行function sa = circle(r,s ) (2) H1行,即第一注释行 %CIRCLE plot a circle of radii r in the line specifie

17、d by s. (3) 在线帮助文本区(Help text) % r 指定半径的数值 % s 指定线色的字符串 % sa 圆面积 % % circle(r) 利用蓝实线画半径为 r 的圆周线 % circle(r,s) 利用串 s 指定的线色画半径为 r 的圆周线 % sa=circle(r) 计算圆面积,并画半径为 r 的蓝色圆面 % sa=circle(r,s) 计算圆面积,并画半径为 r 的 s 色圆面,5.2.4 M文件的一般结构,(4) 编写和修改记录% 编写于1999年4月7日,修改于1999年8月27日。 (5) 函数体(Function body) if nargin2error(输入宗量太多。); end; if nargin=1s=b; end; clf; t=0:pi/100:2*pi; x=r*exp(i*t); if nargout=0plot(x,s); elsesa=pi*r*r;fill(real(x),imag(x),s) end axis(square),小结,掌握控制流指令的使用方法 理解脚本文件与函数文件的区别 重点掌握函数文件的编写结构和规则,

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

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报