第16章matlab程序調(diào)試、優(yōu)化和出錯處理_第1頁
第16章matlab程序調(diào)試、優(yōu)化和出錯處理_第2頁
第16章matlab程序調(diào)試、優(yōu)化和出錯處理_第3頁
第16章matlab程序調(diào)試、優(yōu)化和出錯處理_第4頁
第16章matlab程序調(diào)試、優(yōu)化和出錯處理_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論