文件和面向对象编程汇总课件.ppt

上传人(卖家):晟晟文业 文档编号:4373141 上传时间:2022-12-03 格式:PPT 页数:57 大小:273.25KB
下载 相关 举报
文件和面向对象编程汇总课件.ppt_第1页
第1页 / 共57页
文件和面向对象编程汇总课件.ppt_第2页
第2页 / 共57页
文件和面向对象编程汇总课件.ppt_第3页
第3页 / 共57页
文件和面向对象编程汇总课件.ppt_第4页
第4页 / 共57页
文件和面向对象编程汇总课件.ppt_第5页
第5页 / 共57页
点击查看更多>>
资源描述

1、第七章 M 文件和面向对象编程v脚本;v函数;v函数句柄的创建和使用;v程序调试和剖析;v数据结构(类、对象);v重载和继承;v面向对象编程内容:7.1 入门通过M脚本文件,画出下列分段函数所表示的曲面。15457.0117575.015457.0),(215.175.375.0216215.175.375.02112122212212122xxexxexxexxpxxxxxxxxa=2;b=2;clf;x=-a:0.2:a;y=-b:0.2:b;for i=1:length(y)for j=1:length(x)if x(j)+y(i)1 z(i,j)=0.5457*exp(-0.75*y(

2、i)2-3.75*x(j)2-1.5*x(j);elseif x(j)+y(i)=-1 z(i,j)=0.5457*exp(-0.75*y(i)2-3.75*x(j)2+1.5*x(j);else z(i,j)=0.7575*exp(-y(i)2-6*x(j)2);end endendaxis(-a,a,-b,b,min(min(z),max(max(z);colormap(flipud(winter);surf(x,y,z);7.2 MATLAB 控制流7.2.1 for循环结构语法形式:for x=array(commands)endfor i=1:10;x(i)=i;end;7.2.2

3、while循环结构语法形式:while expression(commands)endi=1;while i eps*b x=(a+b)/2;fx=x3-2*x-5;if sign(fx)=sign(fa)a=x;fa=fx;else b=x;fb=fx;endendx7.2.3 if-else-end分支(1)if 表达式执行语句end功能:如果表达式的值为真,就执行语句,否则执行end后面的语句。(2)if 表达式执行语句1else执行语句2end 功能:如果表达式的值为真,就执行语句1,否则执行语句2。(3)if 表达式1执行语句1 elseif 表达式2执行语句2 else语句n en

4、d 功能:如果表达式1的值为真,就执行语句1,然后跳出if执行语句;否则判断表达式2,如果表达式2的值为真,就执行语句2,然后跳出if执行语句.否则依此类推,一直进行下去。如果所有的表达式的值都为假,就执行end后面的语句。7.2.4 switch-case 结构Switch语句的形式为:switch 表达式 case 常量表达式1 语句块1 case 常量表达式2 语句块2 case 常量表达式n,常量表达式n+1,语句块notherwise语句块n+1end功能:switch语句后面的表达式可以为任何类型;每个case后面的常量表达式可以是多个,也可以是不同类型;与if语句不同的是,各个c

5、ase 和otherwise 语句出现的先后顺序不会影响程序运行的结果。例:编一个转换成绩等级的函数文件,其中成绩等级转换标准为考试成绩分数在90,100分显示优秀;在80,90)分显示良好;在60,80)分显示及格;在0,60)分显示不及格。function result=ff(x)n=fix(x/10);switch n case 9,10 disp(优秀)case 8 disp(良好)case 6,7 disp(及格)otherwise disp(不及格)end语法结构try(commands1)catch(commands2)end说明:v只有当matlab在执行组命令1时出现了错误后

6、,组命令2才会被执行v可调用lasterr函数查询出错原因v当执行组命令2时又出错,matlab将终止该结构7.2.5 try-catch结构例 对(3 3)魔方阵的行进行援引,当“行下标”超出魔方阵的最大行数时,将改向对最后一行的援引,并显示“出错”警告。clear,N=4;A=magic(3);tryA_N=A(N,:)catchA_end=A(end,:)endlasterr7.2.6 控制程序流的其它常用指令v1 return指令通常,当被调函数执行完后,matlab会自动地把控制转至主调函数或者指令窗。如果在被调函数中插入了return指令,可以强制matlab结束执行该函数并把控制

7、转出。2 input和keyboard指令(1)inputinput指令将matlab的“控制权”暂时交给用户。此后,用户通过键盘键入数值、字符串或者表达式,并经“回车”把键入内容输入工作空间,同时把“控制权”交还给matlab。格式:v=input(message)将用户键入的内容赋给变量vv=input(message,s)将用户键入的内容作为字符串赋给变量v说明:v指令中message是将显示在屏幕上的字符串,是必不可少的v对于第一种调用格式,用户可以输入数值、字符串、元胞数组等各种形式的数据。v对于第二种调用格式,不管键入什么,总以字符串形式赋给变量v。(2)keyboard指令当程序

8、遇到keyboard时,matlab将“控制权”交给键盘,用户可以从键盘输入各种合法的matlab指令,只有当用户使用return指令结束输入后,“控制权”才交还给程序。(3)pause指令pause暂停执行文件,等待用户按任意键继续。pause(n)在继续执行之前,暂停n秒(4)break指令break指令可以导致包含有该指令的while、for等指令终止。常用的警示指令:verror(message)显示出错信息message,终止程序。verrortrap 错误发生后,程序继续执行与否的双位开关。vlasterr 显示matlab自动判断的最新出错原因并终止程序。vwarning(mes

9、sage)显示警告信息message,程序继续运行。vlastwarn 显示matlab自动给出的最新警告,程序继续运行。(5)error和warning指令7.3 脚本文件和函数文件7.3.1 M脚本文件M脚本文件特点:v它只是一串按用户意图排列而成的matlab指令集合。v脚本文件运行后,所产生的所有变量都驻留在matlab基本工作空间中。7.3.2 M函数文件与脚本文件不同,函数文件犹如一个“黑箱”,它的特点:v从形式上看,与脚本文件不同,函数文件的第一行总是以“function”引导的函数申明行。vmatlab允许使用比“标称数目”较少的输入输出参数,实现对函数的调用。v从运行上看,中

10、间变量都存在在临时工作空间。v在matlab整个运行期间,可以产生任意多个临时函数空间。v假如在函数文件中,发生对某脚本文件的调用,那么该脚本文件运行产生的所有变量都存放于函数空间之中,而不是存放在基本空间。7.3.3 局部变量和全局变量(1)局部(local)变量存在于函数空间内部的中间变量,产生于该函数的运行过程中,其影响范围仅限于该函数本身。(2)全局(Global)变量通过global指令,matlab允许几个不同的函数空间以及基本工作空间共享同一个变量,这种被共享的变量称为全局变量。说明:v没采用global定义的函数或基本工作空间,将无权享用全局变量。v除非与全局变量联系的所有工作

11、空间都被删除,否则全局变量依然存在。v对全局变量的定义必须在该变量被使用之前进行。建议把全局变量的定义放在函数体的首行位置。v建议选用大写字符命名全局变量v不提倡使用全局变量。7.3.4 M文件的一般结构演示:(A)编写一个画任意半径任意色彩线型的圆。(B)完整函数文件的基本结构。(C)函数文件各基本组成部分的作用。(参看lesson7-1)M 函数文件的结构如下:v函数申明行vH1行(The first help text line)v在线帮助文本(help text)区v编写和修改记录v函数体7.3.5 P码文件1、语法分析过程和伪代码一个M文件首次被调用时,matlab将首先对该M文件进

12、行语法分析,并把生成的相应内部伪代码文件存放在内存中。Matlab的分析器总是把M文件连同被它调用的所有函数M文件一起变成P码文件形式:文件名相同,扩展名是”.p”2、P码文件的预生成P码文件可以被预先生成pcode FunName在当前目录上生成FunName.ppcode FunName-inplace在FunName.m所在目录上生成FunName.pP码文件的优点:v运行速度快;v程序保密性好;3、内存中P码文件的列表和清除inmem罗列出内存中所有P码文件名clear FunName清除内存中的FunName.pP码文件clear functions清除内存中的所有P码文件7.3.6

13、 Matlab 的搜索过程假设Matlab在一个文件中碰到指令cow时,它将按以下步骤进行检索。(1)检查cow是否一个变量名;如果不是,执行下一步。(2)检查cow是不是内建函数(Built-in Function);假如不是,执行下一步。(3)检查cow是不是cow所在的M文件中的一个子函数;假如不是,再往下执行。(4)检查cow是不是cow所在的M文件中的一个私有函数;假如不是,在往下执行。(5)检查cow是不是当前目录上的文件;假如不是,再往下执行。(6)检查搜索路径上是否有cow存在。7.4 变量的检测传递和限权使用函数7.4.1 输入输出宗量检测指令nargin在函数体内,用于获取

14、实际输入参数nargout在函数体内,用于获取实际输出参数nargin(fun)获取fun指定函数的标称输入参数个数nargout(fun)获取fun指定函数的标称输出参数个数inputname(n)在函数体内使用,给出第n个输入参数的实际调用变量名7.4.2“变长度”输入输出参数varargin“变长度”输入参数列表varargout“变长度”输出参数列表例 编写程序,画两个同心圆环,其中一个半径由独立输入参数定义,另一个由变长度输入参数的第一个参数定义,可以用任何指定的色彩,线型绘制;(lesson7_2)有输出情况r1=1;r2=3;x1,y1,x2,y2,s1,s2=lesson7_2

15、(r1);x1,y1,x2,y2=lesson7_2(r1,r2);x1,y1,x2,y2,s1,s2=lesson7_2(r1,r2);无输出情况r1=1;r2=0.6;subplot(1,3,1),lesson7_2(r1,r2);subplot(1,3,2),lesson7_2(r1,r2,Marker,o)subplot(1,3,3);lesson7_2(r1,r2,LineWidth,5,Color,1 0.4 0)7.4.3 跨空间变量传递1、跨空间计算串表达式的值evalin(workspace,expression)跨空间计算表达式值evalin(workspace,expre

16、ssion1,expression2)跨空间计算替代串表达式值例 编写绘制正多边形或圆的程序。(lesson7_3)clear,a=30;t=(0:a)/a*2*pi;sss=base,caller,self;for k=1:3y0=lesson7_3(8,sssk);subplot(1,3,k)plot(real(y0),imag(y0),r,LineWidth,3),axis square imageend2、跨空间赋值assignin(workspace,VN,x)跨空间向VN变量赋值lesson7_4.mfunction y=lesson7_4(x)y=sqrt(x);t=x2;ass

17、ignin(base,yy,t)7.4.4 子函数和私用函数1、子函数matlab允许1个M函数文件包含多个函数的代码。其中,第一个出现的称为主函数,该文件中其他的函数则称为子函数。保存时所用函数文件名与主函数定义名相同。外部程序只能对主函数进行调用。子函数性质:v每个子函数的第一行是其自己的函数申明行v在M函数文件内,主函数的位置不可改变,但子函数的排列次序可以任意改变v子函数只能被处于同一文件的主函数或其他子函数调用v在M函数文件中,任何指令通过“名字”对函数进行调用时,子函数的优先级仅次于内装函数v同一文件的主函数、子函数的工作空间都是彼此独立的。2、私有函数所谓私用函数,是指位于pri

18、vate目录上的M文件函数,性质:v私用函数的构造与普通M函数完全相同v私用函数只能被private直接父目录上的M文件所调用,而不能被其他目录上的任何M文件或matlab指令窗中的命令所调用vM文件中,任何指令通过“名字”对函数进行调用时,私用函数的优先级虽低于内装函数和子函数,但高于其他任何目录上的函数。7.5 串演算函数为了提高计算的灵活性,matlab提供一种利用字符串进行计算的能力。7.5.1 evaly=eval(CEM)执行CEM指定的计算;y=eval(CEM1,CEM2)先执行CEM1指定的计算,如果出错,就执行CEM2y1,y2,=eval(CEM)执行CEM代表的函数文件

19、调用,并输出计算结果。说明veval指令的输入参数必须是字符串v构成字符串的CEM,可以是matlab任何合法的指 令、表达式、语句或M文件名v第3种格式种的CEM只能是M函数文件名。例 计算“表达式”串,产生向量值。clear,t=pi;cem=t/2,t*2,sin(t);y=eval(cem)例 计算“语句”串,创建变量。clear,t=pi;eval(theta=t/2,y=sin(theta);who例 计算“替代”串。A=ones(2,1);B=ones(1,3);c=eval(B*A,A*B);errmessage=lasterr例 计算“合成”串。CEM=cos,sin,tan

20、;for k=1:3theta=pi*k/12;y(1,k)=eval(CEM1,(,num2str(theta),);end7.5.2 fevaly1,y2,=feval(FN,arg1,arg2,)用参量arg1,arg2等执行FN函数指定的计算。说明:vFN只能是函数名。v在既可以使用eval,又可以使用feval的情况下,feval运行效率更高。feval 和eval 运行区别:feval 的FN 绝对不能是表达式x=pi/4;Ve=eval(1+sin(x)Vf=feval(1+sin(x),x)feval 和eval 调用区别:feval 的FN 只接受函数名。randn(seed

21、,1);A=rand(2,2);ue,de,ve=eval(svd(A);disp(Results by eval);disp(ue,de,ve);disp(blanks(1)uf,df,vf=feval(svd,A);disp(Results by feval);disp(uf,df,vf)7.5.3 内联函数1、内联函数的创建inline(CE)把串表达式转化为输入参数自动生成的内联函数;inline(CE,arg1,arg2,)把串表达式转化为arg1,arg2等指定输入参数的内联函数;inline(CE,n)把串表达式转化为x,P1,P2,Pn等指定输入参数的内联函数2、涉及内联函数性

22、质的指令class(inline_fun)给出内联函数类型char(inline_fun)给出内联函数计算公式;argnames(inline_fun)给出内联函数的输入参数vectorize(inline_fun)使用内联函数适用”数组运算”规则。3、内联函数创建和应用示例内联函数的第一种创建格式适于“数组运算”。clear,F1=inline(sin(rho)/rho);f1=F1(2);FF1=vectorize(F1);xx=0.5,1,1.5,2;ff1=FF1(xx);第一种内联函数创建格式的缺陷;含向量的多宗量输入的赋值。G1=inline(a*exp(x(1)*cos(x(2)

23、,G1(2,-1,pi/3);G2=inline(a*exp(x(1)*cos(x(2),a,x),G2(2,-1,pi/3)产生向量输入、向量输出的内联函数;Y2=inline(x(1)2;3*x(1)*sin(x(2)argnames(Y2)x=4,pi/6;y2=Y2(x)最简练格式创建内联函数;内联函数可被feval 指令调用Z2=inline(P1*x*sin(x2+P2),2)z2=Z2(2,2,3)fz2=feval(Z2,2,2,3)7.6 面向对象编程1、类和对象类名含义cell元胞数组char字符串数组double双精度数值数组sparse稀疏矩阵struct构架数组mat

24、lab内装类2、新类应包含的基本内容(1)创建类目录(2)选定待建类的数据结构(3)对象构造函数(4)显示函数(5)与其他类之间的转换函数(6)其他重载函数和重载运算(参见queue类)(1)创建一个队列对象,并显示qe=Hello!你好!;Q=queue(qe)(2)类别检查和对象判断class(Q)isobject(Q)isa(Q,queue)(3)“空”队列判断isempty(Q)(4)利用“入队”函数,使队列变长a=1,2,3;4,5,6;b1=This;b2=is;b3=a cell array;comein(Q,a,b)(5)显示队列Q中具体元素的内容display(Q,2)(6)

25、把Q队列第一个元素和其余部分分离,并生成新队列QQnn,vv,QQ=goout(Q)(7)采用双下标法,显示QQ(1,2)的内容display(QQ,1,1),display(QQ,1,2)3、继承性及其应用class函数class(VN)返回变量VN的类别名字符串;V_obj=class(VS,ClassName)把构架VS定义为ClassName类数据对象;V_obj=class(VS,SubClassName,Parent1,Parent2,)把构架VS定义为Parent1,Parent2等父类的SubClassName子类对象。(1)堆栈对象的创建AA=继承性;ST=stack(AA)

26、(2)类别检查class(ST)isa(ST,stack)isa(ST,queue)(3)“空”堆栈判断isempty(ST)(4)把元素压入堆栈BB=1:6;CC=sym(x2+4*x);comein(ST,BB,CC);(5)显示堆栈中第三元素的内容display(ST,3)(6)从堆栈弹出元素Name1,Value1,ST_1=goout(ST)1、利用for循环找出100200 之间的所有素数。(rem(m,i)练习题disp(100200 之间的所有素数为:)for m=100:200 k=fix(sqrt(m);%求m的算术平方根然后取整.for i=2:k+1 if rem(m,i)=0%求整数m与i的余数 break;end end if i=k+1 disp(int2str(m)%以字符串的形式显示素数.end end

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(文件和面向对象编程汇总课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|