MATLAB程序設(shè)計(jì)與調(diào)試優(yōu)化ppt課件.ppt_第1頁(yè)
MATLAB程序設(shè)計(jì)與調(diào)試優(yōu)化ppt課件.ppt_第2頁(yè)
MATLAB程序設(shè)計(jì)與調(diào)試優(yōu)化ppt課件.ppt_第3頁(yè)
MATLAB程序設(shè)計(jì)與調(diào)試優(yōu)化ppt課件.ppt_第4頁(yè)
MATLAB程序設(shè)計(jì)與調(diào)試優(yōu)化ppt課件.ppt_第5頁(yè)
已閱讀5頁(yè),還剩26頁(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、2020/8/1,1,MATLAB 程序設(shè)計(jì)與調(diào)試優(yōu)化,2020/8/1,2,應(yīng)用背景,已知電源的幅值和相位,M處的有功和無(wú)功(分別為2和1),Z的值,如何計(jì)算M處的電壓(幅值和相位)?,Z=j0.1,P+jQ,M,2020/8/1,3,數(shù)學(xué)方程,2020/8/1,4,求解方法(牛頓-拉夫遜法),對(duì)于含n個(gè)未知數(shù)的n個(gè)方程,,估計(jì)值與解之間的誤差為,2020/8/1,5,求解方法,J,2020/8/1,6,求解方法,X=0;1; T=0.0001; for m=1:10 fP=10*X(2)*sin(X(1)+2; fQ=-10*X(2)*cos(X(1)+10*X(2)2+1; if fP

2、T end,2020/8/1,7,MATLAB程序的基本組成部分,說(shuō)明部分(或稱之為注釋部分) 清除命令(可選) 定義變量(局部變量和全局變量) 按照順序行執(zhí)行的命令語(yǔ)句 控制語(yǔ)句開(kāi)始 控制語(yǔ)句體 控制語(yǔ)句結(jié)束 其他命令(如繪圖等),2020/8/1,8,工作環(huán)境的設(shè)定,設(shè)置路徑的原因: 對(duì)于用戶程序中使用的文件名和變量名,系統(tǒng)按照以 下順序搜索: (1)查找對(duì)象是否是工作空間的變量。 (2)查找對(duì)象是否是系統(tǒng)的內(nèi)部函數(shù)。 (3)查找對(duì)象是否是在系統(tǒng)的當(dāng)前目錄下,2020/8/1,9,MatLab的基本語(yǔ)法,數(shù)據(jù)類型 常量和變量 程序運(yùn)算符 程序控制語(yǔ)句 M文件,2020/8/1,10,Mat

3、Lab的基本語(yǔ)法 -數(shù)據(jù)類型(1),MatLab 6.5 共有7種基本的數(shù)據(jù)類型以及若干衍生類型。匯總?cè)缦聢D所示。,2020/8/1,11,MatLab的基本語(yǔ)法 -常量和變量,MatLab中的常量: 類似于c語(yǔ)言中的整型常量和實(shí)型常量,常量的表方法一般采用十進(jìn)制數(shù)來(lái)表示,可以帶正負(fù)號(hào)和小數(shù)點(diǎn),當(dāng)然也可采用科學(xué)記數(shù)法。如1、25、0.0033、2e7、pi、2十3i等都是MATLAB的合法常量。這里的2十3i是復(fù)數(shù)常量,它是由實(shí)數(shù)與虛數(shù)單位i組成 MATLAB中的變量: 一般無(wú)需事先定義。一個(gè)程序中的變量以其名稱在操作語(yǔ)句第一次合法出現(xiàn)而定義。如果這個(gè)變量已經(jīng)存在,那么MATLAB將改變它的內(nèi)

4、容,如a2.5定義了一個(gè)變量a,并給它賦值2.5;如果再輸入a3,那么變量a的值就變?yōu)?。,2020/8/1,12,MatLab的基本語(yǔ)法 -常量和變量(2),MATLAB中的變量命名應(yīng)該遵循以下規(guī)則: 變量名必須以字母開(kāi)頭,后面可以是任意的字母、數(shù)字或下劃線。 MATLAB變量名有效的最大長(zhǎng)度是31。 MLAB的變量要區(qū)分大小寫,如:MY_NAME,My_name,my_name分別表示不同的變量。 MatLab自身帶有一些具有特殊含義的變量和常量,用戶在使用時(shí)不能對(duì)這些量進(jìn)行變更。例如:pi表示圓周率,inf表示數(shù)學(xué)中的正無(wú)窮大等。,2020/8/1,13,MatLab的基本語(yǔ)法 程序運(yùn)算

5、符,MATLAB的運(yùn)算符可分為三類: 算術(shù)運(yùn)算符 關(guān)系運(yùn)算符 邏輯運(yùn)算符,2020/8/1,14,MatLab的基本語(yǔ)法 程序控制語(yǔ)句,MATLAB控制語(yǔ)句主要有以下幾類: for循環(huán)結(jié)構(gòu) While循環(huán)結(jié)構(gòu) ifelseend分支結(jié)構(gòu) switchcase分支結(jié)構(gòu),2020/8/1,15,MatLab的基本語(yǔ)法 程序控制語(yǔ)句,for循環(huán)結(jié)構(gòu) for循環(huán)語(yǔ)句通常用來(lái)執(zhí)行循環(huán)次數(shù)已知的情況。它可以按照用戶指定的次數(shù)來(lái)執(zhí)行循環(huán)體中的內(nèi)容。 調(diào)用格式: for x初值:步長(zhǎng):終值 循環(huán)體 end 注意:變量x通常稱為循環(huán)變量;初值、終值和步長(zhǎng)可以是標(biāo)量,也可以是表達(dá)式。當(dāng)循環(huán)語(yǔ)句開(kāi)始執(zhí)行時(shí),變量x的

6、值被賦為和初值相同的內(nèi)容。每執(zhí)行一次循環(huán)體中的內(nèi)容,變量x的值就會(huì)按照步長(zhǎng)的大小來(lái)改變。如果步長(zhǎng)是一個(gè)正數(shù),那么變量x的值增加一個(gè)步長(zhǎng);如果步長(zhǎng)是一個(gè)負(fù)數(shù),那么變量的值就減小一個(gè)步長(zhǎng)。在步長(zhǎng)為正的情況下,如果變量的值小于終值,就將繼續(xù)執(zhí)行循環(huán)體中的內(nèi)容。當(dāng)步長(zhǎng)為負(fù)時(shí),如果變量的值大于終值,也將繼續(xù)執(zhí)行循環(huán)體中的內(nèi)容。如此循環(huán),直到變量的值大于或者小于終值的內(nèi)容,這個(gè)for語(yǔ)句循環(huán)就結(jié)束,而繼續(xù)執(zhí)行end語(yǔ)句下面的命令。語(yǔ)句中的步長(zhǎng)可以省略不寫,在這種情況下,默認(rèn)的步長(zhǎng)值為1。for循環(huán)語(yǔ)句允許嵌套,每一個(gè)“for”關(guān)鍵字必須和一個(gè)“end”配對(duì)。,2020/8/1,16,MatLab的基本語(yǔ)法

7、 程序控制語(yǔ)句,While循環(huán)結(jié)構(gòu) while語(yǔ)句根據(jù)一個(gè)控制表達(dá)式的值來(lái)確定程序的運(yùn)行方式。常用于事先不能確定循環(huán)次數(shù)的情況。 調(diào)用格式: while表達(dá)式 循環(huán)體 end 當(dāng)表達(dá)式中的值為真時(shí),執(zhí)行循環(huán)體。當(dāng)循環(huán)體執(zhí)行完畢后,繼續(xù)判斷表達(dá)式的值,如果仍為真,那么繼續(xù)執(zhí)行循環(huán)體,如此循環(huán),直到表達(dá)式的值為假時(shí)終止循環(huán)。當(dāng)表達(dá)式的值是一個(gè)矩陣,且矩陣中所有元素都不為零時(shí),才執(zhí)行循環(huán)體中的內(nèi)容。如果表達(dá)式A是一個(gè)空矩陣,那么循環(huán)體中的內(nèi)容永遠(yuǎn)不會(huì)被執(zhí)行。另外,要想在任何時(shí)候終止循環(huán)(for或while循環(huán)),可利用break語(yǔ)句。終止循環(huán)后繼續(xù)執(zhí)行end語(yǔ)句下面的語(yǔ)句。,2020/8/1,17,

8、MatLab的基本語(yǔ)法 程序控制語(yǔ)句,ifelseend分支結(jié)構(gòu) if語(yǔ)句是一種條件選擇結(jié)構(gòu)語(yǔ)句,它根據(jù)不同邏輯表達(dá)式的值來(lái)判斷程序在執(zhí)行過(guò)程中需要執(zhí)行哪些語(yǔ)句。 調(diào)用格式: if 邏輯表達(dá)式 命令語(yǔ)句體 end 在程序執(zhí)行該語(yǔ)句的過(guò)程中,首先判斷邏輯表達(dá)式的值。如果邏輯表達(dá)式的值為真,那么程序就會(huì)執(zhí)行命令語(yǔ)句體的所有語(yǔ)句。如果邏輯表達(dá)式的值為假,那么就跳過(guò)命令語(yǔ)句體,繼續(xù)執(zhí)行end語(yǔ)句之后的語(yǔ)句。,2020/8/1,18,MatLab的基本語(yǔ)法 程序控制語(yǔ)句,switchcase分支結(jié)構(gòu) switch語(yǔ)句可以根據(jù)一個(gè)變量或表達(dá)式的值執(zhí)行特定的語(yǔ)句。 調(diào)用格式: switch表達(dá)式0 case

9、表達(dá)式l的值 命令行l(wèi) case表達(dá)式2的值 命令行2 . otherwise 命令行n end,先計(jì)算switch后面表達(dá)式0的值,然后檢查case語(yǔ)句后面的值是否與表達(dá)式0的值相等,如表達(dá)式1的值與之相等,則執(zhí)行命令行1,否則繼續(xù)檢查第二個(gè)case子句,以此類推,如果所有case子句的值均不等于表達(dá)式0的值,則執(zhí)行othewise語(yǔ)句后面的命令行n。 和c語(yǔ)言不同的是,在switch結(jié)構(gòu)中,如果一個(gè)case條件滿足,那么在執(zhí)行完這個(gè)case語(yǔ)句中的語(yǔ)句體之后,就會(huì)立接去執(zhí)行end語(yǔ)句后面的語(yǔ)句而不并判斷其他case語(yǔ)句的情況。,2020/8/1,19,MatLab的基本語(yǔ)法 M文件,引入M

10、文件的原因: 對(duì)于比較簡(jiǎn)單的問(wèn)題和一次性問(wèn)題,通過(guò)指令窗中直接輸入一組指令去求解,也許是比較簡(jiǎn)便、快捷的。但當(dāng)待解決問(wèn)題所需的指令較多和所用指令結(jié)構(gòu)較復(fù)雜時(shí),或當(dāng)一組指令通過(guò)改變少量參數(shù)就可以被反復(fù)使用去解決不同問(wèn)題時(shí),直接在指令窗中輸入指令的方法就顯得煩瑣。為了代替在MATLAB提示符下輸入的多條MATLAB命令語(yǔ)句,可以把這些命令寫入一個(gè)文本文件,這個(gè)文本文件可用一個(gè)編輯器創(chuàng)建。每當(dāng)用戶輸入這個(gè)文件名以及它的自變量時(shí),這些命令就由MATLAB執(zhí)行。當(dāng)文件中最后一個(gè)命令被執(zhí)行時(shí),MATLAB能再?gòu)闹噶畲翱谧x取命令,這樣的文件就叫做M文件。,2020/8/1,20,MatLab的基本語(yǔ)法 M文

11、件類型,M文件的類型 : 腳本(Script)文件,教材中也稱之為命令文件 函數(shù)(Function)文件 這兩種文件均以“.m”為后綴。,2020/8/1,21,MatLab的基本語(yǔ)法 腳本M文件,腳本(Script)文件(命令文件): 腳本文件的主要用途是使命令輸入更加簡(jiǎn)單化。如果用戶需要重復(fù)輸入許多命令,即可將這些命令放在一個(gè)腳本文件里(腳本文件沒(méi)有輸入?yún)?shù)和輸出參數(shù))??梢哉f(shuō),腳本文件只不過(guò)是將用戶在MATLAB的命令行窗口中輸入的一串命令用另外一個(gè)名稱代替而己,并且腳本文件的運(yùn)行結(jié)果每次都是相同的。 特點(diǎn)如下: 該文件中的指令形式和前后位置,與解決同一個(gè)問(wèn)題時(shí)在指令窗中輸入的那組指令沒(méi)

12、有任何區(qū)別。 MATLAB在運(yùn)行這個(gè)腳本時(shí),只是簡(jiǎn)單地從文件中讀取一條條指令送到MATLAB中執(zhí)行。 與在指令窗中直接運(yùn)行指令一樣,腳本文件運(yùn)行產(chǎn)生的變量都是駐留在MATLAB基本工作空間中。,2020/8/1,22,MatLab的基本語(yǔ)法 函數(shù)M文件,函數(shù)(Function)文件: 函數(shù)文件的主要用途是用來(lái)擴(kuò)充MATLAB的應(yīng)用范圍和滿足用戶不同的實(shí)際應(yīng)用需求。函數(shù)文件可以接受輸入變量,也可以返回輸出變量。除了輸入變量和輸出變量以外,在函數(shù)文件內(nèi)部的其他變量通常為該函數(shù)文件的局部變量,并不會(huì)出現(xiàn)在MATLAB的工作空間內(nèi)。而能夠保留在MATLAB的工作空間內(nèi)的變量只有該函數(shù)文件的輸入和輸出變

13、量。也就是說(shuō),函數(shù)文件對(duì)于變量的運(yùn)算是在函數(shù)本身的工作空間內(nèi)進(jìn)行的,它和MATLAB的命令窗口中的工作空間是相互獨(dú)立的。 MATLAB對(duì)函數(shù)文件的處理與對(duì)腳本文件的處理不同,函數(shù)文件對(duì)外只表現(xiàn)其輸入?yún)?shù)和輸出結(jié)果,內(nèi)部的運(yùn)作對(duì)外是封閉的,利用這個(gè)特性,容易實(shí)現(xiàn)編程的模塊化。函數(shù)文件的具體特點(diǎn)如下: 從形式上看,與腳本文件不同,函數(shù)文件的第一行總是以“function”引導(dǎo)的“函數(shù)申明行”。 從運(yùn)行上看,與腳本文件運(yùn)行不同,每當(dāng)函數(shù)文件運(yùn)行,MATLAB就會(huì)專門為它開(kāi)辟一個(gè)臨時(shí)工作空間。稱之為函數(shù)工作空間(function workspace)。所有中間變量都存放在函數(shù)工作空間中。當(dāng)執(zhí)行完文件最

14、后一條指令或遇到return時(shí),就結(jié)束該函數(shù)文件的運(yùn)行,同時(shí)該臨時(shí)函數(shù)空間及其所有的中間變量就立即被清除。 函數(shù)空間隨具體M函數(shù)文件的被調(diào)用而產(chǎn)生,隨調(diào)用結(jié)束而刪除。函數(shù)空間相對(duì)基本空間是獨(dú)立的、臨時(shí)的。在MATLAB整個(gè)運(yùn)行期間,可以產(chǎn)生任意多個(gè)臨時(shí)函數(shù)空間。 假如在函數(shù)文件中,發(fā)生對(duì)某腳本文件的調(diào)用,那么該腳本文件運(yùn)行產(chǎn)生的所有變量都存放于該函數(shù)空間之中,而不是存放在基本空間。,2020/8/1,23,M文件的命名,不能用數(shù)字作為文件名。 不能用和Matlab特有變量名相同的名稱。 不能和已在workspace中的變量或常量同名。,2020/8/1,24,MatLab程序調(diào)試和代碼優(yōu)化,2

15、020/8/1,25,MatLab程序的常見(jiàn)錯(cuò)誤,編寫M文件時(shí),常見(jiàn)的錯(cuò)誤有兩種:語(yǔ)法錯(cuò)誤和運(yùn)行錯(cuò)誤。 語(yǔ)法錯(cuò)誤:指變量名、函數(shù)名的誤寫,標(biāo)點(diǎn)符號(hào)的缺漏等。這類錯(cuò)誤Matlab能在運(yùn)行前發(fā)現(xiàn)給出提示(包括相應(yīng)的錯(cuò)誤原因和所在位置),并終止運(yùn)行。 運(yùn)行錯(cuò)誤:指算法本身引起的,發(fā)生在運(yùn)行過(guò)程中的錯(cuò)誤。相對(duì)語(yǔ)法錯(cuò)誤,動(dòng)態(tài)的運(yùn)行錯(cuò)誤較難查找和處理。,2020/8/1,26,運(yùn)行錯(cuò)誤難以查找和處理的原因,運(yùn)行錯(cuò)誤來(lái)源多元化。如來(lái)源于算法模型和期望目標(biāo)是否一致,程序模型和算法是否一致,涉及用戶對(duì)期望目標(biāo)原理的理解、對(duì)算法的理解,還涉及用戶對(duì)Matlab指令的理解、對(duì)程序流的理解,及對(duì)Matlab工作原理的

16、理解。 運(yùn)行錯(cuò)誤的表現(xiàn)形式多樣化:程序正常運(yùn)行但結(jié)果不對(duì),程序運(yùn)行不正常而中斷等。 運(yùn)行錯(cuò)誤是動(dòng)態(tài)錯(cuò)誤。尤其是M函數(shù)文件,它一旦停止運(yùn)行,其中間變量被刪除一空,錯(cuò)誤很難查找。另外有些情況下結(jié)果正常,有些情況下結(jié)果不正確。 程序的運(yùn)行錯(cuò)誤必須借助程序調(diào)試技術(shù)才能解決。,2020/8/1,27,MatLab程序調(diào)試方法,直接調(diào)試法 利用調(diào)試器,2020/8/1,28,直接調(diào)試法,由于MatLab語(yǔ)言可讀性強(qiáng),對(duì)于較簡(jiǎn)單的程序直接調(diào)試法比較有效。直接調(diào)試一般包括以下幾個(gè)方面: 檢查所調(diào)用的函數(shù)或要載入的數(shù)據(jù)文件是否在當(dāng)前目錄或搜索路徑上。 將重點(diǎn)懷疑的語(yǔ)句行、指令行后的“;”去掉,使計(jì)算結(jié)果能顯示在主命令窗口。 在適當(dāng)?shù)奈恢眉尤腼@示某些關(guān)鍵變量值的語(yǔ)句(如用disp) 利用echo指令,使運(yùn)行時(shí),在屏幕上逐行顯示文件內(nèi)容。echo on能顯示M腳本文件;echo FunName on能顯示名為FunName的M函數(shù)文件。 在程序適當(dāng)位置加入keyboard指令。Matlab運(yùn)行到這一指令時(shí),會(huì)暫停執(zhí)行,并在MatLab指令窗口中出現(xiàn)K提示符。此時(shí)用戶可以輸入指令查看各種變量的值,也可修改變量的值。輸入回車后結(jié)束查看,原文件繼續(xù)運(yùn)行。,2020/8/1,29,調(diào)試器的使用,MatLab的調(diào)試器和M文件編輯器集成一體。

溫馨提示

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