2011-06-27 47 views
0

我有一個確定性的matlab函數。我在我們的數據上運行它,並獲得答案。現在,如果我再次重複這一點,在同一組數據上運行相同的確定性函數,我會得到一個不同的(不正確的答案)。如果我關閉matlab,並重新打開函數,並再次運行該函數,我將再次得到正確的答案。連續運行該函數會產生錯誤的答案。這不是某些變量未被清除的問題,因爲我可以在連續運行之間輸入clearvars,並且在重新啓動matlab之前,該函數仍然會產生錯誤的答案。奇怪的matlab行爲

有沒有人遇到過這種行爲?任何想法可能會導致它?

+9

我們展示的代碼。我懷疑你正在遞歸使用它,或者你正在使用全局變量。除非你發佈你的代碼,否則不可能告訴你。 – Phonon

+1

我有過類似的經歷,通常在運行腳本兩次後耗盡內存。有兩件事需要考慮,每次運行後嘗試使用'clear all',並確保你不是「增長陣列」。我發現這是讓變量在應該被清除後得到值的簡單方法。但正如Phonon所說,除非我們看到代碼,否則我們無法真正發現問題。 –

回答

0

如果您的代碼是直接或間接使用函數生成隨機數,則應確保在每次運行開始時使用相同的狀態/種子

例子:

rand('twister',5489) 
rand(1,5) 

rand('twister',5489) 
rand(1,5) 

你會得到兩個相同的輸出:

ans = 
     0.81472  0.90579  0.12699  0.91338  0.63236 

注意,random number generator syntax在最近MATLAB版本已經改變(雖然保持向後兼容性)。

實現上述的新方法是:

RandStream.setDefaultStream(RandStream('mt19937ar','Seed',5489)); 
rand(1,5) 

或用新引進的RNG功能:

rng(5489,'twister') 
rand(1,5)