function [area,circum]= areacirc_d(varargin)% varargin 接收输入变量的值,参数数量不确定,存到元胞数组
rad = varargin{1};% 取出第一个元素值
if nargin ==2% nargin是已存在的隐藏变量,用于接收输入变量的个数,传入参数为一个,则nargin =1
unit = varargin{2};% 取出第二个元素值
if unit =='i'
rad = rad /12;
end
end
area = pi * rad .^2;
circum =2* pi * rad;
end
[area,circum]= areacirc_d(1);% 单位:英尺
[area,circum]= areacirc_d(1,'i');% 单位:英寸
function [area,circum]= areacirc_d(rad,varargin)% rad 确定的
% varargin 接收第二参数开始的输入变量的值,存到元胞数组
if nargin ==2% nargin是已存在的隐藏变量,用于接收输入变量的个数,传入参数为一个,则nargin =1
unit = varargin{1};% 取出第1个元素值
if unit =='i'
rad = rad /12;
end
end
area = pi * rad .^2;
circum =2* pi * rad;
end
[area,circum]= areacirc_d(1,'i');% 单位:英寸
41.可变长度输出参数列表、嵌套函数
41.可变长度输出参数列表、嵌套函数
function [type,varargout]= typesize(M)% varargout 用于接收输出参数值,不确定输出参数个数
[r,c]= size(M);if r ==1&& c ==1type='s';
elseif r ==1|| c ==1type='v';elsetype='m';
end
%type 确定的输出参数
% nargout 不确定的输出参数个数
if nargout ==1return;
elseif nargout ==2
varargout{1}=max(r,c);
elseif nargout ==3
varargout{1}= r;
varargout{2}= c;else
error{'expecting 1,2,or3 output varialbe(s).');
end
end
m = rand(3,4);[t,r,c]= typesize(m);
41.2 嵌套函数
% function 不能定义在if中
function example(a)
disp(addone(a));
end
function y = addone(x)% 局部函数,只能在定义该函数的文件中使用
y = x +1;
end
function example(a)
disp(addone(a));
function y = addone(x)% 嵌套函数
y = x +1;
end
end
function outvol = nestedvolume(len,wid,ht)
outvol = base(len,wid)*ht;% 工作区:len,wid,ht
function outbase = base(len,wid)%工作区:len,wid,与外部函数工作区的len和wid不是同一个变量
outbase =len*wid;
end
end
function outvol = nestedvolume(len,wid,ht)
outvol = base(len,wid)*ht;% 工作区:len,wid,ht
function outbase = base()
outbase =len*wid;
inner_x =1;
inner_y =2;
end
disp(inner_x);% 错误,inner_x初始化在嵌套函数中,所以不能在外部函数使用
disp(inner_y);% 正确,inner_y初始化在外部函数(无论在哪个位置),所以可以在外部函数使用
inner_y = NaN;
end
42. 匿名函数与递归函数
42.1 匿名函数
function area = cirarea(radius)
area = pi * radiius .^2;
end