第16章matlab程序調(diào)試、優(yōu)化和出錯(cuò)處理_第1頁(yè)
第16章matlab程序調(diào)試、優(yōu)化和出錯(cuò)處理_第2頁(yè)
第16章matlab程序調(diào)試、優(yōu)化和出錯(cuò)處理_第3頁(yè)
第16章matlab程序調(diào)試、優(yōu)化和出錯(cuò)處理_第4頁(yè)
第16章matlab程序調(diào)試、優(yōu)化和出錯(cuò)處理_第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、技術(shù)凝聚實(shí)力技術(shù)凝聚實(shí)力 專(zhuān)業(yè)創(chuàng)新出版專(zhuān)業(yè)創(chuàng)新出版 第16章 程序調(diào)試、優(yōu)化和出錯(cuò)處理 l程序調(diào)試的重要性毋庸置疑,有時(shí)調(diào)試工作所占用的時(shí)間甚至遠(yuǎn)超 過(guò)程序設(shè)計(jì)、代碼編寫(xiě)所用時(shí)間。MATLAB的程序調(diào)試功能強(qiáng)大,較 之于VS、BC等更加簡(jiǎn)潔、方便,具有更好的所見(jiàn)即所得特性,這些 內(nèi)容將在第16.1節(jié)作詳細(xì)介紹。 lMATLAB程序是能夠完成指定功能的代碼集合,完成指定的功能當(dāng)然 是程序的重要目標(biāo)之一,但往往還不是最重要的目標(biāo)。在資源(時(shí) 間、內(nèi)存及其他相關(guān)設(shè)備資源)有限的條件下,決定程序質(zhì)量好壞 的標(biāo)準(zhǔn)往往是程序的性能,當(dāng)然還包括程序界面等。程序的性能指 標(biāo)主要是指完成指定功能所需的時(shí)間和內(nèi)存

2、。第16.2節(jié)中給出了一 些MATLAB程序優(yōu)化應(yīng)該遵循的原則及要注意的事項(xiàng),這些都可以在 某種程度上提高M(jìn)ATLAB程序性能。另外本節(jié)還介紹了MATLAB的性能 分析工具,利用該工具可以更客觀地度量程序的性能。 技術(shù)凝聚實(shí)力技術(shù)凝聚實(shí)力 專(zhuān)業(yè)創(chuàng)新出版專(zhuān)業(yè)創(chuàng)新出版 16.1 調(diào)試 lMATLAB是一種邊解釋邊執(zhí)行的程序語(yǔ)言,這為程序的調(diào) 試提供了眾多的便利,尤其要強(qiáng)調(diào)的是其良好的所見(jiàn)即 所得特性,更是VS、Eclipse等所不能比擬的。除了內(nèi) 置的一系列調(diào)試函數(shù)之外,MATLAB還提供了專(zhuān)門(mén)的 MATLAB調(diào)試器(即M文件編輯器),通過(guò)該調(diào)試器、結(jié) 合調(diào)試函數(shù),用戶可以完成大部分的調(diào)試工作。

3、l本節(jié)首先介紹調(diào)試的基本任務(wù),接著詳細(xì)討論調(diào)試函數(shù)、 MATLAB調(diào)試器及其相關(guān)的調(diào)試技術(shù),最后對(duì)MATLAB中的 錯(cuò)誤和警告及其相關(guān)的調(diào)試技術(shù)進(jìn)行了簡(jiǎn)要介紹,它們 在第16.3節(jié)出錯(cuò)處理中有重要應(yīng)用。 技術(shù)凝聚實(shí)力技術(shù)凝聚實(shí)力 專(zhuān)業(yè)創(chuàng)新出版專(zhuān)業(yè)創(chuàng)新出版 16.1.1 調(diào)試的基本任務(wù) l程序調(diào)試的概念源于英文術(shù)語(yǔ)“Debug”,意為找到、去除程序中的“bug”(bug 可以簡(jiǎn)單地理解為錯(cuò)誤)。對(duì)大部分程序,可能存在的bug可以大致分為如下三類(lèi)。 語(yǔ)法錯(cuò)誤 l邏輯錯(cuò)誤 l異常 l語(yǔ)法錯(cuò)誤是由于程序員疏忽等原因而造成代碼違背程序語(yǔ)言規(guī)則,這是初學(xué)者經(jīng)常 犯的一類(lèi)錯(cuò)誤。一般地,編譯器能夠找到大部分的

4、語(yǔ)法錯(cuò)誤,MATLAB編譯器更是如 此,在某種程度上這是由于MATLAB語(yǔ)言較C+、Java等語(yǔ)法相對(duì)簡(jiǎn)單的緣故。 l邏輯錯(cuò)誤主要是由于程序員對(duì)問(wèn)題求解的程序流程或程序語(yǔ)言本身特性認(rèn)識(shí)有誤差 而造成程序執(zhí)行結(jié)果(包括中間結(jié)果)出現(xiàn)錯(cuò)誤。一般來(lái)說(shuō),編譯器對(duì)這類(lèi)錯(cuò)誤無(wú) 能為力,MATLAB編譯器也不例外。邏輯錯(cuò)誤也是大部分程序調(diào)試的主要工作。 技術(shù)凝聚實(shí)力技術(shù)凝聚實(shí)力 專(zhuān)業(yè)創(chuàng)新出版專(zhuān)業(yè)創(chuàng)新出版 16.1.2 調(diào)試函數(shù) lMATLAB內(nèi)置了一系列的調(diào)試函數(shù),用于程序執(zhí)行過(guò)程相關(guān)的顯示、執(zhí)行中 斷、斷點(diǎn)設(shè)置、單步執(zhí)行操作等。通過(guò)在MATLAB命令窗口輸入以下指令: l help debug l用戶可以

5、查詢到這些調(diào)試函數(shù),它們均以db開(kāi)頭, Debug函數(shù)及其說(shuō)明 函 數(shù) 名功 能 dbstop設(shè)置斷點(diǎn) dbclear清除斷點(diǎn) dbcont重新執(zhí)行 dbdown變更本地工作空間上下文 dbmex使MEX文件調(diào)試有效 dbstack列出函數(shù)調(diào)用關(guān)系 dbstatus列出所有斷點(diǎn) dbstep單步或多步執(zhí)行 dbtype列印M文件(包括行號(hào)) dbup變更本地工作空間上下文 dbquit退出調(diào)試模式 技術(shù)凝聚實(shí)力技術(shù)凝聚實(shí)力 專(zhuān)業(yè)創(chuàng)新出版專(zhuān)業(yè)創(chuàng)新出版 16.1.3 MATLAB調(diào)試器 l但前面利用MATLAB調(diào)試函數(shù)對(duì)MATLAB程序進(jìn)行調(diào)試還有一些不足之處: l不夠簡(jiǎn)便,需要輸入過(guò)多的調(diào)試代碼

6、; 不夠直觀; 對(duì)具有多重函數(shù)調(diào)用的大 型程序不使適用。 l用戶也許希望擁有像VS類(lèi)似的、具有圖形用戶界面的調(diào)試器,為此MATLAB提供了專(zhuān) 門(mén)的MATLAB程序調(diào)試器,該調(diào)試器很好集成在M文件編輯器之中,具有良好的所見(jiàn) 即所得特性,操作控制簡(jiǎn)單方便,功能強(qiáng)大,下面將為用戶詳細(xì)介紹其特性及使用 方法。MATLAB調(diào)試器集成在文件編輯器的調(diào)試工具欄,包括7個(gè)調(diào)試按鈕和一個(gè)空 間堆棧下拉框, 技術(shù)凝聚實(shí)力技術(shù)凝聚實(shí)力 專(zhuān)業(yè)創(chuàng)新出版專(zhuān)業(yè)創(chuàng)新出版 16.1.4 警告和錯(cuò)誤 lMATLAB程序在執(zhí)行過(guò)程中若遇到語(yǔ)法錯(cuò)誤或異常,則會(huì)拋出錯(cuò)誤或 警告。錯(cuò)誤和警告信息中包含了錯(cuò)誤和警告發(fā)生的代碼行行號(hào),由 此

7、可以迅速地找到MATLAB程序中的語(yǔ)法錯(cuò)誤或異常,下面通過(guò)一個(gè) 簡(jiǎn)單的例子說(shuō)明警告、錯(cuò)誤相關(guān)的除錯(cuò)技術(shù)。 技術(shù)凝聚實(shí)力技術(shù)凝聚實(shí)力 專(zhuān)業(yè)創(chuàng)新出版專(zhuān)業(yè)創(chuàng)新出版 16.2 性能優(yōu)化 l廣義上來(lái)說(shuō),程序性能的范疇不僅包括程序的時(shí)間效率 (即執(zhí)行效率)和空間效率(主要指內(nèi)存使用效率), 還涉及程序的穩(wěn)定性、可靠性、適應(yīng)性等多種指標(biāo)。但 本節(jié)僅討論狹義的程序性能,即程序的執(zhí)行效率和內(nèi)存 使用效率,及相關(guān)的性能優(yōu)化技術(shù)。 l從理論上分析程序的性能不是本節(jié)所要討論的內(nèi)容,這 里首先介紹MATLAB的程序性能分析工具Profiler,用以 衡量程序的性能,并在后續(xù)的內(nèi)容中驗(yàn)證相關(guān)性能優(yōu)化 技術(shù)的效果;隨后的兩

8、節(jié)分別討論執(zhí)行效率優(yōu)化和內(nèi)存 優(yōu)化相關(guān)的技術(shù)。 技術(shù)凝聚實(shí)力技術(shù)凝聚實(shí)力 專(zhuān)業(yè)創(chuàng)新出版專(zhuān)業(yè)創(chuàng)新出版 16.2.1 性能分析 l查找程序性能瓶頸是提升程序性能的第一步。MATLAB提供的碼表 (stopwatch)能夠給出指定代碼運(yùn)行的時(shí)間,通過(guò)比較不同代碼 的運(yùn)行時(shí)間,用戶可以粗略分析程序的性能。下面是碼表的一個(gè)簡(jiǎn) 單使用示例,通過(guò)該例子可以很容易地理解碼表的使用方法。 技術(shù)凝聚實(shí)力技術(shù)凝聚實(shí)力 專(zhuān)業(yè)創(chuàng)新出版專(zhuān)業(yè)創(chuàng)新出版 16.2.2 效率優(yōu)化技術(shù) l一般地,用戶在初次編寫(xiě)代碼時(shí),不需要過(guò)多地考慮效率問(wèn)題,而是將精力更多地放在程序的 結(jié)構(gòu)、可讀性等方面,大部分的程序優(yōu)化工作是在程序性能分析之后

9、完成的。本小節(jié)主要討論 程序的時(shí)間效率優(yōu)化技術(shù),接下來(lái)的小節(jié)將討論內(nèi)存優(yōu)化技術(shù),當(dāng)然兩者在某些方面是重疊的。 下面列出了一些讀者可以借鑒的效率優(yōu)化建議: l代碼向量化,即將for、while循環(huán)轉(zhuǎn)為矩陣的按位運(yùn)算,更詳細(xì)的內(nèi)容可以參考第7章7.3.5矩陣 按位運(yùn)算; l預(yù)分配足夠大的數(shù)組,而不是在for、while循環(huán)中增加數(shù)組的空間大?。?l對(duì)不可避免且耗時(shí)很大的循環(huán)操作可以嘗試在MEX文件內(nèi)實(shí)現(xiàn),更詳細(xì)的內(nèi)容可以參考第20章; l盡量避免更改變量的數(shù)據(jù)類(lèi)型或維數(shù),如有需要,建議事先創(chuàng)建一個(gè)新的變量; l盡量避免實(shí)數(shù)和復(fù)數(shù)之間的相互賦值; l盡量采用實(shí)數(shù)運(yùn)算,對(duì)復(fù)數(shù)運(yùn)算可以轉(zhuǎn)換為多個(gè)實(shí)數(shù)運(yùn)算,由此能夠提升效率; l合理使用邏輯運(yùn)算,注意 y = 2x; 技術(shù)凝聚實(shí)力技術(shù)凝聚實(shí)力 專(zhuān)業(yè)創(chuàng)新出版專(zhuān)業(yè)創(chuàng)新出版 16.4 小結(jié) l本章對(duì)MATLAB程序的調(diào)試、優(yōu)化和出錯(cuò)處理進(jìn)行了詳細(xì)的討論,這些內(nèi)容 都是讀者容易忽視,但又非常重要的內(nèi)容。在平常的練習(xí)和實(shí)踐過(guò)程中,

溫馨提示

  • 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)論