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
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

原文地址:https://www.cnblogs.com/Daringoo/p/4465081.html