2022年2022年精通matlab.版.M文件和面向对象编程 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年2022年精通matlab.版.M文件和面向对象编程 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年精通matlab.版.M文件和面向对象编程 .pdf(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 第七章 M 文件和面向对象编程假如读者想灵活运用MATLAB去解决实际问题,想充分调动MATLAB 科学技术资源,想理解MATLAB版本升级所依仗的基础,那么本章内容将十分有用。本章将涉及比较深层的MATLAB内容:脚本;函数(一般函数、内联函数、子函数、私用函数、方法函数);函数句柄的创建和使用;程序调试和剖析;数据结构(类、对象);重载和继承;面向对象编程。本章配备了许多精心设计的算例。这些算例是完整的,可直接演练的。读者通过这些算例,将真切感受到抽象概念的内涵、各指令间的协调,将从感知上领悟到面向对象编程的优越和至关要领。本章新增了第7.7 节,专门阐述函数句柄的创建和使用,它适用于
2、MATLAB6.x版;而新增的第7.9.3 节中关于程序性能优化的内容,则仅适用于MATLAB6.5以后版。7.1 入门【例 7.1-1】通过 M 脚本文件,画出下列分段函数所表示的曲面。-+=+-15457.0117575.015457.0),(215.175.375.0216215.175.375.02112122212212122xxexxexxexxpxxxxxxxx(1)图 7.1-1 exm0701_1.m%exm0701_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)
3、+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 z(i,j)=0.5457*exp(-0.75*y(i)2-3.75*x(j)2+1.5*x(j);名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 25 页 -2 else z(i,j)=0.7575*exp(-y(i)2-6.*x(j)2);end end end axis(-a,a,-b,b,min(min(z),max(max(z);colormap(flipud(winter);surf(x,y,z);(2)exm070
4、1_1图 7.1-2 【例 7.1-2】通过 M 函数文件画出上例分段函数的曲面。exm0701_2(2,2)7.2 M 文本编辑器7.3 MATLAB控制流7.3.1 for 循环结构【例 7.3.1-1】一个简单的for 循环示例。for i=1:10;x(i)=i;end;x x=1 2 3 4 5 6 7 8 9 10 7.3.2 while 循环结构【例 7.3.2-1】Fibonacci 数组的元素满足Fibonacci 规则:12+=kkkaaa,),2,1(=k;且121=aa。现要求该数组中第一个大于10000 的元素。a(1)=1;a(2)=1;i=2;while a(i)
5、8 sums=number*0.95*cost;end,sums sums=114.0000【例 7.3.3-2】用 for 循环指令来寻求Fibonacc 数组中第一个大于10000 的元素。n=100;a=ones(1,n);for i=3:n a(i)=a(i-1)+a(i-2);if a(i)=10000 a(i),break;end;end,i ans=10946 i=21 7.3.4 switch-case 结构【例 7.3.4-1】学生的成绩管理,用来演示switch 结构的应用。clear;%for i=1:10;ai=89+i;bi=79+i;ci=69+i;di=59+i;
6、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:5 switch S(i).Marks case 100 S(i).Rank=满分;case a S(i).Rank=优秀;case b S(i).Rank=良好;case c S(i).Rank=及格;otherwise S(i).Rank=不及格;名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 25 页 -4 end end
7、%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.3.5 try-catch 结构【例7.3.5-1】try-catch 结构应用实例:对)33(魔方阵的行进行援引,当“行下标”超出魔方阵的最大行数时,将改向对最后一行的援引,并显示“出错”警告。clear,N=4;A=magic(3);try A_N=A
8、(N,:)catch A_end=A(end,:)end lasterr A_end=4 9 2 ans=Index exceeds matrix dimensions.7.3.6 控制程序流的其它常用指令7.3.6.1 return 指令7.3.6.2 input 和 keyboard 指令7.3.6.3 yesinput 指令7.3.6.4 pause指令7.3.6.5 break 指令7.3.6.6 error 和 warning 指令7.4 脚本文件和函数文件7.4.1 M 脚本文件名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 25 页 -5 7.4.2 M 函数文件7
9、.4.3 局部变量和全局变量7.4.4 M 文件的一般结构【例 7.4.4-1】M 函数文件示例。本例演示:(A)编写一个画任意半径任意色彩线型的圆。(B)完整函数文件的基本结构。(C)函数文件各基本组成部分的作用。exm07044_1.m function sa=exm07044_1(r,s)%CIRCLE%if nargin2 error(输入宗量太多。);end;if nargin=1 s=b;end;clf;t=0:pi/100:2*pi;x=r*exp(i*t);if nargout=0 plot(x,s);else sa=pi*r*r;fill(real(x),imag(x),s)
10、endaxis(square)7.4.5 P 码文件7.4.5.1 语法分析过程和伪代码7.4.5.2 P码文件的预生成7.4.5.3 内存中 P码文件的列表和清除7.4.6 MATLAB的搜索过程7.5 变量的检测传递和限权使用函数名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 25 页 -6 7.5.1 输入输出宗量检测指令7.5.2“变长度变长度”输入输出宗量【例 7.5.2-1】变长度宗量使用示例。(1)exm07052_1.m function varargout=exm07052_1(r,varargin)%RINGZY Plot a ring and calcula
11、te the area of the ring.%vin=length(varargin);Nin=vin+1;%error(nargchk(1,Nin,nargin)%if nargout6%error(Too many output arguments)end t=0:pi/20:2*pi;x=r*exp(i*t);s=pi*r*r;if nargout=0 switch Nin case 1 plot(x,b)case 2 r2=varargin1;%x2=r2*exp(i*t);plot(x,b);hold on;plot(x2,b);hold off otherwise r2=var
12、argin1;%x2=r2*exp(i*t);plot(x,varargin2:end);hold on%plot(x2,varargin2:end);hold off%end;axis(square)else varargout1=real(x);varargout2=imag(x);%varargout5=pi*r*r;varargout6=;%if Nin1 r2=varargin1;%x2=r2*exp(i*t);varargout3=real(x2);varargout4=imag(x2);%varargout6=pi*(r2-r22);%end;end (2)r1=1;r2=3;x
13、1,y1,x2,y2,s1,s2=exm07052_1(r1);x1,y1,x2,y2=exm07052_1(r1,r2);x1,y1,x2,y2,s1,s2=exm07052_1(r1,r2);(3)r1=1;r2=0.6;subplot(1,3,1),exm07052_1(r1,r2),名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 25 页 -7 subplot(1,3,2),exm07052_1(r1,r2,Marker,o)subplot(1,3,3),exm07052_1(r1,r2,LineWidth,5,Color,1 0.4 0)-101-1-0.500.51-
14、101-1-0.500.51-101-1-0.500.51图 7.5-1 7.5.3 跨空间变量传递7.5.3.1 跨空间计算串表达式的值【例 7.5.3.1-1】本例演示:(A)编写绘制正多边形或圆的程序。(B)子函数与(母)函数的关系。(C)各种不同的工作空间。(D)evalin 运行机理与eval 的异同。(1)exm070531_1.m functiony1=exm070531_1(a,s)t=(0:a)/a*2*pi;y1=subevalinzzy(4,s);%-subfunction -function y2=subevalinzzy(a,s)t=(0:a)/a*2*pi;ss=a
15、*exp(i*t);switch s case base,caller y2=evalin(s,ss);case self y2=eval(ss);end(2)clear,a=30;t=(0:a)/a*2*pi;sss=base,caller,self;for k=1:3 y0=exm070531_1(8,sssk);subplot(1,3,k)plot(real(y0),imag(y0),r,LineWidth,3),axis square image end 名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 25 页 -8-20020-20-1001020-505-505-4-
16、2024-4-2024图 7.5-2 7.5.3.2 跨空间赋值【例 7.5.3.2-1】assignin 运作机理示范。(1)exm070532_1.m function y=exm070532_1(x)y=sqrt(x);t=x2;assignin(base,yy,t)(2)clear;x=4;y=exm070532_1(x);disp(blanks(5),x,blanks(5),y,blanks(4),yy),disp(x,y,yy)x y yy 4 2 167.5.4 子函数和私用函数7.5.4.1 子函数7.5.4.2 私用函数7.6 串演算函数7.6.1 eval【例 7.6.1-
17、1】计算“表达式”串,产生向量值。clear,t=pi;cem=t/2,t*2,sin(t);y=eval(cem)y=1.5708 6.2832 0.0000【例 7.6.1-2】计算“语句”串,创建变量。clear,t=pi;eval(theta=t/2,y=sin(theta);who theta=1.5708 y=1 名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 25 页 -9 Your variables are:t theta y 【例 7.6.1-3】计算“替代”串。A=ones(2,1);B=ones(1,3);c=eval(B*A,A*B),errmessag
18、e=lasterr c=1 1 1 1 1 1 errmessage=Error using=*Inner matrix dimensions must agree.【例 7.6.1-4】计算“合成”串。CEM=cos,sin,tan;for k=1:3 theta=pi*k/12;y(1,k)=eval(CEM1,(,num2str(theta),);end y y=0.9659 0.8660 0.7071 7.6.2 feval【例 7.6.2-1】feval 和 eval 运行区别之一:feval 的 FN 绝对不能是表达式。x=pi/4;Ve=eval(1+sin(x)Ve=1.707
19、1 Vf=feval(1+sin(x),x)?Error using=feval Invalid function name 1+sin(x).【例 7.6.2-2】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,A);disp(Results by feval);disp(uf,df,vf)Results by e
20、val -0.9193 -0.3936 1.2212 0 -0.7897 -0.6135 -0.3936 0.9193 0 0.2633 -0.6135 0.7897 Results by feval -0.9193 -0.3936 1.2212 0 -0.7897 -0.6135 -0.3936 0.9193 0 0.2633 -0.6135 0.7897 7.6.3 内联函数7.6.3.1 内联函数的创建7.6.3.2 涉及内联函数性质的指令名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 25 页 -10 7.6.3.3 内联函数创建和应用示例【例 7.6.3.3-1】演示:
21、内联函数的第一种创建格式;使内联函数适于“数组运算”。clear,F1=inline(sin(rho)/rho)F1=Inline function:F1(rho)=sin(rho)/rho f1=F1(2)f1=0.4546 FF1=vectorize(F1)xx=0.5,1,1.5,2;ff1=FF1(xx)FF1=Inline function:FF1(rho)=sin(rho)./rho ff1=0.9589 0.8415 0.6650 0.4546【例 7.6.3.3-2】演示:第一种内联函数创建格式的缺陷;含向量的多宗量输入的赋值。G1=inline(a*exp(x(1)*cos(
22、x(2),G1(2,-1,pi/3)G1=Inline function:G1(a)=a*exp(x(1)*cos(x(2)?Error using=inline/subsref Too many inputs to inline function.G2=inline(a*exp(x(1)*cos(x(2),a,x),G2(2,-1,pi/3)G2=Inline function:G2(a,x)=a*exp(x(1)*cos(x(2)ans=0.3679【例 7.6.3.3-3】演示:产生向量输入、向量输出的内联函数;这种向量函数的调用方法。Y2=inline(x(1)2;3*x(1)*sin
23、(x(2)argnames(Y2)Y2=Inline function:Y2(x)=x(1)2;3*x(1)*sin(x(2)ans=x x=4,pi/6;y2=Y2(x)y2=16.0000 6.0000【例 7.6.3.3-4】演示:最简练格式创建内联函数;内联函数可被feval 指令调用。Z2=inline(P1*x*sin(x2+P2),2)Z2=Inline function:Z2(x,P1,P2)=P1*x*sin(x2+P2)z2=Z2(2,2,3)fz2=feval(Z2,2,2,3)z2=2.6279 fz2=2.6279名师资料总结-精品资料欢迎下载-名师精心整理-第 10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年精通matlab.版.M文件和面向对象编程 2022 精通 matlab 文件 和面 对象 编程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内