#【Matlab 简易教程】第八章 M文件和面向对象编程 下载本文

内容发布更新时间 : 2024/11/7 15:39:19星期一 下面是文章的全部内容请认真阅读。

Matlab 简易教程 8 M文件和面向对象编程

假如读者想灵活运用MATLAB去解决实际问题,想充分调动MATLAB——科学技术资源,想理解MATLAB版本升级所依仗的基础,那么本章内容将十分有用。 本章将涉及比较深层的MATLAB内容:脚本;函数(一般函数、内联函数、子函数、私用函数、方法函数);程序调试和剖析;数据结构(类、对象);重载和继承;面向对象编程。本章配备了许多精心设计的算例。这些算例是完整的,可直接演练的。读者通过这些算例,将真切感受到抽象概念的内涵、各指令间的协调,将从感知上领悟到面向对象编程的优越和至关要领。

8.1 入门

【*例8.1-1】通过M脚本文件,画出下列分段函数所表示的曲面。

?0.5457e?0.75x2?3.75x1?1.5x1x1?x2?1???x22?6x12p(x1,x2)??0.7575e?1?x1?x2?1

??0.75x22?3.75x12?1.5x10.5457ex1?x2??1??(1)编写M脚本文件的步骤

22图 8.1-1-1 MATLAB Editor/Debugger 窗口

? 点击MATLAB指令窗工具条上的New File图标 ,就可打开如图8.1-1-1所示的

MATLAB文件编辑调试器MATLAB Editor/Debugger。其窗口名为untitled ,用户即可在空白窗口中编写程序。比如输入如下一段程序 [zx81.m]

%zx81.m This is my first example. <1> a=2;b=2; % <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

z(i,j)=0.5457*exp(-0.75*y(i)^2-3.75*x(j)^2+1.5*x(j));

1

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);

? 点击编辑调试器工具条图标 ,在弹出的Windows标准风格的“保存为”对话框中,

选择保存文件夹,键入新编文件名(如zx81),点动【保存】键,就完成了文件保存。 (2)运行文件

? 使zx81.m所在目录成为当前目录,或让该目录处在MATLAB的搜索路径上 ? 然后运行以下指令,便可得到图形。

zx81

图 8.1-1-2 运行zx81.m得到的图形

【*例8.1-2】通过M函数文件画出上例分段函数的曲面。 整个编程步骤和相同。在此演示,如何在zx81.m基础上产生函数文件zx82.m 。

? 在编辑调试器中,选择【File:Save As】子菜单,把zx81.m文件“另存为”zx82.m 。 ? 用下面4行指令代替原文件的第<1><2>条指令。

function zx82(a , b)

% This is my second example. % a Define the limit of variable x . % b Define the limit of variable y .

? 进行上述修改后,对zx82.m再次实施“保存”操作。

? 在MATLAB指令窗中,运行以下指令,就能产生和图8.1-1-2完全相同的图形。

zx82(2,2)

8.2 M文本编辑器

8.2.1 利用文本编辑器编写M文件 8.2.2 【tools】菜单

8.3 MATLAB控制流

8.3.1 for循环结构

【*例8.3.1-1】一个简单的for循环示例。

for i=1:10;

%i依次取1,2,…10,.

2

x(i)=i; %对每个i值,重复执行由该指令构成的循环体, end;

x %要求显示运行后数组x的值。 x =

1 2 3 4 5 6 7 8 9 10

8.3.2 while循环结构

【*例8.3.2-1】Fibonacci数组的元素满足Fibonacci 规则:ak?2?ak?ak?1 ,(k?1,2,?);且a1?a2?1。现要求该数组中第一个大于10000的元素。

a(1)=1;a(2)=1;i=2; while a(i)<=10000 a(i+1)=a(i-1)+a(i); %当现有的元素仍小于10000时,求解下一个元素。 i=i+1; end;

i,a(i), i =

21 ans =

10946

8.3.3 if-else-end分支结构

【*例8.3.3-1】一个简单的分支结构。

cost=10;number=12; if number>8

sums=number*0.95*cost; end,sums sums =

114.0000

【*例8.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

8.3.4 switch-case结构

【*例8.3.4-1】学生的成绩管理,用来演示switch结构的使用。

clear;

%划分区域:满分(100),优秀(90-99),良好(80-89),及格(60-79),不及格(<60)。 for i=1:10;a{i}=89+i;b{i}=79+i;c{i}=69+i;d{i}=59+i;end;c=[d,c]; Name={' Jack','Marry','Peter',' Rose',' Tom'}; %元胞数组 Mark={72,83,56,94,100};Rank=cell(1,5); %创建一个含5个元素的构架数组S,它有三个域。

S=struct('Name',Name,'Marks',Mark,'Rank',Rank); %根据学生的分数,求出相应的等级。 for i=1:5

3