定义一个变量并在Matlab上的所有子函数中使用它

时间:2016-12-14 13:38:10

标签: matlab

有没有办法在main函数中定义变量并在所有子函数中使用它。 enter image description here

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

将变量用作global

main program
global x
syms x
subfunc1
subfunc2
...

subfunc1
global x

subfunc2
global x

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

您可以做的一件事是将其他功能定义为主要功能的子功能。像下面的东西

subFunc1和subFunc2这两个函数都应该可以访问你在mainFunc上面定义的数据

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

    function subFunc2()
       %do more stuff
    end
end

修改1

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