第四章MATLAB編程基礎(chǔ)_第1頁
第四章MATLAB編程基礎(chǔ)_第2頁
第四章MATLAB編程基礎(chǔ)_第3頁
第四章MATLAB編程基礎(chǔ)_第4頁
第四章MATLAB編程基礎(chǔ)_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第四章MATLAB編程基礎(chǔ)

4.1概述4.2流程控制4.3腳本文件4.4函數(shù)文件4.5M文件調(diào)試4.6M文件性能分析

4.1概述

MALTLAB的函數(shù)主要有兩類:

(1)內(nèi)建函數(shù):由MATLAB的內(nèi)核提供的,能夠完成基本的運(yùn)算,例如三角函數(shù)、矩陣運(yùn)算的函數(shù)等。(2)函數(shù)文件:既包括C語言開發(fā)的MEX函數(shù)文件,又包含了M函數(shù)文件。

為了方便編輯M文件,MATLAB提供了一個(gè)編輯器,叫做meditor,是系統(tǒng)默認(rèn)的M文件編輯器。運(yùn)行meditor方法:1.>>edit2.File——New——M-file3.單擊工具欄上4.2流程控制

使用結(jié)構(gòu)化的應(yīng)用程序設(shè)計(jì)方法可以使設(shè)計(jì)的程序結(jié)構(gòu)清晰、可讀性強(qiáng),能夠提高應(yīng)用程序的設(shè)計(jì)效率,增強(qiáng)程序的可維護(hù)性。結(jié)構(gòu)化的程序主要有三種基本的程序結(jié)構(gòu):1)順序結(jié)構(gòu):程序語句的簡(jiǎn)單羅列,由上至下執(zhí)行2)選擇結(jié)構(gòu):依據(jù)判斷條件的結(jié)果選擇某一種方法解決某一個(gè)問題。3)循環(huán)結(jié)構(gòu):程序中某一條語句或多條語句重復(fù)多次運(yùn)行結(jié)構(gòu)。

1.選擇結(jié)構(gòu)(1)if語句基本語法結(jié)構(gòu)有三種:a.if(關(guān)系運(yùn)算表達(dá)式)c.if(關(guān)系運(yùn)算表達(dá)式a)MATLAB語句MATLAB語句Aendelseif(表達(dá)式b)b.if(關(guān)系運(yùn)算表達(dá)式)MATLAB語句BMATLAB語句Aelse(表達(dá)式c)else.MATLAB語句B.end.end(2)Switch語句語法:switch(表達(dá)式)case常量表達(dá)式a:MATLAB語句Acase常量表達(dá)式b:MATLAB語句B

...case常量表達(dá)式m:MATLAB語句Motherwise:MATLAB語句Nend注意:c語言中,每個(gè)case后必須有break,否則依次執(zhí)行符合條件語句后的每一個(gè)case分支。MATLAB中,僅執(zhí)行符合條件的那個(gè)case分支。2.循環(huán)語句

(1)while語句語法:while(表達(dá)式)MATLAB語句end(2)for語句語法:forindex=start:increment:endMATLAB語句end

例:分別使用while和for求解

解:使用while語句使用for語句i=1;sum=0sum=0;while(i<=1000)fori=1:1000sum=sum+1;sum=sum+1i=i+1;endendstr=[‘計(jì)算結(jié)果為:’,num2str(sum)];disp(str)注意:for循環(huán)使用了行向量方式控制索引值(即變量)的初始值和增量值,進(jìn)行循環(huán)運(yùn)算.

3.break語句和continue語句

break語句作用:在執(zhí)行循環(huán)體時(shí),強(qiáng)迫終止并退出當(dāng)前循環(huán).continue語句作用:中斷本次循環(huán),跳轉(zhuǎn)到判斷條件語句處,繼續(xù)下一次的循環(huán).注意:在程序中使用break和continue語句改變程序的流程不是好的編程習(xí)慣,所以在編程時(shí),盡量不使用上述兩語句.4.提高運(yùn)算性能

(1)向量化運(yùn)算:不要使用循環(huán)結(jié)構(gòu)操作矩陣的元素,應(yīng)直接使用矩陣元素的索引或者矩陣運(yùn)算的函數(shù).盡量將使用while循環(huán)或者for循環(huán)的語句結(jié)構(gòu)轉(zhuǎn)換成等價(jià)的向量或者矩陣運(yùn)算,以提高程序的運(yùn)算速度.(2)預(yù)分配存儲(chǔ)空間:為了提高執(zhí)行,減少存儲(chǔ)空間的浪費(fèi).不同的數(shù)據(jù)類型有不同的內(nèi)存預(yù)分配函數(shù)(3)MATLAB加速器:改善循環(huán)運(yùn)行效率。

數(shù)據(jù)類型函數(shù)

例子數(shù)值數(shù)組zerosY=zeros(1:1000)元胞數(shù)組cellY=cell(2,3)Y{1,3}=zeros(1:1000)Y{2,3}=‘string’結(jié)構(gòu)數(shù)組struct,repmatY=repmat(struct(field,value),2,3)4.3腳本文件1.概念:

所謂腳本文件:就是由一系列的MATLAB指令和命令組成的純文本格式的M文件。執(zhí)行:文件中的指令或者命令按照出現(xiàn)在腳本文件中的順序依次執(zhí)行。特點(diǎn):沒有輸入?yún)?shù),沒有輸出參數(shù)2.腳本文件中常用的MATLAB指令指令說明pause暫停當(dāng)前M文件的運(yùn)行,按任意鍵繼續(xù)input等待用戶輸入keyboard暫停當(dāng)前M文件的運(yùn)行,并將程序控制權(quán)交給MATLAB命令行,可按回車鍵或輸入‘return’命令返回,M文件繼續(xù)運(yùn)行return返回當(dāng)前的函數(shù)或者命令行4.4函數(shù)文件1.基本結(jié)構(gòu):(1)函數(shù)定義行:以關(guān)鍵字function開頭如:functiony=average(x)(2)在線幫助:注釋行的第一行,最好用英語寫(3)注釋行:以%開頭的(4)M語言代碼注意:M文件名稱最好和函數(shù)名稱保持一致,若不一致,則調(diào)用函數(shù)的時(shí)候需要使用文件名稱而非函數(shù)名稱。2.輸入輸出參數(shù)

特點(diǎn):定義這些輸入輸出參數(shù)時(shí),不需要指出變量的類型,MATLAB默認(rèn)這些參數(shù)為雙精度類型。在定義M函數(shù)文件的時(shí)候,可以不指明輸入輸出參數(shù)的個(gè)數(shù),可以通過varargin函數(shù)和varargout函數(shù)來編寫程序來完成參數(shù)的確定。function[out1,out2]=example1(a,b,varargin)function[I,j,varargout]=example2(x1,y1,x2,y2,flag)若需要判斷輸入,輸出參數(shù)的個(gè)數(shù)需要使用nargin函數(shù)和nargout函數(shù)。3.子函數(shù)和私有函數(shù)

(1)子函數(shù):如果在同一個(gè)M函數(shù)文件中包含了多個(gè)函數(shù),那么將出現(xiàn)在文件中的第一個(gè)M函數(shù)稱為主函數(shù)(primaryfunction),其余的函數(shù)稱為子函數(shù)(subfunction)。注意:a、子函數(shù)沒有在線幫助;b、子函數(shù)作用范圍有限,只能被那些在定義了子函數(shù)的M文件中定義的函數(shù)調(diào)用。(2)私有函數(shù):被放置在名稱為private的子目錄中的函數(shù)。創(chuàng)建:將需要設(shè)置為私有的函數(shù)拷貝到一個(gè)private子目錄中。注意:a、私有函數(shù)只能被那些位于private子目錄的上一層目錄中的函數(shù)調(diào)用。b、同名的函數(shù)中,私有函數(shù)優(yōu)先執(zhí)行。4.局部變量和全局變量(1)局部變量:在M函數(shù)內(nèi)部聲明并使用的變量。這些變量?jī)H能在函數(shù)調(diào)用執(zhí)行期間被使用,一旦函數(shù)結(jié)束運(yùn)行,則這些變量占用的內(nèi)存空間就自動(dòng)被釋放,變量的數(shù)值就不存在了。(2)全局變量:由關(guān)鍵字global聲明的變量。MATLAB將全局變量保存在特殊的工作空間進(jìn)行統(tǒng)一維護(hù)、管理。(3)保留變量:由關(guān)鍵字persistent聲明的變量這類變量在函數(shù)退出的時(shí)候不被釋放,保留上次退出的值。相當(dāng)于C語言中的static函數(shù)。(4)isglobal命令:用來測(cè)試本地變量與全局工作區(qū)中的變量是否由聯(lián)系,若沒有,則返回值為0。5.函數(shù)執(zhí)行規(guī)則

MATLAB解釋器解析命令按照一定的優(yōu)先級(jí)進(jìn)行:首先判斷輸入的命令是否為變量;若不是內(nèi)存的變量,判斷是否為MATLAB內(nèi)建函數(shù);若不是內(nèi)建函數(shù),則判斷是否為子函數(shù)。若不是子函數(shù),則判斷是否為私有函數(shù)。若不是私有函數(shù),則判斷是否為MATLAB搜索路徑中所包含的某個(gè)文件或函數(shù)。若在同一個(gè)路徑下發(fā)現(xiàn)同名的三種類型的文件MEX文件、P代碼文件和M代碼文件,則優(yōu)先執(zhí)行MEX文件,其次是P代碼文件,最后執(zhí)行M文件。注意:MATLAB內(nèi)存中的變量比函數(shù)具有較高的優(yōu)先級(jí)。4.5M文件調(diào)試

一般地來說,應(yīng)用程序的錯(cuò)誤有兩類:一是語法錯(cuò)誤,另一類是運(yùn)行時(shí)的錯(cuò)誤。 M文件是一種解釋型語言,語法錯(cuò)誤和運(yùn)行時(shí)的錯(cuò)誤都只有在運(yùn)行過程中才能發(fā)現(xiàn),所以程序的調(diào)試往往是在程序無法得到正確結(jié)果時(shí)進(jìn)行程序修正的唯一手段。當(dāng)程序運(yùn)行過程中發(fā)生了錯(cuò)誤或者警告,則程序運(yùn)行中斷,進(jìn)入調(diào)試狀態(tài)??梢栽O(shè)置斷點(diǎn)來進(jìn)行調(diào)試。

MATLAB也提供了一些指令用于進(jìn)行M文件的調(diào)試。指令說明dbclear清除已經(jīng)設(shè)置好的斷點(diǎn)dbcont繼續(xù)執(zhí)行dbdown/dbup修改當(dāng)前工作空間的上、下文關(guān)系dbquit退出調(diào)試狀態(tài)dbstack顯示當(dāng)前堆棧的狀態(tài)dbstatus顯示所有的已經(jīng)設(shè)置的斷點(diǎn)dbstep執(zhí)行應(yīng)用程序的一行或者多行代碼dbstop設(shè)置斷點(diǎn)dbtype顯示M文件代碼和相應(yīng)的行號(hào)6.M文件性能分析

使用M文件性能分析器有兩種方法:一是通過命令行,二是通過圖形用戶界面。打開圖形用戶界面方法:a.>>profviewb.Start—MATLAB—Profiler

填入要測(cè)試的文件后,單擊“StartProfiling”按鈕,則性能分析器通過運(yùn)行指定的指令得出程序運(yùn)行消耗的時(shí)間,并給出一個(gè)簡(jiǎn)要的總結(jié)。profile函數(shù)的使用方法:語法說明profile

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論