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=:nargout varargout(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

Matlab 中的varargin/nargin varargout/nargout的更多相关文章

  1. matlab 中关于 varargin 参数

    varargin 提供了一种函数可变参数列表机制,允许调用者调用该函数时根据需要来改变输入参数的个数: varargin{1}代表可变参数列表的第一个实参,同理varargin{2}代表可变参数列表的 ...

  2. MATLAB中的nargin与varargin的用法

    nargin的用法: nargin:number of function input arguments,指的是一个函数的输入变量的个数. 用法:nargin或着nargin(fx), 其中fx指的是 ...

  3. matlab中nargin函数输入参数数目

    来源:https://ww2.mathworks.cn/help/matlab/ref/nargin.html?searchHighlight=nargin&s_tid=doc_srchtit ...

  4. Matlab 中 Data-driven 风格的 API 设计

    设计 所谓 data-driven API,指的是用户可以把"操作"作为参数,传入函数,像下面这种: stream = dataStream('load', 'example.cs ...

  5. matlab中help所有函数功能的英文翻译

    doc funname 在帮助浏览器中打开帮助文档 help funname 在命令窗口打开帮助文档 helpbrowser 直接打开帮助浏览器 lookfor funname 搜索某个关键字相关函数 ...

  6. matlab中m文件与m函数的学习与理解

    1. m文件与m函数的区别 所谓 MATLAB 程序,大致分为两类: M 脚本文件 (M-Script) 和 M 函数 (M-function), 它们均是普通的 ASCII 码构成的文件. M 脚本 ...

  7. Mathlab编程-微积分在Matlab中的解法

    这一章节将介绍一系列典型的微积分问题(求极限.级数.定积分.导数.重积分等)在Matlab中的求解. 首先关于极限: (1)    数列极限: 给出下面三段例程. 求解数列极限的limit函数参数说明 ...

  8. MATLAB 中gcf、gca 以及gco 的区别

    MATLAB 中gcf.gca 以及gco 的区别gcf 返回当前Figure 对象的句柄值gca 返回当前axes 对象的句柄值gco 返回当前鼠标单击的句柄值,该对象可以是除root 对象外的任意 ...

  9. MATLAB中绘制质点轨迹动图并保存成GIF

    工作需要在MATLAB中绘制质点轨迹并保存成GIF以便展示. 绘制质点轨迹动图可用comet和comet3命令,使用例子如下: t = 0:.01:2*pi;x = cos(2*t).*(cos(t) ...

随机推荐

  1. Qt——styleSheet

    1.两个地方调用 QWidget::setStyleSheet() QApplication::setStyleSheet() 2.基本语法 selector {attribute : value} ...

  2. 20145209 2016-2017-2 《Java程序设计》第3周学习总结

    20145209 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 1.构造方法决定类生成对象的方式 用this将已存在的参数的值指定给此参数. 用new建立新 ...

  3. Luogu P1802 5倍经验日_KEY

    题目传送门 ·背包 这可以说是一道背包的变形. 首先需要考虑到的是如何将ta转换为一个正常 的背包. 这些数据有一个让我们都十分不爽的地方就是有两个值. 所以我们就设置一个基准值,将失败的经验值当做基 ...

  4. cc2541测试SimpleBLEPeripheral例程

    1. 修改工程选项,去掉CC2540_MINIDK,烧写CC2541代码 2. 打开手机软件TruthBlue2_7 3. 准备看下特征值4的通信,在周期处理里面,一直读取特征值3的值,然后由特征值4 ...

  5. bbblack的网络socket通信实验

    1. 本次用bbblack作网络的通信实验,对了,这个板子必须装SD卡才能启动吗?板载的4GB eMMC Flash 存储器,eMMC (Embedded Multi Media Card) 为MMC ...

  6. 利尔达NB-IOT模块烧写固件的步骤

    1. NB-IOT是3个内核,用户开发的是A核,就是应用核,用Eclipse软件打开软件SDK之后,会生成一个bin文件(应用核的bin),现在就是要把bin文件合并到包里面(3个内核的bin),一起 ...

  7. 利用反射获取Model值

    public ActionResult Base(UserModel Model) { Model.Tel = string.Format("{0}-{1}", Model.Are ...

  8. cost加上了

  9. node-redis使用记录

    redis的高速存取性能让人印象深刻,虽然是分布式存储,但相比本地内存,性能毫不逊色. 之所以能做到这点,是由于redis的“单线程,多路复用IO”,同一时刻只有一个操作在进行. 而且多次建立从red ...

  10. hdu1847Good Luck in CET-4 Everybody!(sg函数)

    Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...