2012-05-08 56 views
2

我可能誤解的東西..但我預計在編輯器中,並在命令窗口中的代碼的運行是一樣的..奇怪的MATLAB性能使用針對命令窗口編輯器時,

我有以下代碼在編輯器中

display(' '); 
display('script'); 
fac = @(n) prod(1:n); 

n=20; 
display(['- use of anonymous function: fac = @(n) prod(1:n); with n = ' num2str(n)]); 
tic; fac(n); toc; 

display(['- use of build in MatLab function: factorial(); with n = ' num2str(n)]); 
tic; factorial(n); toc; 

我運行之前(就是所謂的編譯或執行?)我很快鍵入在命令窗口中相同的命令。這給了我這樣的:

strange performance time

因此突然間階乘函數在編輯器中獲得提振,當涉及到性能..剛剛發生了什麼?

+0

絕對是一個有趣的問題。參見'tic; FAC(n)的; TOC;抽動;階乘(n)的; toc;'和'tic;階乘(n)的; TOC;抽動; FAC(n)的; toc;'在命令行中。函數調用的順序似乎有所不同... –

回答

2

首先,您要測量的計算速度太快,無法獲得準確的讀數。由於系統上的其他過程和活動,使用tic/toc時所得到的測量噪聲低於此值。爲了獲得更準確的度量,重複計算多次...(我會重複計算,因此需要10-20秒)。

其次,在腳本中交互式地輸入代碼的確有區別。我認爲JIT只運行從腳本或函數m文件運行的代碼,而不是運行在解釋器中的東西(但我現在正在努力尋找一個引用 - 如果我找到它,我會添加它)。

1

你是指在運行命令窗口和運行腳本之間運行時間的差異?我認爲,他們通過一切還您的計算機,MATLAB自身的內存管理和其他一些事情上運行造成...

它更詳細地解釋在這裏:http://www.mathworks.com/matlabcentral/newsreader/view_thread/296850

測時間的另一種方法花在CPU上的功能是cputime。但它具有較低的精度。因此,擴展您的測試用例需要更長的時間( n = 2e7,例如階乘限制在171)以查看包含cputime的結果。

結論:一燕不成一個夏天讓

擴展您的測試有更多的案件。

n=200; 
tic; 
for ii=1:1e4 
    factorial(n); 
end; 
toc