1、n=100;a=ones(1,n);for i=3:n a(i)=a(i-1)+a(i-2); if a(i) a(i), break; end;end,i 10946 21 .2.4 switch-case结构【例7.2-5】学生的成绩管理,用来演示switch结构的应用。clear;for i=1:ai=89+i;bi=79+i;ci=69+i;di=59+i;c=d,c;Name= Jack,MarryPeter Rose Tom;Mark=72,83,56,94,100;Rank=cell(1,5);S=struct(Name,Name,Marks,Mark,Rank,Rank);5
2、switch S(i).Marks case 100 S(i).Rank=满分; case a 优秀 case b 良好 case c 及格 otherwise 不及格 endenddisp(学生姓名 得分 等级);disp( )5; disp(S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank); 学生姓名 得分 等级 Jack 72 及格Marry 83 良好Peter 56 不及格 Rose 94 优秀 Tom 100 满分 .2.5 try-catch结构【例7.2-6】try-catch结构应用实例。clear,N=
3、4;A=magic(3);try A_N=A(N,:), catch A_end=A(end,:), lasterr A_end = 4 9 2 Index exceeds matrix dimensions. .2.6 控制程序流的其它常用指令.3 脚本文件和函数文件.3.1 M脚本文件.3.2 M函数文件.3.3 局部变量和全局变量.3.4 M文件的一般结构【例7.3-1】M函数文件示例。circle.mfunction sa = circle(r,s)%CIRCLE plot a circle of radii r in the line specified by s.% r 指定半径的
4、数值% 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 nargin2 error(输入宗量太多。);if nargin=1 s=bclf;t=0:pi/100:2*pi;x=r*exp(i*t);if nargout=0 plot(x,s);else sa=pi*r
5、*r; fill(real(x),imag(x),s)axis(square.3.5 P码文件10 一 语法分析过程和伪代码10 二 P码文件的预生成10 三 内存中P码文件的列表和清除.3.6 MATLAB的搜索过程.4 变量的检测传递和限权使用函数.4.1 输入输出宗量检测指令.4.2 跨空间变量传递10 一 跨空间计算串表达式的值【例7.4-1】evalin运行机理与eval的异同。(1)编写M函数文件evalinzzy.mfunction y1=evalinzzy(a,s)t=(0:a)/a*2*pi;y1=subevalinzzy(4,s);%- subfunction -funct
6、ion y2=subevalinzzy(a,s)ss=a*exp(i*t)switch scase basecaller y2=evalin(s,ss);case self y2=eval(ss);(2)在Notebook或MATLAB指令窗中运行以下指令clear,a=30;sss=for k=1:3 y0=evalinzzy(8,sssk); subplot(1,3,k) plot(real(y0),imag(y0),rLineWidth,3),axis square imageend 图 7.4-1 利用不同工作空间中的变量值计算eval(10 二 跨空间赋值【例7.4-2】assign
7、in运作机理示范。assigninxyq.mfunction y=assigninxyq(x)y=sqrt(x);t=x2;assignin(yy,t)(2)在Notebbok 或MATLAB指令窗中运行以下指令x=4;y=assigninxyq(x);disp(blanks(5),x,blanks(5),y,blanks(4),),disp(x,y,yy) x y yy 4 2 16 .4.3 子函数和私用函数10 一 子函数10 二 私用函数.5 串演算函数.5.1 eval【例7.5-1】计算“语句”串,创建变量。clear,t=pi;eval(theta=t/2,y=sin(theta
8、)theta = 1.5708y = 1 【例7.5-2】计算“合成”串。CEM=cossintan theta=pi*k/12; y(1,k)=eval(CEMk,(,num2str(theta),)y 0.9659 0.5000 1.0000 .5.2 feval【例7.5-3】对字符串类型函数只能用eval ,而不能用feval。x=pi/4;Ve=eval(1+sin(x) Ve = 1.7071 Vf=feval(,x) ? Error using = fevalInvalid function name . 【例7.5-4】函数句柄只能被feval 运用,而不能被eval 调用。(
9、1)rand(seed,1);A=rand(2,2);Heig=eig;d=feval(Heig,A) d = 0.7568 -0.1488 (2)de=eval(Heig,A) evalFunction eval not defined for variables of class function_handle(3)dn=feval(eig, A) dn =.5.3 内联函数【例7.5-5】用内联函数对象实现G=inline(a*exp(x)*cos(y)adisp(class(G),blanks(10),char(G)argnames(G) inline a*exp(x)*cos(y)a
10、ns = GG=vectorize(G) GG = Inline function: GG(a,x,y) = a.*exp(x).*cos(y) GG(2,1,2,pi/3,pi) 2.7183 -14.7781 【例7.5-6】演示:最简练格式创建内联函数;内联函数可被feval 指令调用。Z2=inline(P1*x*sin(x2+P2),2) Z2 = Z2(x,P1,P2) = P1*x*sin(x2+P2) z2=Z2(2,2,3) fz2=feval(Z2,2,2,3) z2 = 2.6279fz2 =2.6279 .6 函数句柄.6.1 函数句柄的创建和观察【例7.6-1】为MA
11、TLAB的“内建”函数创建函数句柄,并观察其内涵。hsin=sin;class(hsin)size(hsin) function_handle 1 1 CC=functions(hsin) CC = function: type:overloaded file:MATLAB built-in function methods: 1x1 struct (4)CC.methods sym:d:matlabr12toolboxsymbolicsymsin.6.2 函数句柄的基本用法【例7.6-2】本例通过sin函数及其句柄演示若干基本用法。fhandle=str2func(ys=sin(pi/4)
12、yfold=feval(,pi/4) yfnew=feval(fhandle,pi/4) ys = 0.7071yfold =yfnew = 0.7071 Alpha=sym(pi/4 yss=sin(Alpha) ,Alpha) ynews=feval(fhandle,Alpha) yss =1/2*2(1/2)ynews =1/2*2(1/2) xold=fminbnd(,0,2*pi) xnew=fminbnd(fhandle,0,2*pi) xold = 4.7124xnew = 4.7124 【例7.6-3】自建函数及其句柄的使用。通过本例可看到:只要在当前MATLAB工作空间中存在
13、函数句柄,那末不管该函数当前是否在搜索范围内,均可通过函数句柄实现正确的运作。zzy076_3.mfunction Hr=zzy076_3(flag )% ZZY076_3 为演示函数、子函数句柄而设计的绘图文件。% flag 可以取字符串line或 circle100)/100*2*pi;x=sin(t);y=cos(t);Hr=cirline; %创建子函数的句柄 feval(Hr,flag,x,y,t)% -subfunction-function cirline(wd,x,y,t)% wd 接受字符串或% t 画线用的独立参变量% x 由t产生的横坐标变量% y 由t产生的纵坐标变量s
14、witch wd plot(t,x, ,t,y,2) plot(x,y,g.MarkerSize,30), axis square offotherwise输入宗量只能取 或 !shgHzzy076_3=zzy076_3 zzy076_3(Hzzy076_3 = zzy076_3图 7.6_1 exm076_3.m绘制的曲线which(zzy076_3) zzy076_3 not found. feval( Undefined function or variable (6)feval(Hzzy076_3,【例7.6-4】子函数句柄的创建与使用。本例仍然使用上例中的zzy076_3.m文件。通过本例可以看到:原先只能在“父函数”视野(Scope)内被调用的子函数,借助其句柄,可扩大使用范围。即,只要MATLAB工作空间中有子函数的句柄,它就能被正确调用,不管该子函数是否在当前视野内,也不管该子函数的父函数是否在搜索路径上。HCL=zzy076_3(HCL = cirline图 7.6_2 zzy076_3.m绘制的圆tt=(0:xx=sin(tt);yy=cos(tt);cirline(,xx,yy,tt);,xx,yy,tt) cirlinefeval(HCL,习题7
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1