關於MATLAB中的tic toc的問題

來源:互聯網
上載者:User

標籤:

關於MATLAB中的tic toc的問題  

其一) 
MATLAB實際單位時間計時函數的具體應用,在編寫程式時,經常需要獲知代碼的執行實際時間,這就需要在程式中用到計時函數,matlab中提供了以下三種方法:
1.cputime(單位不明)
返回matlab啟動以來的CPU時間,可以在程式執行錢儲存當時的CPU時間,然後在程式執行結束後用cputime減去運行前儲存的數值,就可以擷取程式的實際已耗用時間
>>t0=cputime;pause(3);TimeCost=cputime-t0
2.tic/toc(單位s)
tic用在程式的開始,作用是啟動一個計時器,然後在程式尾部放一個toc,表示終止計時器,並返回tic啟動以來的總時s間
3.etime(單位s)
etime(t1,t2)用來計算兩個日期向量t1和t2之間的時間差,結合前面講到的clock函數也可以用來確定程式碼的已耗用時間
>>t0=clock;pause(3);TimeCost=etime(clock,t0)
在三種計時中建議使用第二種,相對來說最精確。當然你可以使用profiler來確定你的執行時間,並且具體到沒有個命令的時間

經常我們需要計算我們程式到底運行多長時間,這樣可以比較程式的執行效率。當然這個對於只有幾秒鐘的小程式沒有什麼意義,但是對於大程式就有很重要的意義 了。
下面我們就說說Matlab中計算程式已耗用時間的三種常用方法吧!
注意:三種方法由於使用原理不一樣,得到結果可能有一定 的差距!


(其二)
1、tic和toc組合(使用最多的)
計算tic和toc之間那段程式之間的已耗用時間,它的經典格式為 
tic 
。。。。。。。。。。 
toc
複製代碼
換句話說程式,程式遇到tic時Matlab自動開始計時,運行到toc時自動計算此時與最近一次tic之間的時間。這個有點拗口,下面我們舉個例子說明 
% by dynamic of Matlab技術論壇 
% see also http://www.matlabsky.com 
% contact me [email protected] 
% 2009-08-18 12:08:47 
clc 
tic;%tic1 
t1=clock; 
for i=1:3 
tic ;%tic2 
t2=clock; 
pause(3*rand) 
%計算到上一次遇到tic的時間,換句話說就是每次迴圈的時間 
disp([‘toc計算第‘,num2str(i),‘次迴圈已耗用時間:‘,num2str(toc)]); 
%計算每次迴圈的時間 
disp([‘etime計算第‘,num2str(i),‘次迴圈運行時 間:‘,num2str(etime(clock,t2))]); 
%計算程式總共的已耗用時間 
disp([‘etime計算程式從開始到現在啟動並執行時間:‘,num2str(etime(clock,t1))]); 
disp(‘======================================‘) 
end 
%計算此時到tic2的時間,由於最後一次遇到tic是在for迴圈的i=3時,所以計算的是最後一次迴圈的時間 
disp([‘toc計算最後一次迴圈已耗用時間‘,num2str(toc)]) 
disp([‘etime程式總已耗用時間:‘,num2str(etime(clock,t1))]);
複製代碼
運行結果如下,大家可以自己分析下 
toc計算第1次迴圈已耗用時間:2.5628 
etime計算第1次迴圈已耗用時間:2.562 
etime計算程式從開始到現在啟動並執行時間:2.562 
====================================== 
toc計算第2次迴圈已耗用時間:2.8108 
etime計算第2次迴圈已耗用時間:2.813 
etime計算程式從開始到現在啟動並執行時間:5.375 
====================================== 
toc計算第3次迴圈已耗用時間:2.0462 
etime計算第3次迴圈已耗用時間:2.046 
etime計算程式從開始到現在啟動並執行時間:7.421 
====================================== 
toc計算最後一次迴圈已耗用時間2.0479 
etime程式總已耗用時間:7.421
複製代碼
2、etime(t1,t2)並和clock配合
來計算t1,t2之間的時間差,它是通過調用windows系統的時鐘進行時間差計算得到已耗用時間的,應用的形式 
t1=clock; 
。。。。。。。。。。。 
t2=clock; 
etime(t2,t1)
複製代碼
至於例子我就不舉了,因為在上面的例子中使用了etime函數了
3、cputime函數來完成
使用方法和etime相似,只是這個是使用cpu的主頻計算的,和前面原理不同,使用格式如下 
t0=cputime 
。。。。。。。。。。。。。 
t1=cputime-t0
複製代碼
上面說到了三種方法,都是可以進行程式已耗用時間計算的,但是Matlab官方推薦使用tic/toc組合,When timing the duration of an event, use the tic and toc functions instead of clock or etime.
至於大家可以根據自己的喜好自己選擇,但是使用tic/toc的時候一定要注意,toc計算的是與最後一次 啟動並執行tic之間的時間,不是第一個tic,更不是第二個。。。。。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

TIC開始一個跑表計時器。通過TIC,可以得到使用TIC命令至使用TOC命令兩者之間所消耗的時間
Tstart=TIC 將時間儲存為一個輸出參數Tstart.TSTART的數值只有作為在隨後出現的TOC調用的輸入參數時有用。 
例如:測量Bessel函數的最小和平均時間:
REPS = 1000; minTime = Inf; nsum = 10; 
tic; 
for i=1:REPS 
tstart = tic; 
sum = 0; for j=1:nsum, sum = sum + besselj(j,REPS); end 
telapsed = toc(tstart); 
minTime = min(telapsed,minTime); 
book.iLoveMatlab.cn
end 
averageTime = toc/REPS;
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

如何將tic toc處理過的時間順序的儲存到矩陣中? 因為我發現每處理一次 就會覆蓋掉上次的時間 而我需要將每次處理的時間都記錄下來 希望哪位高手能幫忙指導一下。

可以先分配一個矩陣,然後每運行一次將值存入.
A=ones(m,n)%其中m,n是你處理為次數;
for i=1..num
   tic,
   %你的程式;
   a=toc;
   A(i)=a;
end
這樣最後的時間就在A中了.

關於MATLAB中的tic toc的問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.