第6章M文件和MATLAB編程_第1頁
第6章M文件和MATLAB編程_第2頁
第6章M文件和MATLAB編程_第3頁
第6章M文件和MATLAB編程_第4頁
第6章M文件和MATLAB編程_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第第6章章 M文件和文件和MATLAB 編程編程1本章學(xué)習(xí)目標(biāo)n掌握MATLAB流程控制方法n了解MATLAB的運(yùn)行方式n掌握M函數(shù)文件和M腳本文件的編寫n理解串演算函數(shù)和函數(shù)句柄的用法n掌握程序調(diào)試方法2主要內(nèi)容n6.1 MATLAB控制流n6.2 腳本文件和函數(shù)文件n6.3 串演算函數(shù)n6.4 函 數(shù) 句 柄n6.5 程 序 調(diào) 試36.1 MATLAB控制流6.1.1順序結(jié)構(gòu)1.數(shù)據(jù)的輸入從鍵盤輸入數(shù)據(jù),則可以使用input函數(shù)來進(jìn)行,用來提示用戶應(yīng)該從鍵盤輸入數(shù)值、字符串或表達(dá)式,并接受輸入。該函數(shù)的調(diào)用格式為:A=input(提示信息,選項(xiàng));其中提示信息為一個字符串,用于提示用戶輸

2、入什么樣的數(shù)據(jù)。如果在input函數(shù)調(diào)用時采用s選項(xiàng),則允許用戶輸入一個字符串。例如: number = input(How many apples) %輸入數(shù)值給numberHow many apples67number = 676.1.1順序結(jié)構(gòu)順序結(jié)構(gòu)n順序結(jié)構(gòu)的程序設(shè)計是最簡單的。在順序結(jié)構(gòu)程序中,程序源代碼是按照位置的先后次序依次執(zhí)行,直到最后一條語句。一般涉及數(shù)據(jù)的輸入、處理和輸出等內(nèi)容。1.數(shù)據(jù)的輸入從鍵盤輸入數(shù)據(jù),則可以使用input函數(shù)來進(jìn)行,用來提示用戶應(yīng)該從鍵盤輸入數(shù)值、字符串或表達(dá)式,并接受該輸入。該函數(shù)的調(diào)用格式為:A=input(提示信息,選項(xiàng));其中提示信息為一個

3、字符串,用于提示用戶輸入什么樣的數(shù)據(jù)。2.數(shù)據(jù)的輸出在命令窗口輸出數(shù)據(jù)時,可以使用disp函數(shù),其調(diào)用格式為: disp(輸出項(xiàng))其中輸出項(xiàng)既可以為字符串,也可以為矩陣。例如: disp(a) %輸出字符串a(chǎn) a=1 2;3 4; disp(a) %輸出矩陣 1 2 3 46.1.2選擇結(jié)構(gòu)選擇結(jié)構(gòu)1.if結(jié)構(gòu)在MATLAB中,if語句有3種基本格式。1)if語句。其語法格式為:if 條件 語句組end【例7.1】輸入3個數(shù),輸出其中的最大值。a=input(a=?);b=input(b=?);c=input(c=?);max=a;if maxb max=b;endif max0 y=x+2;

4、else y=x*x;enddisp(y)執(zhí)行結(jié)果:input x:-5253)多分支if結(jié)構(gòu)。其語法格式為:if 條件1 語句組aelseif 條件2 語句組b elseif 條件m 語句組melse 語句組nend2.switch語句switch語句是多分支選擇語句。根據(jù)表達(dá)式的取值不同,分別執(zhí)行不同的語句,其語法格式為:switch 表達(dá)式 case 常量表達(dá)式1 語句組1 case 常量表達(dá)式2 語句組2 case 常量表達(dá)式m 語句組m otherwise 語句組nend說明:n當(dāng)表達(dá)式的值與某一個case后面的表達(dá)式的值相等時,就執(zhí)行此case后面的語句,若所有的case中的表達(dá)式

5、的值都沒有與表達(dá)式的值匹配的,就執(zhí)行otherwise后面的語句。nswitch后面的表達(dá)式只能是標(biāo)量或字符串。ncase后面的表達(dá)式可以是標(biāo)量、字符串或元胞數(shù)組,如果是元胞數(shù)組則將開關(guān)表達(dá)式與元胞數(shù)組的所有元素進(jìn)行比較,只要某個元素與開關(guān)表達(dá)式相等,就執(zhí)行其后的語句段。【例6.4】輸入一個百分制成績,要求輸出成績等級A、B、C、D、E。90分以上為 A、8089分為B、 7079分為C、 6069分為D、 60分以下為E。score=input(輸入成績:);switch fix(score/10) case 10,9 %90分以上 grade=A; case 8 %8089分 grade=

6、B; case 7 %7079分 grade=C; case 6 %6069分 grade=D; case 5,4,3,2,1,0 %60分以下 grade=E; otherwise %不合法成績 grade=不合法成績;enddisp(grade);6.1.3循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)1.while語句while語句的基本語法結(jié)構(gòu)為:while 表達(dá)式 循環(huán)體語句end【例7.5】用while語句計算 的值。sum=0;n=1;while n=100 sum=sum+n; n=n+1 ;endsumn1003.212.for語句for語句的基本語法結(jié)構(gòu)為:for 循環(huán)變量=表達(dá)式1:表達(dá)式2:表達(dá)式3

7、 循環(huán)體語句end其中表達(dá)式1的值為循環(huán)變量的初值,表達(dá)式2的值為步長,表達(dá)式3的值為循環(huán)變量的終值。步長為1時,表達(dá)式2可以省略?!纠?.6】用for語句計算的值。sum=0;for n=1: 100 sum=sum+n;endsum6.1.4break和和continue語句語句與循環(huán)結(jié)構(gòu)相關(guān)的語句還有break語句和continue語句。它們一般與if語句配合使用。n當(dāng)break語句使用在循環(huán)體中的時候,其作用是能夠在執(zhí)行循環(huán)體的時候強(qiáng)迫終止循環(huán),即控制程序的流程,使其提前退出循環(huán)。n當(dāng)continue語句出現(xiàn)在循環(huán)體中的時候,其作用是能夠中斷本次的循環(huán)體運(yùn)行,繼續(xù)下一次的循環(huán)?!纠?.

8、8】計算的值,當(dāng)和大于1000時終止計算。sum=0;n=1;while n=100 if sum2 f=fibfun(n-1)+fibfun(n-2); %遞歸調(diào)用else f=1;end4.函數(shù)的參數(shù)MATLAB的函數(shù)調(diào)用有一個與其它語言不同的地方,就是函數(shù)的輸入和輸出的參數(shù)的數(shù)目可以改變,從而可以使一個函數(shù)可以完成很多功能。函數(shù)的輸入輸出參數(shù)的個數(shù)可以通過變量nargin和nargout獲得,nargin用于獲得輸入?yún)?shù)的個數(shù),nargout用于獲得輸出參數(shù)的個數(shù)。nargin %在函數(shù)體內(nèi)獲取實(shí)際輸入變量的個數(shù)nargout %在函數(shù)體內(nèi)獲取實(shí)際輸出變量的個數(shù)nargin(fun) %

9、在函數(shù)體外獲取定義的輸入?yún)?shù)個數(shù)nargout(fun) %在函數(shù)體外獲取定義的輸出參數(shù)個數(shù)【例6.13】函數(shù)test1的功能是輸出a和b的和。如果只輸入一個變量,則認(rèn)為另一個變量為0,如果兩個變量都沒有輸入,則默認(rèn)兩者均為0 (narg.m)。function y=narg(a,b) %參數(shù)個數(shù)可變,計算a和b的和if nargin=0 a=0;b=0; elseif nargin=1 b=0; end y=a+b;6.局部變量和全局變量局部變量是在函數(shù)體內(nèi)部使用的變量,其影響范圍只能在本函數(shù)內(nèi),只在函數(shù)執(zhí)行期間存在。一旦函數(shù)結(jié)束運(yùn)行,則變量占用的內(nèi)存空間自動釋放,變量的數(shù)值也不存在了。在命

10、令窗口調(diào)用一個函數(shù)文件,工作窗口將看不見函數(shù)文件中的局部變量。全局變量是可以在不同的函數(shù)工作空間和MATALB工作空間中共享使用的變量,全局變量用命令global定義。全局變量的作用域是整個MATLAB工作空間,即全程有效。所有的函數(shù)都可以對它進(jìn)行存取和修改。因此,定義全局變量是函數(shù)間傳遞信息的一種手段。6.3 串演算函數(shù)6.3.1 eval函數(shù)eval對字符串進(jìn)行處理,得到數(shù)值解。語法格式為:eval(字符串)【例6.15】先定義字符串,再用eval求出1到4階的魔方矩陣 (eval_magic.m)。程序如下:%Generate a sequence of matrices named M

11、1 through M4clearfor n = 1:4 eval(M num2str(n) = magic(n)end6.3.2feval語法格式為:feval(字符串,數(shù)組)求由字符串給定的函數(shù)值,其輸入?yún)⒘渴菙?shù)組。例如,a=feval(sqrt,2)a = 1.4142即等價于求sqrt(2)值。6.4 函數(shù)句柄函數(shù)句柄(Function handle)是MATLAB6.0以后版本啟用的新數(shù)據(jù)類型,可以用變量來表示函數(shù)的句柄。為一個函數(shù)定義句柄的方法有兩種:第一種是利用符號,語法格式為:變量名=函數(shù)名此處地函數(shù)名可以是當(dāng)前MATLAB中可以使用的任意函數(shù) 例如: mysin=sin, 此

12、后mysin就和sin同樣地使用, mysin(pi)和sin(pi)的含義相同。第二種是利用轉(zhuǎn)換函數(shù)str2func,語法格式為:變量名= str2func(函數(shù)名) 【例6.16】編寫一個函數(shù)文件,通過函數(shù)句柄繪制圖形。(trigPlot.m)function trigPlot(h, val)% Verify that h is a function handle.% Call the function mapped to handle h.if isa(h, function_handle) A = h(val); plot(A) % Plot the resulting data.en

13、d6.5程序調(diào)試6.5.1程序調(diào)試概述在開發(fā)M文件過程中,不可避免地出現(xiàn)錯誤(Bug)。 應(yīng)用程序的錯誤主要有兩類,一類是語法錯誤,另一類是運(yùn)行時的錯誤。語法錯誤包括詞法或文法的錯誤,例如函數(shù)名的拼寫錯、表達(dá)式書寫錯等。一旦發(fā)現(xiàn)語法錯誤,MATLAB立即標(biāo)志這些錯誤,并提供有關(guān)所遇到的錯誤類型,以及發(fā)生錯誤處在M文件的行數(shù)。給定這些反饋信息,以便糾正這些錯誤。 6.5.2調(diào)試器調(diào)試器找到錯誤的最好的方法是應(yīng)用MATLAB支持的調(diào)試器(debugger)。M文本編輯器事實(shí)上就是調(diào)試器,包含了一系列的調(diào)試圖標(biāo)。在工具欄的debug下拉式菜單中包含了很多的調(diào)試選項(xiàng)。調(diào)試菜單debug如圖7.4所示。

14、在debug下拉菜單中,可以進(jìn)行單步運(yùn)行操作和斷點(diǎn)操作。在程序運(yùn)行前,單步菜單Step、Step In和Step Out都處于非激活狀態(tài),Run是處于激活狀態(tài)的。只有當(dāng)對設(shè)置了斷點(diǎn)的程序運(yùn)行的過程中,可以激活單步菜單。debug下拉菜單的主要功能為:Step:不進(jìn)入函數(shù)單步運(yùn)行。Step In:進(jìn)入函數(shù)單步運(yùn)行。Step Out:停止單步運(yùn)行。如果在函數(shù)中,跳出函數(shù);如果不在函數(shù)中,直接運(yùn)行到下一個斷點(diǎn)處。Run:運(yùn)行,運(yùn)行過程中暫停在斷點(diǎn)處時,該項(xiàng)變?yōu)閏ontinue。Go Until Cursor:運(yùn)行到光標(biāo)所在的位置。Set/Clear Breakpoints:設(shè)置、清除斷點(diǎn)。Set/M

15、odify Conditional Breakpoints:設(shè)置/修改條件斷點(diǎn)。設(shè)置斷點(diǎn)是高級語言中程序調(diào)試的重要手段之一,斷點(diǎn)是在程序特定位置設(shè)置的中斷點(diǎn),當(dāng)程序運(yùn)行至斷點(diǎn)處時會暫停運(yùn)行,此時可通過檢查相關(guān)變量的內(nèi)容等方法確定程序的運(yùn)行是否正確。圖中的紅色菱形點(diǎn)即為設(shè)置的斷點(diǎn)。Enable/Disable Breakpoints:使斷點(diǎn)有效和無效。Clear Breakpoints in All Files:清除所有斷點(diǎn)。Stop if Errors/Warnings:遇到錯誤/警告停止程序運(yùn)行。表6-1 程序調(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)前堆

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論