正文
Matlab 中的varargin/nargin varargout/nargout
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
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\nAnd they are:\n',nargout);for k=:nargoutvarargout(k)=varargin(k) %as the same as varargin{k}fprintf('%s',num2str(varargout{k})); %如果这里{k}改成(k)会报错end%disp('');End
%%默认赋值和internal内嵌函数
%调用形式为:
%X=:;
%Y=:-:;
%result=lrh(x,y,'Algorithm','+','U',,'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(,length(x));
defaultValue={'+',,,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(,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{} = A1,varargin{} = A2, varargin{} = A3
% nargin同样也是matlab内部变量, 为函数输入变量的个数
%如果变量个数小于2大于3,则报错
error(nargchk(,,nargin));%nargchk是一个范围确认函数,判断nargin的值是否在[,]中
if nargin ==
A1= varargin{};
A2= varargin{};
B=A1+A2;
else
A1= varargin{};A2=varargin{};
A3=varargin{};
B=A1*A2*A3;
end