【例
7.3.4-1】学生的成绩管理,用来演示switch结构的应用。
% 元胞数组 与 结构数组
的结合
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='不及格';
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
满分
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[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.1.1
“变长度”输入输出宗量
【例7.5.2-1】变长度宗量使用示例。
(1)
[exm07052_1.m]
function varargout =
exm07052_1(r,varargin)
%RINGZY
Plot a ring and calculate the area of the ring.
%
%
vin=length(varargin);Nin=vin+1;%
<11>
error(nargchk(1,Nin,nargin))
%
if nargout>6
%
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=varargin{1};
%<22>
x2=r2*exp(i*t);
plot(x,'b');hold on
;plot(x2,'b');hold
off
otherwise
r2=varargin{1};
%<26>
x2=r2*exp(i*t);
plot(x,varargin{2:end});hold on
%
<28>
plot(x2,varargin{2:end});hold off
%
<29>
end;
axis('square')
else
varargout{1}=real(x);varargout{2}=imag(x);
%<33>
varargout{5}=pi*r*r;varargout{6}=[];
%<34>
if Nin>1
r2=varargin{1};
%<36>
x2=r2*exp(i*t);
varargout{3}=real(x2);varargout{4}=imag(x2);
%<38>
varargout{6}=pi*(r^2-r2^2);
%<39>
end;
end
(2)
r1=1;r2=3;
[x1,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),
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])
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
7.1.1
函数句柄的创建和观察
【例
7.7.1-1】为MATLAB的“内建”函数创建函数句柄,并观察其内涵。
(1)
(2)
size(hsin)
function_handle
ans =
1
1
(3)
function: 'sin'
type: 'overloaded'
file: 'MATLAB built-in function'
methods: [1x1
struct]
本例通过函数及其句柄演示若干基本用法。
(1)
(2)
yfold=feval_r('sin',pi/4)
yfnew=feval_r(fhandle,pi/4)
0.7071
yfold =
0.7071
yfnew =
0.7071
(3)
yss=sin(Alpha)
yfold=feval_r('sin',Alpha)
ynews=feval_r('sin',Alpha)
1/2*2^(1/2)
yfold =
1/2*2^(1/2)
ynews =
1/2*2^(1/2)
(4)
xnew=fminbnd(fhandle,0,2*pi)
4.7124
xnew =
4.7124