3
我在Matlab中使用遞歸函數,其中每個級別都需要一些變量,但這些不變。雖然有些功能發生變化,但也需要在主程序中體現出來。matlab中的全局變量和參數,哪個最快?
我想知道這是最好的:
- 要定義主&功能全局變量像
global in1, in2, out1
- 或然後作爲參數傳遞給像
[out1]=functionName(in1,in2)
充當我的程序很複雜我想減少內存需求並且執行速度很快。
我在Matlab中使用遞歸函數,其中每個級別都需要一些變量,但這些不變。雖然有些功能發生變化,但也需要在主程序中體現出來。matlab中的全局變量和參數,哪個最快?
我想知道這是最好的:
global in1, in2, out1
[out1]=functionName(in1,in2)
充當我的程序很複雜我想減少內存需求並且執行速度很快。
根據算法的結構,可能會有第三個選項,即使用嵌套函數。嵌套函數具有自己的工作空間(變量作用域),但也可以訪問它所嵌套的函數的工作空間中的變量 - 而不是正確的全局變量。
每當我在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
將在編輯器中着色爲淺藍色以強調該共享範圍)。
至於哪種方法最快,使用最少的內存,這可能很大程度上取決於您的特定算法的細節 - 數據的複製數量,遞歸的深度等等。我認爲您需要進行試驗並採取一些時間,或者使用tic
和toc
,或者使用MATLAB Central File Exchange中的Steve Eddins的timeit函數更好。