Matlab中的嵌套函数

目录

嵌套函数

什么是嵌套函数?

嵌套函数的要求

在父函数与嵌套函数之间共享变量

使用句柄存储函数参数

嵌套函数的可见性


嵌套函数

什么是嵌套函数?

        嵌套函数是完全包含在父函数内的函数。程序文件中的任何函数都可以包含嵌套函数。

        例如,名称为 parent 的函数包含名称为 nestedfx 的嵌套函数:

function parent
disp('This is the parent function')
nestedfx

   function nestedfx
      disp('This is the nested function')
   end

end

        嵌套函数与其他类型的函数的主要区别是,嵌套函数可以访问和修改在其父函数中定义的变量。因此:

  • 嵌套函数可以使用不是以输入参数形式显式传递的变量。

  • 在父函数中,可以为嵌套函数创建包含运行嵌套函数所必需的数据的句柄。

嵌套函数的要求

  • 嵌套函数通常不需要end语句。但是,要在程序文件中嵌套任何函数,该文件中的所有函数都必须使用end语句。

  • 不能在任何 MATLAB® 程序控制语句内定义嵌套函数,例如if/elseif/else、switch/case、for、while或try/catch。

  • 必须按名称直接调用嵌套函数,而不使用 feval 或使用使用 @ 运算符创建的函数句柄(并不是 str2func)。

  • ​嵌套函数或包含嵌套函数的函数中的所有变量都必须显式定义。即,除非变量已存在于函数工作区中,否则无法调用函数或脚本向那些变量赋值。(可以参考嵌套函数和匿名函数中的变量。)​

在父函数与嵌套函数之间共享变量

        通常,一个函数工作区中的变量不可用于其他函数。但是,嵌套函数可以访问和修改它们所在的函数工作区中的变量。

        这意味着嵌套函数及包含它的函数都可以修改同一变量,不必将该变量作为参数传递。例如,在 main1 和 main2 函数的每个函数中,主函数和嵌套函数都可以访问变量 x:

function main1
x = 5;
nestfun1

   function nestfun1 
     x = x + 1;
   end 

end
function main2
nestfun2

   function nestfun2
      x = 5;
   end 
   
x = x + 1;
end

        如果父函数不使用指定变量,变量保持为嵌套函数的局部变量。例如,在这个名为main的函数中,以下两个嵌套函数拥有它们自己的不能彼此交互的 x 版本:

function main
   nestedfun1
   nestedfun2

   function nestedfun1
      x = 1;
   end

   function nestedfun2
      x = 2;
   end
end

        返回输出参数的函数在其工作区中有这些输出对应的变量。但是,父函数只有在显示请求嵌套函数的输出对应的变量时,父函数才具有这些变量。例如,函数 parentfun 在其工作区中没有变量 y:

function parentfun
x = 5;
nestfun;

   function y = nestfun
     y = x + 1;
   end 

end

        如果修改如下所示的代码,变量z位于parentfun的工作区中:

function parentfun
x = 5;
z = nestfun;

   function y = nestfun
     y = x + 1;
   end 

end

使用句柄存储函数参数

嵌套函数可以使用以下三个来源的变量:

  • 输入参数

  • 在嵌套函数内定义的变量

  • 在父函数中定义的变量,还称为外部作用域变量。

        为嵌套函数创建函数句柄时,该句柄不仅存储函数名称,还存储外部作用域变量的值。

        例如,在名为makeParabola.m的文件中创建一个函数:该函数接受几个多项式系数,并返回嵌套函数的句柄以计算该多项式的值。

function p = makeParabola(a,b,c)
p = @parabola;

   function y = parabola(x)
   y = a*x.^2 + b*x + c;
   end

end

        makeParabola函数返回parabola函数的句柄,该函数包含系数a、b 和 c 的值。

        在命令行中,调用具有系数值 1.3、.2 和 30 的 makeParabola 函数。使用返回的函数句柄 p 计算多项式在特定点处的值:

p = makeParabola(1.3,.2,30);

X = 25;
Y = p(X)
Y =
  847.5000

        许多 MATLAB 函数接受函数句柄输入以计算特定值范围内的函数。例如,绘制从 -25 到 +25 的抛物型方程:

fplot(p,[-25,25])

        可以为 parabola 函数创建多个句柄,其中每个句柄使用不同的多项式系数:

firstp = makeParabola(0.8,1.6,32);
secondp = makeParabola(3,4,50);
range = [-25,25];

figure
hold on
fplot(firstp,range)
fplot(secondp,range,'r:')
hold off

嵌套函数的可见性

每个函数都有特定的作用域,即可以看到该函数的一组其他函数。嵌套函数在以下位置可用:

  • 紧邻的上一级。(在下面的代码中,函数 A 可以调用 B 或 D,但不能调用 C 或 E。)

  • 在同一父函数内的同一级别嵌套的函数中。(函数 B 可以调用 D,而 D 可以调用 B。)

  • 任何更低级别的函数中。(函数 C 可以调用 B 或 D,但不能调用 E。)

function A(x, y)              % Main function
B(x,y)
D(y)

   function B(x,y)            % Nested in A
   C(x)
   D(y)

      function C(x)           % Nested in B
      D(x)
      end
   end

   function D(x)              % Nested in A
   E(x)

      function E(x)           % Nested in D
      disp(x)
      end
   end
end

​        扩大嵌套函数作用域的最简单的方式是创建函数句柄并将其作为输出参数返回,如使用句柄存储函数参数中所示。只有能调用嵌套函数的函数才可以创建该嵌套函数的句柄。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Matlab嵌套函数调用法则指的是定义和调用嵌套函数的规则。 在Matlab,我们可以在一个函数内部定义另一个函数,这称为嵌套函数嵌套函数可以在外部函数内部使用,但不能在外部函数外部直接调用。嵌套函数可以访问外部函数的变量和参数,但外部函数不能访问嵌套函数的变量和参数。 嵌套函数调用有以下几个法则: 1. 嵌套函数只能在外部函数内部调用:嵌套函数定义在外部函数内部,所以只能在外部函数内部进行调用。外部函数不能直接调用嵌套函数。 2. 嵌套函数可以访问外部函数的变量和参数:嵌套函数可以使用外部函数的变量和参数,这样可以实现更灵活的函数功能。 3. 嵌套函数不能访问外部函数其他嵌套函数的变量和参数:在外部函数内部定义多个嵌套函数时,嵌套函数之间是相互独立的,不能访问彼此的变量和参数。 4. 嵌套函数不能在外部函数外部直接调用:由于嵌套函数的定义仅限于外部函数内部,所以不能在外部函数外部直接调用嵌套函数,只能在外部函数内部调用。 总之,matlab嵌套函数调用法则是规定了嵌套函数的定义和调用的规则。嵌套函数可以在外部函数内部定义和调用,可以访问外部函数的变量和参数,但不能访问其他嵌套函数的变量和参数,也不能在外部函数外部直接调用。这些规则使得嵌套函数Matlab具有更好的封装性和灵活性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值