2011-11-16 262 views
3

我在Matlab中使用递归函数,其中每个级别都需要一些变量,但这些不变。虽然有些功能发生变化,但也需要在主程序中体现出来。matlab中的全局变量和参数,哪个最快?

我想知道这是最好的:

  • 要定义主&功能全局变量像global in1, in2, out1
  • 或然后作为参数传递给像[out1]=functionName(in1,in2)

充当我的程序很复杂我想减少内存需求并且执行速度很快。

回答

3

根据算法的结构,可能会有第三个选项,即使用嵌套函数。嵌套函数具有自己的工作空间(变量作用域),但也可以访问它所嵌套的函数的工作空间中的变量 - 而不是正确的全局变量。

每当我在MATLAB中实现递归函数时,我发现这是一种通常使代码非常干净的方法。

这里有一个简单的算术例如:

function z = times1(x,y) 

if y == 0 
    z = 0; 
else 
    z = plusy(times1(x, y-1)); 
end 

    function z = plusy(x) 
    z = x+y; 
    end 

end 

你可以看到变量y是嵌套函数plusy内使用,即使它不是一个输入参数,但在父函数的工作空间;但它不是全球性的。 (请注意,在最近的MATLAB版本中,y将在编辑器中着色为浅蓝色以强调该共享范围)。

至于哪种方法最快,使用最少的内存,这可能很大程度上取决于您的特定算法的细节 - 数据的复制数量,递归的深度等等。我认为您需要进行试验并采取一些时间,或者使用tictoc,或者使用MATLAB Central File Exchange中的Steve Eddins的timeit函数更好。