没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
第七章 M 文件和面向对象编程
假如读者想灵活运用 MATLAB 去解决实际问题,想充分调动 MATLAB——科学技术
资源,想理解 MATLAB 版本升级所依仗的基础,那么本章内容将十分有用。
本章将涉及比较深层的 MATLAB 内容:脚本;函数(一般函数、内联函数、子函数、
私用函数、方法函数);函数句柄的创建和使用;程序调试和剖析;数据结构(类、对象);
重载和继承;面向对象编程。本章配备了许多精心设计的算例。这些算例是完整的,可直
接演练的。读者通过这些算例,将真切感受到抽象概念的内涵、各指令间的协调,将从感
知上领悟到面向对象编程的优越和至关要领。
本章新增了第 7.7 节,专门阐述函数句柄的创建和使用,它适用于MATLAB6.x 版;而
新增的第 7.9.3 节中关于程序性能优化的内容,则仅适用于 MATLAB6.5 以后版。
7.1 入门
【例 7.1-1】通过 M 脚本文件,画出下列分段函数所表示的曲面。
0.5457e
0.75x
2
3.75x
1
1.5x
1
x
1
x
2
1
2 2
p(x
1
, x
2
)
0.7575e
x
2
6 x
1
1 x
1
x
2
1
0.75 x
2
2
3.75x
1
2
1.5 x
1
0.5457e x
1
x
2
1
(1)
2 2
图 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)+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));
<2>
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);
(2)
exm0701_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 规则:
a
k 2
a
k
a
k 1
,
(k 1,2, )
;
且
a
1
a
2
1
。现要求该数组中第一个大于 10000 的元素。
a(1)=1;a(2)=1;i=2;
while a(i)<=10000
a(i+1)=a(i-1)+a(i);
i=i+1;
end;
2
i,a(i),
i =
21
ans =
10946
7.3.3 if-else-end 分支结构
【例 7.3.3-1】一个简单的分支结构。
cost=10;number=12;
if number>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;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);
%
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
end
end
%
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 结构应用实例:对
(3 3)
魔方阵的行进行援引,当“行下标”超出
魔方阵的最大行数时,将改向对最后一行的援引,并显示“出错”警告。
clear,N=4;A=magic(3);
try
A_N=A(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
7.4.2 M 函数文件
7.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 nargin>2
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)
end
axis('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
剩余24页未读,继续阅读
资源评论
苦茶子12138
- 粉丝: 1w+
- 资源: 7万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功