zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    51Nod 1080
    51Nod 1015 水仙花数
    51Nod 1009 数字1的个数 | 数位DP
    Java中Native关键字的作用
    【Java关键字-Interface】为什么Interface中的变量只能是 public static final
    JAVA8 十大新特性详解
    深入理解final关键字
    Linux 在线模拟器
    jdk1.7和jdk1.8区别
    Java高新技术第一篇:类加载器详解
  • 原文地址:https://www.cnblogs.com/Daringoo/p/4465081.html
Copyright © 2011-2022 走看看