收集一些Matlab的小TIPS

1. 程序內(nèi)計時

趁著跑程序的空當(dāng),記錄下Matlab計時函數(shù)的使用。

  • tic, toc
    當(dāng)你需要計算一組Matlab操作的運(yùn)行時間時,可以使用tic和toc函數(shù)。tic函數(shù)啟動一個秒表,表示計時開始;toc則停止這個秒表,表示計時結(jié)束,并計算出所經(jīng)歷的時間(單位為秒)。比如,下面的代碼連續(xù)兩次計算plot(rand(50,5))這條指令的執(zhí)行時間:
> tic;plot(rand(50,5));toc
Elapsed time is 0.202291 seconds.
> tic;plot(rand(50,5));toc
Elapsed time is 0.062176 seconds.

你會發(fā)現(xiàn)這兩條同樣的plot命令在計算時間上的差別。第二條plot命令要比第一條執(zhí)行得快,這是因?yàn)镸atlab已經(jīng)在執(zhí)行第一條plot命令時生成了Figure窗口并且已經(jīng)將所需要的函數(shù)編譯到了內(nèi)存,這樣第二條指令就省去了創(chuàng)建Figure窗口以及函數(shù)搜索和編譯的時間。

  • cputime, etime
    除了tic和toc外,Matlab還提供了兩個函數(shù)cputime和etime,用來計算一次運(yùn)算所占用的時間。其中,函數(shù)cputime返回以秒為單位的、自當(dāng)前Matlab程序段啟動之后到調(diào)用該函數(shù)所占用的CPU時間;函數(shù)etime計算兩個以6元素行向量格式(例如函數(shù)clock與datevec的返回值)表示的時間向量(年 月 日 時 分 秒)之間以秒為單位的時間間隔。實(shí)際上,函數(shù)tic和toc內(nèi)部也在利用clock和etime進(jìn)行計時。下面的這些代碼演示了cputime和etime的用法,其中histo_equalization是我自定義的一個關(guān)于直方圖均衡的M腳本文件:
>> t0 = cputime; histo_equalization; cputime-t0
ans =
    1.4375
>> t1 = clock; histo_equalization; etime(clock,t1)
ans =
    1.5000
%由此可看出cpu占用時間與程序占用時間之間的差別。

參考《精通Matlab7》,參考Blog文章鏈接。

2. 調(diào)試程序

常用調(diào)試方法。

  1. 設(shè)置或清除斷點(diǎn):使用快捷鍵F12,或左鍵該行的數(shù)字軸位置增加一個斷點(diǎn)。
  • 執(zhí)行:使用快捷鍵F5。
  • 單步執(zhí)行:使用快捷鍵F10。
  • 選擇執(zhí)行:F9,或者右鍵 Evaluate Selection。
  • step in:當(dāng)遇見函數(shù)時,進(jìn)入函數(shù)內(nèi)部,使用快捷鍵F11。
  • step out:執(zhí)行流程跳出函數(shù),使用快捷鍵Shift+F11。
  • 執(zhí)行到光標(biāo)所在位置:非常遺憾這項(xiàng)功能沒有快捷鍵,只能使用菜單來完成這樣的功能。
  • 觀察變量或表達(dá)式的值:將鼠標(biāo)放在要觀察的變量上停留片刻,就會顯示出變量的值,當(dāng)矩陣太大時,只顯示矩陣的維數(shù)。
  • 退出調(diào)試模式:沒有設(shè)置快捷鍵,使用菜單或者快捷按鈕來完成。

3. 統(tǒng)計計算時間

Matlab提供了cputime和etime用來計算一次運(yùn)算所占cpu時間,具體見help

>>t0=cputime; 
myoperation;
cputime-t0

> ans=0.1400
>>t1=clock;
myoperation;
etime(clock,t1)

> ans=11.2800

注:myoperation為用戶自定義腳本文件

4. 日期、時間等

** date ,now,clock**

  1. date:按照日期字符串格式返回當(dāng)前系統(tǒng)日期
  • now:按照連續(xù)的日期數(shù)值格式返回當(dāng)前系統(tǒng)時間
  • clock:按照日期向量格式返回當(dāng)前系統(tǒng)時間,可將當(dāng)前時間和日期返回到一個(6元)數(shù)組中。
>> date,now,clock
ans =
09-Apr-2011
ans =
7.3460e+005
ans =
1.0e+003 *
    2.0110    0.0040    0.0090    0.0170    0.0430    0.0470

year,month,day,hour,minute,second
matlab中分別使用year,month,day,hour,minute,second從上面講到的字符串和連續(xù)型日期時間格式中提取年月日時分秒等信息

>>[year(date),year(now)]
ans =
       2011        2011
注意:上面的函數(shù)是沒法從向量型日期時間格式中正確讀取上述信息的
>>year(clock)
ans =
    5     0     0     0     0     0

Matlab中處理日期與時間的函數(shù)詳解

  • Matlab用三種格式來表示日期與時間
    (1)雙精度型日期數(shù)字:一個日期型數(shù)字代表從公元0年到某一日期的的天數(shù),例如,2008年8月26日夜時0點(diǎn)鐘被表示為733646,而這同一天的中午12點(diǎn)就被表示為733646.5,也就是說任何一個時刻都可以用一個雙精度型數(shù)字表示。
    (2)不同形式的日期字符串:Matlab定義了28種標(biāo)準(zhǔn)日期格式的字符串。
    (3)數(shù)值型的日期向量:用一個6元數(shù)組來表示一個日期時間,例如,[2008 8 26 12 5 0]表示2008年8月26日12點(diǎn)05分0秒;用一個3元數(shù)組來表示一個日期,例如,[2008 8 26]表示2008年8月26日。
  • 用日期數(shù)字表示日期使計算機(jī)更容易計算,但是不直觀,因此Matlab提供了許多函數(shù)來實(shí)現(xiàn)三種日期格式之間的轉(zhuǎn)化。
    (1)datestr: 實(shí)現(xiàn)將日期數(shù)字和日期向量轉(zhuǎn)化為日期字符串,可以在Matlab命令窗口中輸入help datestr來查看關(guān)于datestr的用法。
    (2)datenum: 實(shí)現(xiàn)將日期字符串和日期向量轉(zhuǎn)化為日期數(shù)字,可以在Matlab命令窗口中輸入help datenum來查看關(guān)于datenum的用法。
    (3)datevec: 實(shí)現(xiàn)將日期數(shù)字和日期字符串轉(zhuǎn)化為日期向量,可以在Matlab命令窗口中輸入來help datevec查看關(guān)于datevec的用法。

5. &和&&的區(qū)別

&和&&都是邏輯運(yùn)算符,主要有兩點(diǎn)不同

  1. 當(dāng)判斷兩個邏輯值,時,例如A&(f(x)>c)和A&&(f(x)>c)時,對于第一種情況,不論A是否為真,A和(f(x)>c)都要計算,但是對第二種情況,如果A是false,那么后面的(f(x)>c)就不用計算了,倘若f(x)是一個計算量大的函數(shù),那么這將節(jié)省很多時間。
  2. &適用于矩陣間的邏輯運(yùn)算,&&只適用于單個元素,包括數(shù)值和字符。

6. 清除&刪除

clf 清除圖形窗
clc 清除指令窗中顯示內(nèi)容
clear 清除matlab工作空間中保存的變量
close 關(guān)閉指定句柄對象窗口。

  1. clear 刪除工作空間中的項(xiàng)目,釋放系統(tǒng)內(nèi)存
    語法:
clear
clear name
clear name1 name2 name3...
clear global name
clear -regexp expr1 expr2...
clear global -regexp expr1 expr2...
clear keyword
clear('name1','name2','name3',...)

描述:
clear 刪除工作空間內(nèi)所有的變量,釋放系統(tǒng)內(nèi)存
clear name 僅僅刪除工作空間內(nèi)的m-文件或mex文件里的函數(shù)或者變量名??梢酝ㄟ^通配符()有選擇地見刪除項(xiàng)目。比如說:clear my可以刪除工作空間任何名字里以my開頭的變量。它可以移除m-文件里的斷點(diǎn),重新初始化永久性變量,只要是m-文件改變或者清除,函數(shù)或者永久的變量處設(shè)置的斷點(diǎn)就會被移除。如果一個name是全局的,它會從當(dāng)前的工作空間里刪除,但是還可以取得的,因?yàn)槁暶魉侨值?。如果name被鎖鎖上以后,它仍然停留在內(nèi)存中。
clear name1 name2 name3...從工作空間里移除name1,name2,name3
clear global name移除全局變量名
clear -regexp expr1 expr2...清除所有匹配正則表達(dá)式expr1 expr2...的所有變量
clear golbal -regexp expr1 expr2....清除所有匹配正則表達(dá)式expr1 expr2...的所有全局變量:
clear keyword清除所有標(biāo)有關(guān)鍵字的選項(xiàng)
clear('name1','name2','name3',...)是函數(shù)的語法表示。當(dāng)變量名或函數(shù)名以字符串的形式存儲時,用這種形式。
限制:
cleard 在UNIX系統(tǒng)里,不會影響分配給matlab進(jìn)程的內(nèi)存大小。

  • close刪除特定的參數(shù)
    語法:
    close 刪除當(dāng)前參數(shù)
    close(h)刪除名為h的參數(shù)
    close name刪除名為name的參數(shù)
    close all刪除所有句柄非隱藏時的參數(shù)
    close all hidden刪除包括句柄隱藏的參數(shù)
    status=close(...)特定窗口刪除時,返回1,否則返回0

彈出窗口定義操作函數(shù)

dialog 創(chuàng)建對話框
errordlg 創(chuàng)建錯誤對話框
helpdlg 創(chuàng)建幫助對話框
inputdlg 創(chuàng)建輸入對話框
listdlg 創(chuàng)建選擇列表對話框
msgbox 創(chuàng)建消息對話框
pagedlg 顯示頁面的版面對話框
printdlg 顯示打印對話框
questdlg 問題對話框
uigetfile 文件檢索對話框
uiputfile 為寫入而顯示的檢索對話框
uisetcolor 從對話框交互式設(shè)置對象的ColorSpec
uisetfont 交互設(shè)置對象字體特征
warndlg 警告對話框
http://blog.csdn.net/ouening/article/details/52058193
http://www.cnblogs.com/nktblog/archive/2012/05/09/2491208.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容