前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Matlab系列之函数参数

Matlab系列之函数参数

作者头像
狂人V
发布2020-07-14 16:44:38
7110
发布2020-07-14 16:44:38
举报
文章被收录于专栏:电子狂人电子狂人

不知道你们是否有等待今天这篇的到来,这篇其中要讲到的函数参数,是个好东西,但是感觉初学的时候总会有点懵逼,希望你们能理解讲的东西,如果不理解,那就多看几遍吧,我也是这么学过来的,最近也在接受一下非电子类的培训,也是艰难的不行,感觉是真的去搬砖了一样,不过还是蛮有意思的,

,开始进入今天的正题。

~Show Time~

‍确定函数参数

数‍量

当调用一个函数的时候,用到的输入和输出变量的数量在函数内部是确定好的,因此可用通过一个函数获得其个数,nargin函数就是用于确定输入变量个数,nargout显然就是用于确定输出变量个数的了,这两个理解起来就比较简单,直接搞个例程演示下效果就知道了,先创建一个函数,然后调用看结果。

程序:

代码语言:javascript
复制
%testarg1.m
function c=testarg1(a,b)
if(nargin==1)
c=a.^2;
elseif(nargin==2)
c=a*b;
end
end

结果:

可以看到当输入变量单个时,会进入乘方的区间,输入变量为两个,则进入相乘的区间,输出的话由于这边一直只有一个,所以就不搞什么演示了,可以自己弄下玩玩,不懂使用的话,直接命令行窗口“help nargout”,也可以看下下个部分的程序,会用到这个函数做下判断。

顺便教大家一个小技巧,如果代码编写好后,排版可能有点凌乱,可选中全部,然后按Ctrl+I,就会发现代码瞬间很有感觉了,当然这样也会有助于发现代码的错误,可以看下改变前后的效果,左边是原始的,右边是改变了的。

传递可变数量的参数

当你看到标题的时候,第一感觉是什么,是否有种拗口的感觉,反正我有这种感觉,学的时候,我也理解了蛮久,可能是那时候午觉还没睡醒,有点懵逼吧

这部分要讲到的两个函数名字和刚刚的两个有点像,分别是varargin和varargout,这个的作用和名字一样,简单点讲,就是传递可变数量的变量给函数或者让函数返回可变数量的变量,在Matlab中,封装所有的输入变量为单元数组返回varargin,封装所有的输出变量也为单元数组并返回varargout,看到这介绍,不知道你是否理解了,我觉得这个讲得已经蛮清晰了,如果还没看懂,就重复看几遍,或者看下接下来的程序演示,再返回看这边的表述,你肯定能理解!

程序:

代码语言:javascript
复制
function [xmin,ymax]=testvar(varargin)
for i=1:length(varargin)
    x(i)=varargin{i}(1);
    y(i)=varargin{i}(2);
end
xmin=min(x);
ymax=max(y);
end

结果:

从结果可以看到,输入了5个1行2列的矩阵给函数testvar,然后在调用函数的时候,将这5个输入的变量一起以单元数组的形式存入了varargin中,从函数内部代码对varargin的使用就可以看出,使用了花括号进行,x部分就是相当于每个输入的第1列,y就是每个输入的第2列,然后用取最小最大值的函数输出,这两个是MATLAB自带的函数,然后运行结果显然符合程序的功能。

演示完了varargin,再来看看varragout,千万别把自己绕迷糊了,一定要记住,该种函数都是以单元数组的形式进行的。

程序:

代码语言:javascript
复制
function [varargout]=testvar2(In)
for i=1:nargout
    varargout{i}=In(i,:);
end
end

结果:

程序的内容就是很简单的将输入的一个矩阵每一行都存入一个varargout,使用的方法就是先创建一个多维的矩阵,然后根据行数输入相同数量的输出变量,就是图中的p1~p5;结果也很明显,直接将5行数据分别输出到了各自的变量空间中。

本篇到此也结束了,看到该文的你,是不是理解了呢?

如果你是第一次看到这个,我想你可能会有点懵逼,或许连名字都会记不住,但是这都不重要,重要的是理解它要怎样用,能怎样用,有什么用就行了~

路漫漫其修远兮,一起加油!

END

阅读本文共使用

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子狂人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档