Matlab中的嵌套函数

Matlab中的嵌套函数目录 嵌套函数 什么是嵌套函数 嵌套函数的要求 在父函数与嵌套函数之间共享变量 使用句柄存储函数参数 嵌套函数的可见性 嵌套函数 什么是嵌套函数 嵌套函数是完全包含在父函数内的函数 程序文件中的任何函数都可以包含嵌套函数 例如 名称为 parent 的函数包含名称为

大家好,我是讯享网,很高兴认识大家。

目录

嵌套函数

什么是嵌套函数?

嵌套函数的要求

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

使用句柄存储函数参数

嵌套函数的可见性


嵌套函数

什么是嵌套函数?

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

        例如,名称为 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

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

小讯
上一篇 2025-03-22 10:50
下一篇 2025-02-13 15:03

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/59306.html