Daringoo

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

 

分类:

技术点:

相关文章:

  • 2022-01-27
  • 2022-02-03
  • 2022-01-22
  • 2022-02-07
  • 2021-07-05
  • 2021-09-04
  • 2021-11-29
  • 2022-01-02
猜你喜欢
  • 2022-12-23
  • 2021-12-25
  • 2022-01-28
  • 2021-08-27
  • 2022-02-15
  • 2022-02-28
  • 2022-12-23
相关资源
相似解决方案