版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第七章 M 文件和面向对象编程脚本;函数;函数句柄的创建和使用;程序调试和剖析;数据结构(类、对象);重载和继承;面向对象编程内容:第七章 M 文件和面向对象编程脚本;内容:7.1 入门通过M脚本文件,画出下列分段函数所表示的曲面。7.1 入门通过M脚本文件,画出下列分段函数所表示的曲面。a=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(i)2-3.75*x(j)2-1.5*x(j); elseif x(j)+y(i)=-1
2、 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);a=2;b=2; clf;7.2 MATLAB 控制流7.2.1 for循环结构语法形式:for x=array(commands)endfor i=1:10;x(i)=i;end;7.2 MATLAB 控制流7.2.1 for循环结构7.2.2 w
3、hile循环结构语法形式: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; endendxa = 0; fa = -Inf;7.2.3 if-else-end分支(1)if 表达式执行语句end功能:如果表达式的值为真,就执行语句,否则执行end后面的语句。7.2.3 if-else-end分支(1)if 表达式(2)if 表达式执行语句1else执行语句2end 功能:如果表
4、达式的值为真,就执行语句1,否则执行语句2。(2)if 表达式(3)if 表达式1执行语句1 elseif 表达式2执行语句2 else语句n end 功能:如果表达式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,
5、语句块notherwise语句块n+1end7.2.4 switch-case 结构Switch语句的形功能:switch语句后面的表达式可以为任何类型;每个case后面的常量表达式可以是多个,也可以是不同类型;与if语句不同的是,各个case 和otherwise 语句出现的先后顺序不会影响程序运行的结果。功能:例: 编一个转换成绩等级的函数文件,其中成绩等级转换标准为考试成绩分数在90,100分显示优秀;在80,90)分显示良好;在60,80)分显示及格;在0,60)分显示不及格。例: 编一个转换成绩等级的函数文件,其中成绩等级转换标准为考function result=ff(x) n=f
6、ix(x/10); switch n case 9,10 disp(优秀) case 8 disp(良好)case 6,7 disp(及格)otherwise disp(不及格)endfunction result=ff(x)语法结构try(commands1)catch(commands2)end说明:只有当matlab在执行组命令1时出现了错误后,组命令2才会被执行可调用lasterr函数查询出错原因当执行组命令2时又出错,matlab将终止该结构7.2.5 try-catch结构语法结构7.2.5 try-catch结构例 对(3 3) 魔方阵的行进行援引,当“行下标”超出魔方阵的最大行
7、数时,将改向对最后一行的援引,并显示“出错”警告。clear,N=4;A=magic(3);tryA_N=A(N,:)catchA_end=A(end,:)endlasterr例 对(3 3) 魔方阵的行进行援引,当“行下标”超出魔7.2.6 控制程序流的其它常用指令1 return指令通常,当被调函数执行完后,matlab会自动地把控制转至主调函数或者指令窗。如果在被调函数中插入了return指令,可以强制matlab结束执行该函数并把控制转出。7.2.6 控制程序流的其它常用指令1 return指令2 input和keyboard指令(1)inputinput指令将matlab的“控制权”
8、暂时交给用户。此后,用户通过键盘键入数值、字符串或者表达式,并经“回车”把键入内容输入工作空间,同时把“控制权”交还给matlab。2 input和keyboard指令(1)input格式:v=input(message) 将用户键入的内容赋给变量vv=input(message,s)将用户键入的内容作为字符串赋给变量v说明:指令中message是将显示在屏幕上的字符串,是必不可少的对于第一种调用格式,用户可以输入数值、字符串、元胞数组等各种形式的数据。对于第二种调用格式,不管键入什么,总以字符串形式赋给变量v。格式:(2)keyboard指令当程序遇到keyboard时,matlab将“控制
9、权”交给键盘,用户可以从键盘输入各种合法的matlab指令,只有当用户使用return指令结束输入后,“控制权”才交还给程序。(3)pause指令pause暂停执行文件,等待用户按任意键继续。pause(n)在继续执行之前,暂停n秒(4)break指令break指令可以导致包含有该指令的while、for等指令终止。(2)keyboard指令当程序遇到keyboard时,m常用的警示指令:error(message)显示出错信息message,终止程序。errortrap 错误发生后,程序继续执行与否的双位开关。lasterr 显示matlab自动判断的最新出错原因并终止程序。warning(
10、message)显示警告信息message,程序继续运行。lastwarn 显示matlab自动给出的最新警告,程序继续运行。(5)error和warning指令常用的警示指令:(5)error和warning指令7.3 脚本文件和函数文件7.3.1 M脚本文件M脚本文件特点:它只是一串按用户意图排列而成的matlab指令集合。脚本文件运行后,所产生的所有变量都驻留在matlab基本工作空间中。7.3 脚本文件和函数文件7.3.1 M脚本文件7.3.2 M函数文件与脚本文件不同,函数文件犹如一个“黑箱”,它的特点:从形式上看,与脚本文件不同,函数文件的第一行总是以“function”引导的函数
11、申明行。matlab允许使用比“标称数目”较少的输入输出参数,实现对函数的调用。从运行上看,中间变量都存在在临时工作空间。在matlab整个运行期间,可以产生任意多个临时函数空间。假如在函数文件中,发生对某脚本文件的调用,那么该脚本文件运行产生的所有变量都存放于函数空间之中,而不是存放在基本空间。7.3.2 M函数文件与脚本文件不同,函数文件犹如一个“黑箱7.3.3 局部变量和全局变量(1)局部(local)变量存在于函数空间内部的中间变量,产生于该函数的运行过程中,其影响范围仅限于该函数本身。(2)全局(Global)变量通过global指令,matlab允许几个不同的函数空间以及基本工作空
12、间共享同一个变量,这种被共享的变量称为全局变量。7.3.3 局部变量和全局变量(1)局部(local)变量说明:没采用global定义的函数或基本工作空间,将无权享用全局变量。除非与全局变量联系的所有工作空间都被删除,否则全局变量依然存在。对全局变量的定义必须在该变量被使用之前进行。建议把全局变量的定义放在函数体的首行位置。建议选用大写字符命名全局变量不提倡使用全局变量。说明:7.3.4 M文件的一般结构演示:(A)编写一个画任意半径任意色彩线型的圆。(B)完整函数文件的基本结构。(C)函数文件各基本组成部分的作用。(参看lesson7-1)7.3.4 M文件的一般结构演示:M 函数文件的结构
13、如下:函数申明行H1行(The first help text line)在线帮助文本(help text)区编写和修改记录函数体M 函数文件的结构如下:7.3.5 P码文件1、语法分析过程和伪代码一个M文件首次被调用时,matlab将首先对该M文件进行语法分析,并把生成的相应内部伪代码文件存放在内存中。Matlab的分析器总是把M文件连同被它调用的所有函数M文件一起变成P码文件形式:文件名相同,扩展名是”.p”7.3.5 P码文件1、语法分析过程和伪代码2、P码文件的预生成P码文件可以被预先生成pcode FunName在当前目录上生成FunName.ppcode FunName -inpl
14、ace在FunName.m所在目录上生成FunName.pP码文件的优点:运行速度快;程序保密性好;2、P码文件的预生成P码文件可以被预先生成3、内存中P码文件的列表和清除inmem罗列出内存中所有P码文件名clear FunName清除内存中的FunName.pP码文件clear functions清除内存中的所有P码文件3、内存中P码文件的列表和清除inmem7.3.6 Matlab 的搜索过程假设Matlab在一个文件中碰到指令cow时,它将按以下步骤进行检索。(1)检查cow是否一个变量名;如果不是,执行下一步。(2)检查cow是不是内建函数(Built-in Function);假如
15、不是,执行下一步。(3)检查cow是不是cow所在的M文件中的一个子函数;假如不是,再往下执行。(4)检查cow是不是cow所在的M文件中的一个私有函数;假如不是,在往下执行。(5)检查cow是不是当前目录上的文件;假如不是,再往下执行。(6)检查搜索路径上是否有cow存在。7.3.6 Matlab 的搜索过程假设Matlab在一个7.4 变量的检测传递和限权使用函数7.4.1 输入输出宗量检测指令nargin在函数体内,用于获取实际输入参数nargout在函数体内,用于获取实际输出参数nargin(fun)获取fun指定函数的标称输入参数个数nargout(fun)获取fun指定函数的标称输
16、出参数个数inputname(n)在函数体内使用,给出第n个输入参数的实际调用变量名7.4 变量的检测传递和限权使用函数7.4.1 输入输出宗7.4.2“变长度”输入输出参数varargin “变长度”输入参数列表varargout “变长度”输出参数列表例 编写程序,画两个同心圆环,其中一个半径由独立输入参数定义,另一个由变长度输入参数的第一个参数定义,可以用任何指定的色彩,线型绘制;(lesson7_2)7.4.2“变长度”输入输出参数varargin “变长度”有输出情况r1=1;r2=3;x1,y1,x2,y2,s1,s2=lesson7_2(r1);x1,y1,x2,y2=lesso
17、n7_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)有输出情况r1=1;r2=3;7.4.3 跨空间变量传递1、 跨空间计算串表达式的值evalin(workspace,expression)跨空间计算表达式值evalin(workspace,expression1
18、,expression2)跨空间计算替代串表达式值7.4.3 跨空间变量传递1、 跨空间计算串表达式的值例 编写绘制正多边形或圆的程序。(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 imageend例 编写绘制正多边形或圆的程序。(lesson7_3)cl2、跨空间赋值assignin(workspace,VN,x)跨空间向VN变量赋值le
19、sson7_4.mfunction y= lesson7_4(x)y=sqrt(x);t=x2;assignin(base,yy,t)2、跨空间赋值assignin(workspace,V7.4.4 子函数和私用函数1、子函数matlab允许1个M函数文件包含多个函数的代码。其中,第一个出现的称为主函数,该文件中其他的函数则称为子函数。保存时所用函数文件名与主函数定义名相同。外部程序只能对主函数进行调用。7.4.4 子函数和私用函数1、子函数子函数性质:每个子函数的第一行是其自己的函数申明行在M函数文件内,主函数的位置不可改变,但子函数的排列次序可以任意改变子函数只能被处于同一文件的主函数或其
20、他子函数调用在M函数文件中,任何指令通过“名字”对函数进行调用时,子函数的优先级仅次于内装函数同一文件的主函数、子函数的工作空间都是彼此独立的。子函数性质:2、私有函数所谓私用函数,是指位于private目录上的M文件函数,性质:私用函数的构造与普通M函数完全相同私用函数只能被private直接父目录上的M文件所调用,而不能被其他目录上的任何M文件或matlab指令窗中的命令所调用M文件中,任何指令通过“名字”对函数进行调用时,私用函数的优先级虽低于内装函数和子函数,但高于其他任何目录上的函数。2、私有函数所谓私用函数,是指位于private目录上的M7.5 串演算函数为了提高计算的灵活性,m
21、atlab提供一种利用字符串进行计算的能力。7.5.1 evaly=eval(CEM)执行CEM指定的计算;y=eval(CEM1,CEM2)先执行CEM1指定的计算,如果出错,就执行CEM2y1,y2,=eval(CEM)执行CEM代表的函数文件调用,并输出计算结果。7.5 串演算函数为了提高计算的灵活性,matlab提供一说明eval指令的输入参数必须是字符串构成字符串的CEM,可以是matlab任何合法的指 令、表达式、语句或M文件名第3种格式种的CEM只能是M函数文件名。例 计算“表达式”串,产生向量值。clear,t=pi;cem=t/2,t*2,sin(t);y=eval(cem)
22、说明eval指令的输入参数必须是字符串例 计算“语句”串,创建变量。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;for k=1:3theta=pi*k/12;y(1,k)=eval(CEM1,(,num2str(theta),);end例 计算“语句”串,创建变量。7.5.2 fevaly1,y2,=feval(FN,arg1,arg2,)用参量arg1,arg2等执行
23、FN函数指定的计算。说明:FN只能是函数名。在既可以使用eval,又可以使用feval的情况下,feval运行效率更高。7.5.2 fevalfeval 和eval 运行区别:feval 的FN 绝对不能是表达式x=pi/4;Ve=eval(1+sin(x)Vf=feval(1+sin(x),x)feval 和eval 调用区别:feval 的FN 只接受函数名。randn(seed,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,
24、A);disp(Results by feval);disp(uf,df,vf)feval 和eval 运行区别:feval 的FN 绝对不7.5.3 内联函数1、 内联函数的创建inline(CE)把串表达式转化为输入参数自动生成的内联函数;inline(CE,arg1,arg2,)把串表达式转化为arg1,arg2等指定输入参数的内联函数;inline(CE,n)把串表达式转化为x,P1,P2,Pn等指定输入参数的内联函数7.5.3 内联函数1、 内联函数的创建2、涉及内联函数性质的指令class(inline_fun)给出内联函数类型char(inline_fun)给出内联函数计算公式;
25、argnames(inline_fun)给出内联函数的输入参数vectorize(inline_fun)使用内联函数适用”数组运算”规则。2、涉及内联函数性质的指令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),G1(2,-1,pi/3);G2=inline(a*exp(x(1)*cos(x(
26、2),a,x),G2(2,-1,pi/3)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构架数组matlab内装类7.6 面向对象编程1、类和对象类名含义cell元胞数组c2、新类应包含的基本内容(1)创建类目录(2)选定待建类的数据结构(3)对象构造函数(4)显示函数(5)与其他类之间的转换函数(6)其他重载函数和重载运算(参见queue类)2、新类应包含的基本内容(1)创建类目录(1)创建一个队列对象,并显示qe=Hello! 你好 !;Q=queue(qe)(2)类别检查和对象判断class(Q)isobject(Q)isa(Q,queue)(3)“空”队列判断isempty(Q)(1)创建一个队列对象,并显示(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新员工培训奖惩管理办法
- 综合专项应急演练培训
- 预防普通感冒的措施
- 自制英语课件教学课件
- 神秘的宇宙培训宣传
- 第四章 曲线运动-教材实验5 探究平抛运动的特点 2025年高考物理基础专项复习
- 防台防汛安全教育培训
- 繁育员的年终总结
- 深度学习及自动驾驶应用 课件 第1、2章 汽车自动驾驶技术概述、深度学习基础
- 花样跳绳说课稿小学
- 高中政治课程标准解读 汇报课件
- 心身疾病-课件
- 物理名词解释
- 主要股东或出资人信息及投标人基本情况表模板
- 养老院 入住申请表
- 初中数学人教七年级上册 一元一次方程实际问题与一元一次方程-销售盈亏问题
- 西方经济学导论全套课件
- 树立正确的人生观
- 【审计工作底稿模板】SA营业收入
- 2022年《学习有方法教案》初中心理健康教育鲁画报社版六年级全一册教案
- 中学生安全教育优质实用课件(共54张PPT)
评论
0/150
提交评论