函数对于matlab的重要性这里就不在赘述了(你了解matlab局部函数吗?)。matlab自带的函数虽包罗万象、但并不可能揽括一切,在实际编程过程中往往还需要编程者根据实际问题编写适合解决当下问题的函数,这也就是所谓的自定义函数。
对于函数来说,几个参数指标是不可忽视的,包括函数的输入接口、输出接口、输入参数及其个数和输出参数及其个数,我们希望通过输入某些参数经过自定义函数的处理来获取我们想要的数据结果。为了方便大家更深刻地理解函数的概念,这里做一个形象的比喻,把面包房看作是函数
,那输入参数就有面粉、酵母、鸡蛋、水等
,而输出参数就是香喷喷的面包
,只要输入面粉、酵母、鸡蛋、水等,经过面包房加工处理,就能得到香喷喷的面包。这相当于多个输入一个输出,函数还可以是一个输入多个输出、多个输入多个输出、零个输入零个输出、零个输入一个或多个输出,说白了就是函数既可有输入也可无输入,既可有输出也可无输出。
那么问题来了?既然函数的参数这般多变,要怎么定义才能尽可能做到万花丛中一枝独秀呢
?即函数本身具备自适应输入输出参数个数的功能。
接下来就一起来揭开6个小矮人的神秘面纱吧
!
为了能让更加自由地自定义函数,matlab提供6有关自定义函数输入输出参数检查的命令,分别是:varargin、varargout、nargin、nargout、narginchk、nargoutchk,对应函数功能见下表:
函数名称 | 函数功能 |
---|---|
varargin | 可变长度输入参数列表,传递函数输入参数 |
varargout | 可变长度输出参数列表,传递函数输出参数 |
nargin | 获取函数输入参数数目 |
nargout | 获取函数输出参数数目 |
narginchk | 验证输入参数数目 |
nargoutchk | 验证输出参数数目 |
肿么样?这个六个小矮人个个身怀绝技吧,不亚于金庸先生的桃谷六仙呐
。那它们的技能要怎样才能施展呢?别着急,让小编先喝口水吧。
1秒,2秒,3秒,。。。。。。人呢?
好了,喝完了~~~真舒服~~~继续吧!
先来说道输入三公子de(varargin、nargin、narginchk)吧:
varargin:我很容易满足的,随便给个位置啰!
示例:函数fun(x,y,varargin),小蓝人就是我,你们装不下的全给我!
nargin:小蓝人知多少,快把我来问
示例:nargin(小蓝人的数目在我肚子里面呢,你倒是来取呀,等啥呢);nargin(fun),fun一点儿都不好玩,不玩了
narginchk:哎!哎!哎!楼上那两位不要太矫情了,检查官来了,小心哦
示例:narginchk(minArgs,maxArgs)
minArgs:比我小的不让过,除非。。。。。。
maxArgs:比我大的也不让过,除非。。。。。。
小编:非你个大头鬼呀,赶紧让我过去写推文吧!
再看输出三公子(varargout、nargout、nargoutchk)吧:
varargout:楼上三位话真多,没有干货
,还是看我的吧!
function [varargout] = meanSumStd(x) % 感谢关注matlab爱好者 % 返回平均值 varargout{1} = mean(x); % 返回求和值 varargout{2} = sum(x); % 返回标准差 varargout{3} = std(x);end
nargout:立正!稍息!注意保持队形!
function [avg,varargout] = meanSumStd(x)% 感谢关注matlab爱好者% 返回平均值varargout = cell(nargout,1);avg = mean(x);for k = 1:nargout-1 switch k case 1 % 返回求和 varargout{k} = sum(x); case 2 % 返回标准差 varargout{k} = std(x); endendend
nargoutchk:matlab爱好者的关注者们,大家好,我是out检查官,请出示您的关注通行证!不然的话。。。。。。
示例:nargoutchk(minArgs,maxArgs),
minArgs:比我大的都比小编帅!
maxArgs:比我小的都比小编高!
小编:好吧,我承认!
function [avg,varargout] = meanSumStdVar(x)minArgs=2; maxArgs=4;nargoutchk(minArgs,maxArgs)varargout = cell(nargout,1);avg = mean(x);for k = 1:nargout-1 switch k case 1 % 求和 varargout{k} = sum(x); case 2 % 计算标准差 varargout{k} = std(x); case 3 % 计算方差 varargout{k} = var(x); endendend
小编:集合!集合!集合了!~~~立正!报数!
varargin: 1 —— 我是传递输入参数的!
varargout: 2 —— 我是传递输出参数的!
nargin: 3 —— 我是点输入参数个数的!
nargout: 4 —— 我是点输出参数个数的!
narginchk: 5 —— 我是检查输入参数个数的!
nargoutchk: 6 —— 我是检查输出参数个数的!
小编:好!全体都有!立正!稍息!解散!
闲言碎语扯了这么多,大家都了解这六个小矮人的用法了吗?不妨赶紧打开matlab试试这些函数吧,合理组合利用这6个函数,你编写的函数必将健步如飞!如果大家对这6个函数使用有任何疑问,欢迎给小编留言!
感谢您的阅读
!
参考资料:
[1] https://www.mathworks.com/help/matlab/ref/varargout.html
[2] https://www.mathworks.com/help/matlab/ref/varargin.html
[3] https://www.mathworks.com/help/matlab/ref/nargin.html
[4] https://www.mathworks.com/help/matlab/ref/nargout.html
[5] https://www.mathworks.com/help/matlab/ref/narginchk.html
[6] https://www.mathworks.com/help/matlab/ref/nargoutchk.html
封面图片:由 Comfreak在Pixabay上发布