2011-11-16 58 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函數更好。