【问题标题】:Define a variable and use it in all sub-function on Matlab定义一个变量并在 Matlab 上的所有子函数中使用它
【发布时间】:2017-02-01 09:07:01
【问题描述】:

有没有办法在主函数中定义一个变量并在所有子函数中使用它。

我尝试将变量声明为global,但似乎我应该在所有函数中再次重复它。我想知道全局变量有什么好处!

使用变量作为global:

main program
global x
syms x
subfunc1
subfunc2
...

subfunc1
global x

subfunc2
global x

(也许这种格式提醒我们函数中有全局变量,但如果我们在函数中使用与Matlab关键字相同的变量名,会导致错误更好) 我不想将变量作为所有函数参数导入,也不想一次又一次地在所有函数中声明该变量。 任何帮助将不胜感激。

【问题讨论】:

  • 将其作为参数传递!使用全局变量是一个糟糕的主意。大量的 MATLAB 函数将在其中使用一个名为“x”的变量,每次发生这种情况时,您的 x 都会被覆盖!

标签: matlab


【解决方案1】:

如果你真的想访问同一个变量,那么我在 Matlab 中只知道两种方法: 嵌套函数(由@justthom8 的回答描述)和全局变量。还存在其他将数据导入函数的方法,例如 getappdata、guidata 和(我个人最喜欢的:)传递函数参数。但是,这些方法会复制变量。

也许您应该问自己为什么要避免复制变量。如果您担心性能,您应该知道 Matlab 有效地将变量用作数据的引用,因此您可以安全地将变量发送到函数(从而复制变量)而无需复制实际数据。在您修改实际复制数据的函数内部的数据之后,它首先是。所有这些对我们来说都是完全不可见的,除非在大量复制过程中性能可能会下降。这称为写时复制。

全局变量可以be used to optimize Matlabs performance,通过对它们进行编码以避免复制数据,但这确实需要知道你在做什么,而且它会带来很多陷阱,特别是如果你的项目增长大小。

【讨论】:

    【解决方案2】:

    您可以做的一件事是将其他函数定义为主函数的子函数。类似下面的东西

    函数 subFunc1 和 subFunc2 都应该可以访问您在 mainFunc 中定义的数据

     function mainFunc()
     variable1 = 'stuff';
     variable2 = 5;
        function subFunc1()
            %do stuff
        end
    
        function subFunc2()
           %do more stuff
        end
    end
    

    编辑 1

    当然,您可以在 mainFunc 中定义用于子函数的全局数据,但我不建议您这样做,因为它可能会以您不希望发生的意外方式发生变化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-18
      • 1970-01-01
      • 1970-01-01
      • 2013-05-18
      • 2017-02-20
      • 1970-01-01
      • 2020-07-21
      相关资源
      最近更新 更多