• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Matlab 中的varargin/nargin varargout/nargout

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
如何学习MATLAB发布时间:2022-07-18
下一篇:
如何查看Matlab可用字体?发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap