第12章程序調(diào)試和編程技巧_第1頁(yè)
第12章程序調(diào)試和編程技巧_第2頁(yè)
第12章程序調(diào)試和編程技巧_第3頁(yè)
第12章程序調(diào)試和編程技巧_第4頁(yè)
第12章程序調(diào)試和編程技巧_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第第1212章章 程序調(diào)試和編程技巧程序調(diào)試和編程技巧在編寫在編寫MATLAB程序時(shí),難免會(huì)出現(xiàn)錯(cuò)誤,這時(shí)就需要對(duì)程程序時(shí),難免會(huì)出現(xiàn)錯(cuò)誤,這時(shí)就需要對(duì)程序進(jìn)行調(diào)試。序進(jìn)行調(diào)試。MATLAB中,中,M文件的調(diào)試主要有兩種方文件的調(diào)試主要有兩種方法:直接調(diào)試法和工具調(diào)試法。法:直接調(diào)試法和工具調(diào)試法。編寫的程序在能夠完成特定的功能的情況下,還要對(duì)程序的編寫的程序在能夠完成特定的功能的情況下,還要對(duì)程序的性能進(jìn)行分析,例如運(yùn)算速度和效率等。在性能進(jìn)行分析,例如運(yùn)算速度和效率等。在MATLAB中中,采用,采用Profile工具對(duì)程序的性能進(jìn)行分析。在本章的最工具對(duì)程序的性能進(jìn)行分析。在本章的最后,介

2、紹了一些常用的編程技巧。后,介紹了一些常用的編程技巧。12.1 M12.1 M文件調(diào)試文件調(diào)試對(duì)于編程者來(lái)說(shuō),程序出現(xiàn)錯(cuò)誤在所難免,尤其是在編寫多對(duì)于編程者來(lái)說(shuō),程序出現(xiàn)錯(cuò)誤在所難免,尤其是在編寫多人參與的大型程序時(shí),掌握常用的程序調(diào)試方法非常重人參與的大型程序時(shí),掌握常用的程序調(diào)試方法非常重要。下面首先介紹出錯(cuò)信息,然后介紹常用的直接調(diào)試要。下面首先介紹出錯(cuò)信息,然后介紹常用的直接調(diào)試法和工具調(diào)試法等。法和工具調(diào)試法等。12.1.1 12.1.1 出錯(cuò)信息出錯(cuò)信息程序調(diào)試是一個(gè)很基礎(chǔ)也很重要的問(wèn)題。沒(méi)有人能一遍寫出程序調(diào)試是一個(gè)很基礎(chǔ)也很重要的問(wèn)題。沒(méi)有人能一遍寫出完全正確沒(méi)有錯(cuò)誤的程序。錯(cuò)

3、誤的程序大致分為以下三完全正確沒(méi)有錯(cuò)誤的程序。錯(cuò)誤的程序大致分為以下三類:類:拼寫錯(cuò)誤:比如應(yīng)該是拼寫錯(cuò)誤:比如應(yīng)該是sum( ),寫成了,寫成了smu( )。拼寫錯(cuò)誤非。拼寫錯(cuò)誤非常容易發(fā)現(xiàn),在程序運(yùn)行時(shí),系統(tǒng)會(huì)提示錯(cuò)誤。常容易發(fā)現(xiàn),在程序運(yùn)行時(shí),系統(tǒng)會(huì)提示錯(cuò)誤。語(yǔ)法錯(cuò)誤:比如語(yǔ)法錯(cuò)誤:比如6/0,輸出結(jié)果變?yōu)闊o(wú)窮大,輸出結(jié)果變?yōu)闊o(wú)窮大Inf。程序在運(yùn)行。程序在運(yùn)行時(shí)不一定會(huì)報(bào)錯(cuò),但是輸出結(jié)果不正常。時(shí)不一定會(huì)報(bào)錯(cuò),但是輸出結(jié)果不正常。邏輯錯(cuò)誤:這樣的錯(cuò)誤非常隱蔽,通常是對(duì)程序的算法考慮邏輯錯(cuò)誤:這樣的錯(cuò)誤非常隱蔽,通常是對(duì)程序的算法考慮不周全。程序可以正常執(zhí)行,但是輸出結(jié)果不符合預(yù)期不周全

4、。程序可以正常執(zhí)行,但是輸出結(jié)果不符合預(yù)期值。值。12.1.2 12.1.2 直接調(diào)試法直接調(diào)試法利用利用MATLAB編寫腳本文件或函數(shù),非常靈活,得到的程序編寫腳本文件或函數(shù),非常靈活,得到的程序也非常的簡(jiǎn)潔,比較容易閱讀和理解。對(duì)于不是很復(fù)雜也非常的簡(jiǎn)潔,比較容易閱讀和理解。對(duì)于不是很復(fù)雜的程序,可以使用直接調(diào)試法進(jìn)行程序的調(diào)試。的程序,可以使用直接調(diào)試法進(jìn)行程序的調(diào)試。(1)如果程序出錯(cuò)或給出警告信息,仔細(xì)分析出錯(cuò)或警告)如果程序出錯(cuò)或給出警告信息,仔細(xì)分析出錯(cuò)或警告信息,會(huì)得到出錯(cuò)的原因。信息,會(huì)得到出錯(cuò)的原因。 (2)在程序中,利用函數(shù))在程序中,利用函數(shù)disp( )將函數(shù)將函數(shù)M

5、文件的中間結(jié)果文件的中間結(jié)果顯示出來(lái)。顯示出來(lái)。 (3)在單獨(dú)調(diào)試一個(gè)函數(shù))在單獨(dú)調(diào)試一個(gè)函數(shù)M文件時(shí),可以將該函數(shù)文件時(shí),可以將該函數(shù)M文件文件修改為腳本修改為腳本M文件進(jìn)行調(diào)試。文件進(jìn)行調(diào)試。 (4)將程序的某些行通過(guò)注釋進(jìn)行屏蔽,在程序行的前面)將程序的某些行通過(guò)注釋進(jìn)行屏蔽,在程序行的前面輸入注釋符輸入注釋符%。 (5)在程序中需要調(diào)試的地方添加)在程序中需要調(diào)試的地方添加keyboard函數(shù)。函數(shù)。 12.1.3 12.1.3 工具調(diào)試法工具調(diào)試法在在MATLAB中,有強(qiáng)大的程序調(diào)試工具,可以在命令行窗口中,有強(qiáng)大的程序調(diào)試工具,可以在命令行窗口采用調(diào)試命令進(jìn)行調(diào)試,也可以采用采用調(diào)

6、試命令進(jìn)行調(diào)試,也可以采用Debugger工具在圖工具在圖形窗口中進(jìn)行程序的調(diào)試。下面分別進(jìn)行介紹。形窗口中進(jìn)行程序的調(diào)試。下面分別進(jìn)行介紹。1命令行為主的調(diào)試命令行為主的調(diào)試在命令行在命令行 窗口中輸入:窗口中輸入:help debug可以查看調(diào)試命令??梢圆榭凑{(diào)試命令。dbstop設(shè)置斷點(diǎn)。設(shè)置斷點(diǎn)。dbclear清除斷點(diǎn)。清除斷點(diǎn)。dbcont從斷點(diǎn)處恢從斷點(diǎn)處恢復(fù)執(zhí)行。復(fù)執(zhí)行。dbstack調(diào)用堆棧。調(diào)用堆棧。dbstatus列出所有斷點(diǎn)。列出所有斷點(diǎn)。dbstep執(zhí)行一行或多行程序。執(zhí)行一行或多行程序。dbtype查看程序的代碼。查看程序的代碼。2圖形化程序調(diào)試圖形化程序調(diào)試12.1

7、.4 12.1.4 錯(cuò)誤處理錯(cuò)誤處理在程序運(yùn)行過(guò)程中,如果遇到警告或錯(cuò)誤,需要進(jìn)行處理。在程序運(yùn)行過(guò)程中,如果遇到警告或錯(cuò)誤,需要進(jìn)行處理。在在MATLAB中,可以采用中,可以采用trycatch語(yǔ)句來(lái)捕獲錯(cuò)誤。語(yǔ)句來(lái)捕獲錯(cuò)誤??梢岳煤瘮?shù)可以利用函數(shù)error( )發(fā)出錯(cuò)誤信息,利用函數(shù)發(fā)出錯(cuò)誤信息,利用函數(shù)warning( )發(fā)出警告信息。發(fā)出警告信息。1使用使用trycatch語(yǔ)句語(yǔ)句2使用函數(shù)使用函數(shù)error( )3使用函數(shù)使用函數(shù)warning( )12.2 M12.2 M文件性能分析文件性能分析在在MATLAB中,通過(guò)程序的調(diào)試,可以改正程序中的語(yǔ)法錯(cuò)中,通過(guò)程序的調(diào)試,可以改正

8、程序中的語(yǔ)法錯(cuò)誤和邏輯錯(cuò)誤等。程序調(diào)試結(jié)束以后,用戶編寫的誤和邏輯錯(cuò)誤等。程序調(diào)試結(jié)束以后,用戶編寫的MATLAB程序可以正常運(yùn)行了,但可能并不是最優(yōu)的,程序可以正常運(yùn)行了,但可能并不是最優(yōu)的,運(yùn)行效率也不是最好的。這就需要對(duì)運(yùn)行效率也不是最好的。這就需要對(duì)MATLAB程序的性程序的性能進(jìn)行分析,并進(jìn)行優(yōu)化。能進(jìn)行分析,并進(jìn)行優(yōu)化。MATLAB提供的提供的M文件分析工具包括:文件分析工具包括:Code Analyzer工具工具和和Profiler工具,它們都有圖形操作界面,使用起來(lái)非常工具,它們都有圖形操作界面,使用起來(lái)非常的方便,下面進(jìn)行詳細(xì)的介紹。的方便,下面進(jìn)行詳細(xì)的介紹。12.2.1

9、Code Analyzer12.2.1 Code Analyzer工具工具在在MATLAB中,可以利用中,可以利用Code Analyzer工具來(lái)分析程序中工具來(lái)分析程序中的錯(cuò)誤和性能等。在以前的的錯(cuò)誤和性能等。在以前的MATLAB版本中叫版本中叫M-lint,基,基本功能類似,只是名稱不一樣。本功能類似,只是名稱不一樣。用戶首先采用用戶首先采用M文件編輯器打開(kāi)要分析的文件編輯器打開(kāi)要分析的M文件,然后選擇文件,然后選擇M文件編輯器中文件編輯器中Tool菜單下的菜單下的Code Analyzer選項(xiàng),如圖選項(xiàng),如圖12.8所示。其中菜單所示。其中菜單MATLAB Compiler Messag

10、e Default Setting將將Code Analyzer工具設(shè)置為默認(rèn)值,單工具設(shè)置為默認(rèn)值,單擊菜單擊菜單Show Code Analyzer Report,會(huì)在瀏覽器窗口,會(huì)在瀏覽器窗口中顯示分析報(bào)告。中顯示分析報(bào)告。12.2.2 Profiler12.2.2 Profiler分析工具分析工具在在MATLAB中,采用中,采用Profiler工具對(duì)工具對(duì)MATLAB代碼進(jìn)行分析代碼進(jìn)行分析。用戶可以在。用戶可以在MATLAB的主界面中單擊菜單的主界面中單擊菜單Desktop| Profiler,顯示,顯示Profiler工具。在工具。在Run this code后面輸入后面輸入程序文

11、件名或程序語(yǔ)句后,通過(guò)單擊按鈕程序文件名或程序語(yǔ)句后,通過(guò)單擊按鈕Start Profiling進(jìn)行程序的性能分析。進(jìn)行程序的性能分析。12.3 12.3 編程技巧編程技巧由于由于 MATLAB 語(yǔ)言是一種解釋性語(yǔ)言,有時(shí)語(yǔ)言是一種解釋性語(yǔ)言,有時(shí) MATLAB 程程序的執(zhí)行速度不是很理想。下面給出了一些編程的技巧序的執(zhí)行速度不是很理想。下面給出了一些編程的技巧,例如:盡量采用向量運(yùn)算來(lái)代替循環(huán),對(duì)于大型的矩,例如:盡量采用向量運(yùn)算來(lái)代替循環(huán),對(duì)于大型的矩陣預(yù)先給出維數(shù)等。陣預(yù)先給出維數(shù)等。12.3.1 12.3.1 程序執(zhí)行時(shí)間程序執(zhí)行時(shí)間在在MATLAB中,可以對(duì)程序進(jìn)行計(jì)時(shí),從而獲得程序

12、的執(zhí)行中,可以對(duì)程序進(jìn)行計(jì)時(shí),從而獲得程序的執(zhí)行時(shí)間。在本書(shū)第時(shí)間。在本書(shū)第2章的章的2.3.4節(jié),給出了節(jié),給出了3種計(jì)時(shí)方法,分種計(jì)時(shí)方法,分別是別是1)采用函數(shù))采用函數(shù)tic和和toc進(jìn)行計(jì)時(shí);進(jìn)行計(jì)時(shí);2)利用函數(shù))利用函數(shù)etime進(jìn)行計(jì)時(shí);進(jìn)行計(jì)時(shí);3)利用)利用cputime進(jìn)行計(jì)時(shí)。進(jìn)行計(jì)時(shí)。如果程序不小心進(jìn)入死循環(huán),或者計(jì)算時(shí)間太長(zhǎng),用戶可以如果程序不小心進(jìn)入死循環(huán),或者計(jì)算時(shí)間太長(zhǎng),用戶可以在命令窗口中使用在命令窗口中使用Ctrl+c來(lái)中斷當(dāng)前程序的執(zhí)行。來(lái)中斷當(dāng)前程序的執(zhí)行。12.3.2 12.3.2 編程技巧編程技巧(1)在利用)在利用MATLAB編程時(shí),應(yīng)盡量避免使

13、用循環(huán)。編程時(shí),應(yīng)盡量避免使用循環(huán)。(2)如果必須使用多重循環(huán),但是兩個(gè)循環(huán)執(zhí)行的次數(shù)不)如果必須使用多重循環(huán),但是兩個(gè)循環(huán)執(zhí)行的次數(shù)不同,則建議在外循環(huán)執(zhí)行循環(huán)次數(shù)少的,內(nèi)循環(huán)執(zhí)行循同,則建議在外循環(huán)執(zhí)行循環(huán)次數(shù)少的,內(nèi)循環(huán)執(zhí)行循環(huán)次數(shù)多的。這樣也可以顯著提高速度。環(huán)次數(shù)多的。這樣也可以顯著提高速度。(3)對(duì)于大型矩陣,如果預(yù)先定維,會(huì)減少程序的執(zhí)行時(shí))對(duì)于大型矩陣,如果預(yù)先定維,會(huì)減少程序的執(zhí)行時(shí)間,提高程序的運(yùn)算效率。間,提高程序的運(yùn)算效率。在程序中,給大型矩陣動(dòng)態(tài)的確定維數(shù),花費(fèi)的時(shí)間非常多在程序中,給大型矩陣動(dòng)態(tài)的確定維數(shù),花費(fèi)的時(shí)間非常多。建議在定義大矩陣時(shí),首先用。建議在定義大矩

14、陣時(shí),首先用 MATLAB 的內(nèi)在函數(shù),的內(nèi)在函數(shù),如函數(shù)如函數(shù)zeros( )或或ones( )對(duì)之先進(jìn)行定維,然后再進(jìn)行賦對(duì)之先進(jìn)行定維,然后再進(jìn)行賦值處理,這樣會(huì)顯著減少所需的時(shí)間的。值處理,這樣會(huì)顯著減少所需的時(shí)間的。(4)在編寫程序時(shí),優(yōu)先考慮)在編寫程序時(shí),優(yōu)先考慮MATLAB的內(nèi)在函數(shù)。的內(nèi)在函數(shù)。(5)如果用戶想繼續(xù)提高程序的效率,可以考慮采用更加)如果用戶想繼續(xù)提高程序的效率,可以考慮采用更加有效的算法。有效的算法。(6)此外,還可以嘗試采用)此外,還可以嘗試采用Mex 技術(shù)。技術(shù)。12.3.4 12.3.4 小技巧小技巧下面給出在利用下面給出在利用MATLAB編程時(shí),可能會(huì)

15、用到的一些小技巧編程時(shí),可能會(huì)用到的一些小技巧。在有些時(shí)候這些小技巧,也能起到事半功倍的效果。在有些時(shí)候這些小技巧,也能起到事半功倍的效果。(1)對(duì)于)對(duì)于M文件的命名,盡量不要用簡(jiǎn)單的英文單詞,最好文件的命名,盡量不要用簡(jiǎn)單的英文單詞,最好是由大小寫英文字母、數(shù)字和下劃線等組成。是由大小寫英文字母、數(shù)字和下劃線等組成。(2)在調(diào)試程序時(shí),經(jīng)常要屏蔽掉多行程序,可以在選定)在調(diào)試程序時(shí),經(jīng)常要屏蔽掉多行程序,可以在選定程序后,按快捷鍵程序后,按快捷鍵Ctrl+r將這些程序行注釋掉。將這些程序行注釋掉。(3)快捷鍵)快捷鍵Ctrl+c可以中斷正在執(zhí)行的操作。可以中斷正在執(zhí)行的操作。(4)使用)使用Tab鍵補(bǔ)全函數(shù)名或文件名。鍵補(bǔ)全函數(shù)名或文件名。(5)在命令行窗口中,使用上下光標(biāo)鍵)在命令行窗口中,使用上下光標(biāo)鍵和和,將歷史記錄,將歷史記錄中的命令復(fù)制到輸入位置。中的命令復(fù)制到輸入位置。(6)使用文本編輯器的)使用文本編輯器的cell模式,能使程序更加清晰。模式,能使程序更加清晰。 12.4 12.4 本章小結(jié)本章小結(jié)本章給出了在本章給出了在MATLAB編程時(shí),程序調(diào)試的方法,包括命令編程時(shí),程序調(diào)試的方法,包括命令行下的直接調(diào)試法和工具調(diào)試法。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論