Varargin = var+ arg+ in = variable length(可变长) input argument(输入参数) list(列表)
:允许调用该函数时根据需要改变输入参数的个数
Nargin :在matlab中定义一个函数时,在函数内部,nargin指出了输入参数的个数。特别是在使用了varargin(可变参数列表)的函数中,用nargin获取输入参数个数很方便。
Varargout :同varargin相似,不同的是得到可变的函数返回值
Nargout:与varargout搭配,指出了输出参数的个数。
给两个例子(没有matlab语言编辑选项,采用了c++的)
%一个参数可变的赋值函数 function varargout=Var1(varargin) fprintf('How many output arguments?¡ª%d And they are: ',nargout); for k=1:nargout varargout(k)=varargin(k) %as the same as varargin{k} fprintf('%s',num2str(varargout{k})); %如果这里{k}改成(k)会报错 end %disp(''); End
%%默认赋值和internal内嵌函数 %调用形式为: %X=1:20; %Y=60:-1:41; %result=lrh(x,y,'Algorithm','+','U',4,'Sqornot','false'); %%一个运算函数,通过输入变化来确定运算公式 function result=var2(x,y,varargin) % x,y 为长度为1的数值 向量 %%设置默认属性 %algorithm 包含 加减乘除 四中运算 %A,B分别为x,y前系数 %U是截距项 默认为长度为1的零向量 %sqornot表示是否开方 paraNames={'Algorithm','A','B','U','Sqornot'}; vU=zeros(1,length(x)); defaultValue={'+',1,1,vU,'false'};%daultValue中的值和paraNames中的项一一对应,表示其默认值 %%对每个属性赋默认值 [vAlgorithm,vA,vB,vUU,vSqornot]=internal.stats.parseArgs(paraNames,defaultValue,varargin{:}); %%报错功能 AlgorithmNames={'+','-','*','/'}; vAlgorithm=internal.stats.getParamVal(vAlgorithm,AlgorithmNames,... '''Algorithm'''); SqornotNames ={'true','false'}; vSqornot =internal.stats.getParamVal(vSqornot,SqornotNames,... '''Sqornot'''); %%主函数 vUU=zeros(1,length(x))+vUU; switch vAlgorithm case'+' switch vSqornot case 'true' result=sqrt(vA*x+vB*y+vUU); case 'false' result=vA*x+vB*y+vUU; end case '-' switch vSqornot case 'true' result=sqrt(vA*x-vB*y-vUU); case 'false' result=vA*x-vB*y-vUU; end case '*' switch vSqornot case 'true' result=sqrt((vA*x).*(vB*y).*vUU); case 'false' result=(vA*x).*(vB*y).*vUU; end case '/' switch vSqornot case 'true' result=sqrt((vA*x)./(vB*y)./vUU); case 'false' result=(vA*x)./(vB*y)./vUU; end end
function B=Var3(varargin) % varargin是matlab内部变量,cell型,依次存储函数的所有输入变量 % 如add(A1, A2, A3), 则 varargin{1} = A1,varargin{2} = A2, varargin{3} = A3 % nargin同样也是matlab内部变量, 为函数输入变量的个数 %如果变量个数小于2大于3,则报错 error(nargchk(2,3,nargin));%nargchk是一个范围确认函数,判断nargin的值是否在[2,3]中 if nargin == 2 A1= varargin{1}; A2= varargin{2}; B=A1+A2; else A1= varargin{1};A2=varargin{2}; A3=varargin{3}; B=A1*A2*A3; end