2012-05-08 6 views
2

私は..何かを誤解しているかもしれないが、私は奇妙なMATLABのパフォーマンスコマンドウィンドウに対してエディタを使用しているとき

..同じことをエディタで開き、コマンドウィンドウ内のコードの実行を期待I次のコードを持っています私は(ということは、コンパイルと呼ばれるまたは実行される?)を実行する前に、エディタ

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; tic;階乗(n); toc;とtic;階乗(n); toc; tic; fac(n); toc; 'コマンドラインで。関数呼び出しの順序は違いを生むようです... –

答えて

2

最初に、測定しようとしている計算は、正確な読み方のようなものを得るには速すぎます。それは、システム上の他のプロセスやアクティビティのためにtic/tocを使用したときの測定ノイズの下にあります。より正確な測定値を得るには、計算を何度も繰り返す...(私は計算が10から20秒かかるので繰り返します)。

第2に、対話形式で入力されたコードとスクリプトで入力されたコードの間には違いがあります。私は、JITはスクリプトや関数mファイルから実行されるコードに対してのみ動作すると思います。インタープリタで実行されるものはありません(ただし、これについての参照を見つけるのは難しいですが、見つけたら追加します)。

1

コマンドウィンドウでの実行とスクリプトからの実行の実行時間の違いを意味しますか?私は、それはここでは詳細に説明されて

...彼らは他のすべてはまた、コンピュータ、MATLABの独自のメモリ管理といくつか他のものの上に実行することによって、引き起こされていると思う:http://www.mathworks.com/matlabcentral/newsreader/view_thread/296850

時間を測定する別の方法CPUに費やされたのは関数cputimeです。ただし、精度は低くなります。したがって、テストケースを拡大してください( n = 2e7、例:階乗171の上限)。cputimeで結果を確認してください。

結論:1羽のツバメはないの夏は

は、より多くのケースを使用してテストを拡張します。

n=200; 
tic; 
for ii=1:1e4 
    factorial(n); 
end; 
toc 
関連する問題