收藏 分享(赏)

第7章+M文件和函数句柄.ppt

上传人:kpmy5893 文档编号:5247362 上传时间:2019-02-14 格式:PPT 页数:41 大小:274KB
下载 相关 举报
第7章+M文件和函数句柄.ppt_第1页
第1页 / 共41页
第7章+M文件和函数句柄.ppt_第2页
第2页 / 共41页
第7章+M文件和函数句柄.ppt_第3页
第3页 / 共41页
第7章+M文件和函数句柄.ppt_第4页
第4页 / 共41页
第7章+M文件和函数句柄.ppt_第5页
第5页 / 共41页
点击查看更多>>
资源描述

1、第7章 M文件和程序控制,7.1 Matlab控制流 7.2 脚本文件和函数文件 7.3 变量的检测传递和限权使用函数 7.4 串演算函数 7.5 函数句柄,7.1 Matlab控制流,for循环 while循环 if-else-end结构 switchcase结构 try-catch结构,7.1.1 For循环结构,for n = arraycommands end,for n=1:10x(n)=sin(n*pi/10); end x x = Columns 1 through 7 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 Column

2、s 8 through 10 0.5878 0.3090 0.0000,for循环不能用for循环内重新赋值循环变量n来终止 在for循环内接受任何有效的MATLAB数组 for循环可按需要嵌套 当有一个等效的数组方法来解给定的问题时,应避免用for循环 为了得到最大的速度,在 for循环被执行之前,应预先分配数组,for循环的重要说明,for n=1:10x(n)=sin(n*pi/10);n=10; end x x =Columns 1 through 7 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090Columns 8 through 1

3、0 0.5878 0.3090 0.0000, data=3 9 45 6; 7 16 -1 5 data =3 9 45 67 16 -1 5 for n=datax=n(1)-n(2) end; x =-4 x =-7 x =46 x =1,for n=1:5for m=5:-1:1A(n,m)=n2+m2;end disp(n) end 1 2 3 4 5 A A = 2 5 10 17 26 5 8 13 20 29 10 13 18 25 34 17 20 25 32 41 26 29 34 41 50, n=1:10; x=sin(n*pi/10) x = Columns 1 th

4、rough 7 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 Columns 8 through 10 0.5878 0.3090 0.0000,x=zeros(1,10); % preallocated memory for x for n=1:10x(n)=sin(n*pi/10); end;,7.1.2 while循环结构,while expressioncommands end, num=0;EPS=1; while (1+EPS)1EPS=EPS/2;num=num+1;end num num =53 EPS=2*EPS EPS =

5、2.2204e-016,7.1.3 if-else-end分支结构,if expressioncommands end,if expression commands evaluated if True elsecommands evaluated if False end,if expression1commands evaluated if expression1 is True elseif expression2commands evaluated if expression2 is True elseif elsecommands evaluated if no other expre

6、ssion is True end,break和continue的用法, EPS=1; for num=1:1000EPS=EPS/2;if (1+EPS) num num =53, EPS=1; for num=1:1000EPS=EPS/2;if (1+EPS)1continueendEPS=EPS*2break end EPS = 2.2204e-016 num num =53,7.1.4 switch-case结构,switch ex ex为一标量或字符串case test1(commands 1) case test2(commands 2) case testk(commands

7、k) otherwise (commands),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); S=struct(Name,Name,Marks,Mark,Rank,Rank); for i=1:5switch S(i).Markscase 100 S(i).Rank=满分; case a S(i).Rank= 优秀; case b S(i).Rank= 良好; case c S(i).Rank=

8、及格; otherwise S(i).Rank=不及格; end end,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 满分,7.1.5 try-catch结构,try(commands1) catch(commands2) end,N=4;A=magic(3); tryA_N=A(N,:)

9、, catchA_end=A(end,:), endA_end =4 9 2 lasterr ans = Index exceeds matrix dimensions.,7.2 脚本文件和函数文件,7.2.1 M脚本文件的特点,脚本文件运行后,所产生的所有变量都驻留在Matlab基本工作空间中。,一串按用户意图排列而成的(包括控制流向指令在内的)Matlab指令集合;,7.2.2 M 函数文件及其特点,1.函数文件的第一行总是以 “function”引导的“函数申明行”(function declaration line) 。,4. 在函数文件中调用某脚本文件,那该脚本文件运行产生的所有变量

10、都存放于该函数空间之中。,3.函数工作空间。,2.输入参量包含传递个这个函数的数据,输出变量包含从这个函数输出的变量。,7.2.3 函数文件一般结构,1.函数申明行 :以关键字 function开头,定义函数名以及函数的输入输出参量。函数名和文件名必须相同。,5.函数体:Matlab指令,接收输入参量,进行程序流控制,得到输出参量。,4.编写和修改记录:以%开头。标志编写及修改该文件的作者、日期和版本记录,用于软件档案管理。,3.在线帮助文件文本 :以%开头。通常包括:函数输入输出参量的含义,调用格式说明。,2.H1行:以 %开头,包括大写体的函数文件名;运用关键词要描述的函数功能。,circ

11、le.m function sa = circle(r,s) %CIRCLE 绘制一个半径为r,颜色为s的圆周线或圆周面 % r 指定半径的数值 % s 指定线色的字符串 % sa 圆面积 % % circle(r) 利用蓝实线画半径为 r 的圆周线. % circle(r,s) 利用串 s 指定的线色画半径为 r 的圆周线. % sa=circle(r) 计算圆面积,并画半径为 r 的蓝色圆面. % sa=circle(r,s) 计算圆面积,并画半径为 r 的 s 色圆面. % 编写于1999年4月7日,修改于1999年8月27日。,if nargin2error(输入参量太多。); end

12、; if nargin=1s=b; end; 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,7.2.4 局部变量和全局变量,局部变量存在于函数空间内部的中间变量,产生于该函数的运行过程中,其影响范围也仅限于该函数本身。,全局变量通过global指令定义变量,没有采用global定义的函数或基本工作空间,将无权享用全局变量。,关于全局变量的说明,1.如果全局变量的内容发生了变化,那么其他函数空间以及基本工作空间中的同名变量也就随之变化。,5.全局变量损

13、害函数的封装性,不提倡使用全局变量。,4. 建议选用大写字符命名全局变量。,3.对全局变量的定义必须在变量被使用之前进行。建议把全局变量的定义放在函数体的首行位置。,2.除非与全局变量联系的所有工作空间都被删除,否则全局变量依然存在。,7.3 变量的检测传递和限权使用函数,7.3.1 输入输出参量检测指令,narg:Number of function arguments,7.3.2 跨空间变量传递,7.3.2.1 跨空间计算串表达式的值,evalin(workspace,exp),1. workspace可取两个值:base,caller。 2. base:从基本工作空间中获得变量值。cal

14、ler:从主调函数工作空间获得变量值.,evalin(workspace,exp1,exp2),1.先丛所在函数空间获取变量值,用eval(exp1)计算原串表达式; 2.若该计算失败,则再从workspace指定的工作空间中获取变量,再通过eval(exp2)计算替代串表达式。,evalinz.m function y1=evalinz(a,s) t=(0:a)/a*2*pi; y1=subevalinz (4,s); function y2=subevalinz (a,s) t=(0:a)/a*2*pi; sss=a*exp(i*t); switch scase base,callery2

15、=evalin (s,sss);case selfy2=eval(sss); end,a=30; t=(0:a)/a*2*pi; ss=base,caller,self; for k=1:3 y0=evalinz (8,ssk); subplot(1,3,k) plot(real(y0),imag(y0) end,7.3.2.2 跨空间赋值,assignin(workspace,VN,x),assigninxyq.m function y=assigninxyq(x) y=sqrt(x);t=x2; assignin(base,yy,t),clear;x=4; y=assigninxyq(x)

16、; disp(x,y,yy) 4 2 16,7.3.3 子函数,5.help,lookfor等帮助指令不提供关于子函数的帮助信息。,4.同一文件的主函数、子函数的工作空间彼此独立;,3.子函数只能被处于同一文件的主函数或其他子函数调用;,2.主函数的位置不可改变,但子函数的排列次序可以任意改变;,1.每个子函数的第一行是其自己的函数申明行;,7.4 串演算函数,一种是串演算函数eval,它具有对字符串表达式进行计算的能力;,y=eval(CEM) 执行CEM指定的计算 y1,y2,=eval(CEM) 执行CEM代表的函数文件,并输出结果,eval指令的输入参量必须是字符串; 构成字符串CEM

17、,可以是Matlab任何合法的指令、表达式、语句或M文件名; 第二种格式中的CEM只能是(包含输入参量在内的)M函数文件名;,t=pi; eval(theta=t/2,y=sin(theta) theta =1.5708 y =1,7.5 函数句柄,函数句柄(Function handle)是Matlab6启用的新数据类型。它保存着“为该函数创建句柄时的路径、函数名以及可能存在的重载方法”。,7.5.1 函数句柄的创建和观察 hsin=sin; class(hsin) ans = function_handle size(hsin) ans =1 1 CC=functions(hsin) CC

18、 = function: sintype: simplefile: MATLAB built-in function,7.5.2 函数句柄的基本用法,不管名为FunName的函数文件是否在当前搜索路径上,不管它是否是子函数或私用函数,只要句柄 hfun存在,那么它代表的函数总能被正确地执行。 在不使用函数句柄的情况下,对 Funname进行多次调用时,每次都要为该函数进行全面的路径搜索,这直接影响计算速度。借助 Hfun可完全克服这种无谓的时间消耗。,1.argout1,argout2,argoutn=FunName(argin1,argin2,arginn) 2.hfun=FunName 3

19、.argout1,argout2,argoutn=feval(hfun,argin1,argin2,arginn),y1,y2,=feval(FH,arg1,arg2,) 执行函数句柄FH指定的计算 y1,y2,=feval(FN,arg1,arg2,) 执行函数名字符串FN指定的计算,x=pi/4; Ve=eval(1+sin(x) Ve =1.7071 Vf=feval(1+sin(x),x) ? Error using = feval Invalid function name 1+sin(x)., y=feval(sin,x) y =0.7071,A=pi/2; Heig=sin; d=feval(Heig,A) d =1de=eval(Heig,A) ? Error using = eval Function eval not defined for variables of class function_handle.,作业,请分别写出用for和while循环语句计算下式的程序,此外,请写出一种避免循环的计算程序,

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

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

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


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

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

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