一、函数和子函数
一个M文件中,可能会有多个函数,其中第一个称为主函数,后面的所有函数称为子函数
脚本文件中,也可以直接在脚本的最后添加子函数,在当前文件夹内,如果有同名函数,按照子函数MATLAB内建函数其他M文件主函数的顺序访问。子函数最后的
end
不能省略一个M文件的主函数通常和M文件名相同(否则MATLAB仍以文件名主名作为识别标准),一个M包含多个函数时,每个函数最后的
end
或者都省略掉,或者都不省略。所有的子函数都可以被M文件内的脚本或主函数调用,但无法被其他M文件或命令行直接调用。因此,子函数是一种减少M文件数量,封装外部脚本不直接调用的函数的好方法。
1. 子函数
编写一个内含子函数的M函数绘图文件
HC = Draw_d('circle');
HL = Draw_d('line');
function Hr = Draw_d(flag)
% exm060301.m Demo for handles of primary functions and subfunctions
% flag %允许使用字符串’line’或’circle’
% Hr %返回子函数cirline的句柄
t = (0:50)/50*2*pi; %0~2pi等分了50个区间
x = sin(t);
y = cos(t);
Hr = @cirline; %创建cirline的句柄(一种函数名的不同解读,类似于C++的指针)
feval(Hr, flag, x, y, t); %feval结合句柄调用,等价于cirline(flag,x,y,t)
end
function cirline(wd, x, y, t)
% wd %主函数传递来的flag,可能为’line’或’circle’
% t,x,y %分别为绘图参数、横坐标与纵坐标
switch wd
case 'line'
plot(t, x, 'b', t, y, 'r', 'LineWidth', 2);
case 'circle'
plot(x, y, '-g', 'LineWidth', 8);
axis square off;
otherwise
error('输入变量只能取“line”或“circle”!')
end
shg
end
HC
的输出结果为:
HL
的输出结果为:
另外我们可以将t
的采样距离缩小,比如绘制正五边形采样点分布:
t=0:2*pi/5:2*pi;x=cos(t);y=sin(t);
HH('circle',x,y,t)
%利用m文件主函数返回的句柄可以间接调用到子