昨天的那一篇讲的几个函数,不知道你们理解的如何,是否懂得怎么去使用了,如果还没懂,一定要再多看几遍,并且去在软件上进行实操,今天的话,将要介绍一下函数的嵌套,不过在正式讲嵌套之前,先对主函数和子函数做下了解。

主函数

一般来说,函数M文件中的第一个函数就是主函数,之后任意数量的函数都是子函数,主函数也就是以其函数名命名的函数,因此可以被该文件外的其他文件中的函数或者脚本调用。

子函数

一个函数M文件中,除主函数之外的都是子函数,子函数只能够被该文件中的其他函数调用,每个子函数都是以“function”开始,直至下一个函数的定义或者文件的结尾才结束,子函数的顺序可以随意,但是主函数一定是要最开始出现的。

接下来对主函数和子函数的格式编写一个程序,然后简单调用看下其运行结果:

程序:

function [avg,med] = newstats(u)%主函数%返回数组的均值和中间值n=length(u);avg=mean(u,n);med=median(u,n);function a=mean(v,n)%子函数%计算平均值a=sum(v)/n;function m=median(v,n)%子函数%计算中值w=sort(v);if rem(n,2)==1    m=w((n+1)/2);else    m=(w(n/2)+w(n/2+1))/2;end

结果:

再说一下在M文件中调用函数的流程,调用时遇到函数,会先判断是否为子函数。然后判断是否为私有函数,最后才判断是不是当前目录下的其他函数M文件或者系统内置的函数。

私有函数

刚好讲到私有函数,就顺便对它简单介绍下,私有函数就是MATLAB安装目录下,位于“private”这个目录下的函数M文件,构造和我们自己创建的函数一个样,不过私有文件只可以被private目录的上级目录下的函数M文件调用,而不能被脚本文件调用,也不能被其他目录下的任何M文件调用。

嵌套函数

讲完主函数和子函数,现在开始嵌套函数的记录,这个理解起来就很简单了,最容易理解的就是多层嵌套结构,就相当于套纸杯,一个套一个的感觉,看下它的程序结构就知道了:

function x=A(p1,p2)......    function y=B(p3)    ......        function z=C(pN)        ......        end    .......    end.......end

除了这种多层嵌套的结构,还有一种平级嵌套结构,就相当于一堆小球放一个纸箱子里,纸箱子就是级别最高的那个函数,然后其他小球都是同级别的函数,再来看看它的程序结构:

function x=A(p1,p2)......    function y=B(p3)        ...    end    function y=C(p4)        ...    end    function y=N(pN)        ...    endend

嵌套规则

讲完了两种嵌套的结构,或许你们在想,这些函数嵌套后,函数之间的调用会有什么规则吗?

没错,有一定规则的,嵌套函数可以被该嵌套函数的上一层函数使用、也可以是同一个母函数的同级嵌套函数使用、甚至可以被任意一个低级别的函数调用,如果没太看懂意思,来看一个简单的示例,再理解上面讲的嵌套函数被调用的规则:

程序:

function A(x,y)B(x,y);D(x,y);    function B(x,y)        C(x);        D(x);        function C(x)            B(x,y);            D(x,y);        end    end    function D(x,y)        B(x,y);        E(x);        function E(x)            B(x,y);            D(x,y);        end    endend

该程序中可以很明显的看出,函数A能调用B和D,但是不能调用C和E;函数B可以调用C和D;函数D可以调用B和E,函数C可以调用B和D,函数E也可以调用B和D;看完这段程序后,再返回看调用规则就可以学会使用了。

夜未深,人未眠,继续刚

夜未深,人未眠,就用上一篇讲到的函数参数配上今天讲的嵌套玩一玩吧,顺便加深下大家的印象。

因为嵌套函数和主函数是使用的相同的函数工作区,所以,varargin和varargout既可以表示为嵌套函数的输入输出变量,也可表示为主函数的输入输出变量。

那该怎么进行区分呢?

这就需要写好程序中的变量声明了,如果嵌套函数在函数声明里包含了varargin或varargout,则在函数内部调用这两个变量时,变量内容为该函数的输入输出变量;如果声明中没有包含,但是在其上层的函数声明有包含,就当在该嵌套函数内部调用这两个变量的时候,变量内容是上层函数的输入输出变量,不知道现在的你有没有被绕晕,来看程序再理一理吧。

程序:

function y=A(x,varargin)B(nargin,x*rand(4))    function B(argsIn,z)        if argsIn>=2            C(z,varargin{1},4.512,1.729)        end        function C(varargin)            if nargin>=2                y=varargin{1}            end        end    endend

结果:

分析:

函数A调用nargin即“B(nargin,x*rand(4))”,表示函数A的输入变量个数,函数C调用的nargin代表的就是函数C的输入变量个数;

在函数A中,函数C嵌套在B中,函数B嵌套在A中,函数B中调用varargin{1}表示的是主函数A传入的第二个变量,因为A的第一个变量是x,之后才是varargin,而在函数C中的varargin{1}表示的就是函数B传给C的第一个变量,即z,也就是A传给B的”x*rand(4)”。

坚持看到这篇文章的你,现在是否已经对这几篇分享的内容有很好的理解了呢?

没有就继续品吧……

阅读本文共使用    

⬇️长按指纹关注电子狂人⬇️

电子知识

一些电路设计与DIY作品

电子设计技巧与经验

FPGA

System Generator系列教程

算法介绍

通信协议分析

资料分享

Matlab系列记录

建设中~

点个赞

再走吧

leetcode c程序总提示主函数_Matlab系列之函数嵌套相关推荐

  1. leetcode c程序总提示主函数_帅气中国小哥出“大招”,程序员跳槽面试刷题必备...

    整理 | 一一 出品 | AI科技大本营 春节刚过,年终奖收入囊中,属于工程师们一年一度的跳槽季也来了. 跳槽后薪水翻倍自然爽歪歪,但最怕的是面试翻车,那就悲剧了.可想而知,想要跳槽或者为春招准备的毕 ...

  2. c 调用上层类中函数_Matlab系列之函数嵌套

    昨天的那一篇讲的几个函数,不知道你们理解的如何,是否懂得怎么去使用了,如果还没懂,一定要再多看几遍,并且去在软件上进行实操,今天的话,将要介绍一下函数的嵌套,不过在正式讲嵌套之前,先对主函数和子函数做 ...

  3. demod函数_MATLAB信号处理工具箱函数 | 学步园

    函数 说明 波形产生和绘图 chirp 产生扫描频率余弦 diric 产生Dirichlet或周期sinc信号 gauspuls 产生高斯调制正弦脉冲 rulstran 产生脉冲串 rectpuls ...

  4. matlab里inline定义矩阵,Matlab中的inline函数_matlab中inline函数

    Matlab中的inline函数 1.有时为了描述某个数学函数的方便,可以用inline()函数来直接编写该函数,形式相当于M-函数,但无编写一个真正的MATLAB文件,就可以描述出某种数学关系.其调 ...

  5. 计算机一级电子表格TF函数,TFG1000系列DDS函数信号发生器基本操作

    TFG1000系列DDS函数信号发生器基本操作 来源:华强电子网 作者:华仔 浏览:848 时间:2016-08-10 14:18 标签: 摘要: ;;; 可满足一般使用需要的基本操作方法,下面举例说 ...

  6. Win7运行程序总提示出现一个问题,导致程序停止正常工作。请关闭该程序?原来GreenBrowser下载有问题……

    前段时间借了一位朋友的电脑来用.那台电脑里原有的浏览器不顺手,就先下载安装GreenBrowser,再运行GreenBrowser下载其它的应用程序. 首先下载EditPlus,结果运行时提示: 出现 ...

  7. Win7运行程序总提示出现一个问题,导致程序停止正常工作 请关闭该程序 原来GreenBrowser下载有问题

    前段时间借了一位朋友的电脑来用.那台电脑里原有的浏览器不顺手,就先下载安装GreenBrowser,再运行GreenBrowser下载其它的应用程序. 首先下载EditPlus,结果运行时提示: 出现 ...

  8. Win7运行程序总提示出现一个问题 导致程序停止正常工作 请关闭该程序 原来GreenBrowser下载有问题

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 前段时间 ...

  9. matlab函数fftshift,matlab中fft算法_matlab中fftshift函数_matlab中fft函数的用法(2)

    plot([0 : PointNum/2 - 1], x1(1:PointNum/2)); grid on subplot(3,1,2); % [REX IMX] am = sqrt(abs(REX. ...

最新文章

  1. C# 泛型可能导致的装箱操作陷阱
  2. JavaScript 技术篇-js检测原生对象类型实例演示,js的3种对象类型
  3. 哈工大 c语言测试与系统控制 ad,哈工大——c语言在测量与控制中应用实验报告.pdf...
  4. Spring Boot 2.0 迁移指南
  5. VScode使用gitbash的配置方法
  6. Python使用Condition对象实现多线程同步
  7. 新零售大潮下 联想与BHG Mall签约共建智慧商城
  8. 运行 jar 文件_如何运行JAR文件
  9. 根据银行卡账号获取所属银行php代码
  10. 卸载网易邮箱大师邮件从服务器删除,如何卸载网易邮箱大师 网易邮箱大师卸载教程...
  11. 计算机相关英语论文,计算机相关英文论文.doc
  12. TF卡格式化8G格式化时候变成128KB的解决办法
  13. conan入门(二):conan 服务配置-密码管理及策略
  14. word标尺工具应用:如何快速调整版面距离参数
  15. Figma#4:图片填充
  16. OpenCV函数库查询手册(python)
  17. HPB芯链正式发布其测试网络,软硬件结合突破性能瓶颈
  18. 花生壳内网穿透步骤详解,感兴趣的小伙伴可以自己去尝试哦~
  19. F5 分布式云:设置阻断列表/放行列表
  20. 控件的属性、事件和方法

热门文章

  1. 安卓使用jdbc连接mysql_Android:使用JDBC连接MySql
  2. android 静态广播无效,Android8.0静态广播接收静态注册无效,并实现全局网络监听...
  3. java tomcat原理图,浅谈tomcat工作原理
  4. java取消按钮_Java Swing-单击取消按钮时不循环
  5. P6365 众数出现的次数(水)
  6. Super-palindrome(思维)
  7. XKC's basketball team(2019徐州站网络赛E线段树)
  8. Books Queries(codeforces 1066)
  9. 服务器位置缩写,服务器地区缩写
  10. mysql回滚与错误提示_对mysql事务提交、回滚的错误理解 – jae – 博客园