MATLAB程序設(shè)計及應(yīng)用實例_第1頁
MATLAB程序設(shè)計及應(yīng)用實例_第2頁
MATLAB程序設(shè)計及應(yīng)用實例_第3頁
MATLAB程序設(shè)計及應(yīng)用實例_第4頁
MATLAB程序設(shè)計及應(yīng)用實例_第5頁
已閱讀5頁,還剩56頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、5.1 MATLAB程序設(shè)計 5.2 應(yīng)用實例,第5章 MATLAB程序設(shè)計及應(yīng)用,5.1 MATLAB程序設(shè)計,5.1.1 M文件 5.1.2 腳本文件和函數(shù)文件 5.1.5 數(shù)據(jù)的輸入輸出 5.1.3 選擇結(jié)構(gòu) 5.1.4 循環(huán)結(jié)構(gòu) 5.1.6 M文件調(diào)試,5.1.1 M文件,例 建立一個命令文件將變量a,b的值互換,然后運行該命令文件。 首先建立命令文件并以文件名exch.m存盤: clear; a=1:10; b=11,12,13,14;15,16,17,18; c=a;a=b;b=c; a b 然后在MATLAB的命令窗口中輸入exch,將會執(zhí)行該命令文件。,1.建立新的M文件 (1

2、)菜單操作:MATLAB命令窗口的File菜單 New菜單項 M-file命令。 (2)命令操作:在MATLAB命令窗口輸入命令edit。 (3)命令按鈕操作:單擊MATLAB命令窗口工具欄上的“新建”命令按鈕。 2. 編輯已有的M文件 3. M文件的分類 P116 4.1.2內(nèi)容 分類:腳本文件(Script File)和函數(shù)文件(Function File)。 主要區(qū)別。,M文件的建立與編輯,M文件的基本結(jié)構(gòu),函數(shù)定義行 H1行 對程序的總體介紹 函數(shù)說明 對程序詳細描述 程序主體 注釋 解釋程序功能的文字 說明:除程序主體外,其他部分以%開頭。 P116 實例,1 腳本文件 沒有輸入和輸

3、出 由一系列指令組成 可在命令窗口直接運行 產(chǎn)生的所有變量存儲在workspace中。 例 exam5_1.m。,5.1.2 腳本文件和函數(shù)文件,(1) 函數(shù)文件的基本結(jié)構(gòu) 函數(shù)文件由function語句引導(dǎo) 其基本結(jié)構(gòu)為: function 輸出形參表=函數(shù)名(輸入形參表) %注釋說明部分 函數(shù)體語句,2 函數(shù)文件,函數(shù)文件的格式說明 (1)關(guān)于函數(shù)文件名: 函數(shù)文件名與函數(shù)名也可以不相同(一般設(shè)為相同?。.?dāng)兩者不同時,MATLAB將忽略函數(shù)名而確認函數(shù)文件名,因此調(diào)用時使用函數(shù)文件名。 (2)關(guān)于注釋說明部分。注釋說明包括三部分內(nèi)容:緊隨函數(shù)文件引導(dǎo)行之后以%開頭的第一注釋行。第一注釋行

4、及之后連續(xù)的注釋行。與在線幫助文本相隔一空行的注釋行。,(1) 函數(shù)文件的基本結(jié)構(gòu),函數(shù)調(diào)用的一般格式: 輸出實參表=函數(shù)名(輸入實參表) 注意:等號左邊是方括號,右邊輸入?yún)?shù)用括號,(2)函數(shù)文件的調(diào)用,例5.1 編寫函數(shù)文件求半徑為r的圓的面積和周長 function s,p=fcircle(r) %FCIRCLE calculate the area and perimeter of a circle of radii r %r 圓半徑 %s 圓面積 %p 圓周長 s=pi*r*r; p=2*pi*r; 以上函數(shù)文件以文件名fcircle.m存入c:matlab7workmas下,然后在

5、MATLAB命令窗口調(diào)用該函數(shù): s,p=fcircle(10),函數(shù)的遞歸調(diào)用 例:利用遞歸調(diào)用函數(shù)文件factor.m: function f=factor(n) if n=1 f=1; else f=factor(n-1)*n; end 在命令文件main5_1.m中調(diào)用函數(shù)文件factor.m求s=1!+2!+3!+4!+5!。,(2)函數(shù)文件的調(diào)用,函數(shù)所傳遞參數(shù)的可調(diào)性 在調(diào)用函數(shù)時,MATLAB用兩個永久變量nargin和nargout分別記錄調(diào)用該函數(shù)時的輸入實參和輸出實參的個數(shù)。只要在函數(shù)文件中包含這兩個變量,就可以準確地知道該函數(shù)文件被調(diào)用時的輸入輸出參數(shù)個數(shù),從而決定函數(shù)

6、如何進行處理 例:nargin用法示例,(2)函數(shù)文件的調(diào)用,函數(shù)文件examp.m: function fout=charray(a,b,c) if nargin=1 fout=a; elseif nargin=2 fout=a+b; elseif nargin=3 fout=(a*b*c)/2; end 命令文件main5_2.m: x=1:3;y=1;2;3; examp(x) examp(x,y) examp(x,y,3),(2)函數(shù)文件的調(diào)用,全局變量用命令global定義。函數(shù)文件的內(nèi)部變量是局部的,與其他函數(shù)文件及MATLAB工作空間相互隔離 例 全局變量應(yīng)用示例。 先建立函數(shù)文

7、件wadd.m,該函數(shù)將輸入的參數(shù)加權(quán)相加。 function f=wadd(x,y) global ALPHA BETA f=ALPHA*x+BETA*y; 在命令窗口中輸入: global ALPHA BETA ALPHA=1; BETA=2; s=wadd(1,2),(3)全局變量和局部變量,5.1.3 數(shù)據(jù)的輸入輸出指令,input函數(shù) disp函數(shù) pause函數(shù),input函數(shù),調(diào)用格式為: A=input(提示信息,選項); 其中提示信息為一個字符串,用于提示用戶輸入什么樣的數(shù)據(jù)。 如果在input函數(shù)調(diào)用時采用s選項,則允許用戶輸入一個字符串。例如,想輸入一個人的姓名,可采用命

8、令: xm=input(What is your name?,s),disp函數(shù),調(diào)用格式為 disp(輸出項) 其中輸出項既可以為字符串,也可以為矩陣。 注意:用disp函數(shù)顯示矩陣時將不顯示矩陣的名字,而且其格式更緊密,且不留任何沒有意義的空行。 例5.2 求一元二次方程ax2 +bx+c=0的根。,例 求一元二次方程ax2 +bx+c=0的根。 程序如下: a=input(a=?); b=input(b=?); c=input(c=?); d=b*b-4*a*c; x=(-b+sqrt(d)/(2*a),(-b-sqrt(d)/(2*a); disp(x1=,num2str(x(1),x

9、2=,num2str(x(2);,其調(diào)用格式為: pause(延遲秒數(shù)) 如果省略延遲時間,直接使用pause,則將暫停程序,直到用戶按任一鍵后程序繼續(xù)執(zhí)行。 若要強行中止程序的運行可使用Ctrl+C命令。,pause函數(shù),5.1.4 選擇結(jié)構(gòu)- if語句,if語句 在MATLAB中,if語句有3種格式。 switch語句 try語句,語句格式為: if 條件 語句組 end 當(dāng)條件成立時,則執(zhí)行語句組,執(zhí)行完之后繼續(xù)執(zhí)行if語句的后繼語句,若條件不成立,則直接執(zhí)行if語句的后繼語句,1.單分支if語句,雙分支if語句格式為: if 條件 語句組1 else 語句組2 end 當(dāng)條件成立時,執(zhí)

10、行語句組1,否則執(zhí)行語句組2,語句組1或語句組2執(zhí)行后,再執(zhí)行if語句的后繼語句。,2.雙分支if語句,例 計算分段函數(shù)值 程序如下: x=input(請輸入x的值:); if x=10 y=cos(x+1)+sqrt(x*x+1); else y=x*sqrt(x+sqrt(x); end y,多分支if語句格式為: if 條件1 語句組1 elseif 條件2 語句組2 elseif 條件m 語句組m else 語句組m+1 end,3.多分支if語句,例5.2 輸入一個字符,若為大寫字母,則輸出其后繼字符,若為小寫字母,則輸出其前導(dǎo)字符,若為數(shù)字字符則輸出其對應(yīng)的數(shù)值,若為其他字符則原樣

11、輸出。 程序如下: c=input(請輸入一個字符,s); if c=A end,3.多分支if語句,5.1.4 選擇結(jié)構(gòu)- switch語句,switch語句 其語句格式為: switch 表達式 case 值1 語句組1 case 值2 語句組2 case 值m 語句組m otherwise 語句組m+1 end,例 某商場對顧客所購買的商品實行打折銷售,已知打折標準,求所售商品的實際銷售價格 程序如下: price=input(請輸入商品價格); switch fix(price/100) case 0,1 rate=0; case 2,3,4 rate=3/100; case num2

12、cell(5:9) rate=5/100; case num2cell(10:24) rate=8/100; case num2cell(25:49) rate=10/100; otherwise rate=14/100; end price=price*(1-rate),5.1.4 選擇結(jié)構(gòu)- switch語句,5.1.4 選擇結(jié)構(gòu)-try語句,語句格式為: try 語句組1 catch 語句組2 end try語句先試探性執(zhí)行語句組1,如果語句組1在執(zhí)行過程中出現(xiàn)錯誤,則將錯誤信息賦給保留的lasterr變量,并轉(zhuǎn)去執(zhí)行語句組2。這種試探性執(zhí)行語句是其他高級語言所沒有的。,5.1.4 選擇

13、結(jié)構(gòu)-try語句,例 矩陣乘法運算要求兩矩陣的維數(shù)相容,否則會出錯。先求兩矩陣的乘積,若出錯,則自動轉(zhuǎn)去求兩矩陣的點乘 程序如下:main5_3.m A=1,2,3;4,5,6; B=7,8,9;10,11,12; try C=A*B; catch C=A.*B; end C lasterr %顯示出錯原因,5.1.5 循環(huán)結(jié)構(gòu),循環(huán)語句 for語句 while語句 循環(huán)的嵌套,5.1.5 循環(huán)結(jié)構(gòu)- for語句,1. for語句 語句格式為: for 循環(huán)變量=表達式1:表達式2:表達式3 循環(huán)體語句 end,for語句更一般的格式: for 循環(huán)變量=矩陣表達式 循環(huán)體語句 end 執(zhí)行過

14、程是依次將矩陣的各列元素賦給循環(huán)變量,然后執(zhí)行循環(huán)體語句,直至各列元素處理完畢。實際上,“表達式1:表達式2:表達式3”是一個僅為一行的矩陣(行向量),因而列向量是單個數(shù)據(jù)。,5.1.5 循環(huán)結(jié)構(gòu)- for語句,例 已知5個學(xué)生4門功課的成績,求每名學(xué)生的總成績 程序如下: s=0; a=65,76,56,78;98,83,74,85;76,67,78,79;98,58,42,73;67,89,76,87; for k=a s=s+k; end disp(s);,5.1.5 循環(huán)結(jié)構(gòu)- for語句,5.1.5 循環(huán)結(jié)構(gòu)- while語句,while語句的一般格式為: while (條件) 循環(huán)

15、體語句 end 其執(zhí)行過程為:若條件成立,則執(zhí)行循環(huán)體語句,執(zhí)行后再判斷條件是否成立,如果不成立則跳出循環(huán),其他常用指令,Continue Break,continue命令,通常用于for或while循環(huán)語句中,與if語句一起使用,達到跳過本次循環(huán),去執(zhí)行下一輪循環(huán)的目的 分析下列程序,說明運行結(jié)果及原因 a=3;b=6; for i=1:3 b=b+1; if i2 continue %當(dāng)if條件滿足時不再執(zhí)行后面語句,跳 出本次循環(huán)。 end a=a+2 %當(dāng)i2時不執(zhí)行該語句 end,運行結(jié)果: a=7 b=9,i2,a=7 b=9,break命令,通常用于for或while循環(huán)語句中,

16、與if語句一起使用,中止本次循環(huán),跳出最內(nèi)層循環(huán) 分析下列程序,說明運行結(jié)果及原因 a=3;b=6; for i=1:3 b=b+1; if i2 break %當(dāng)if條件滿足時不再執(zhí)行循環(huán) end a=a+2 end,運行結(jié)果: a=7 b=9,i2,a=3 b=6,程序流控制語句 return指令 終止當(dāng)前的命令序列,把控制返回到調(diào)用函數(shù)或鍵盤。 keyboard 把“控制權(quán)”交給鍵盤。 error和warning 顯示出錯和警告信息。,5.1.5 循環(huán)的嵌套,如果一個循環(huán)結(jié)構(gòu)的循環(huán)體又包括一個循環(huán)結(jié)構(gòu),就稱為循環(huán)的嵌套,或稱為多重循環(huán)結(jié)構(gòu)。可以按照嵌套層數(shù),分別叫做二重循環(huán)、三重循環(huán)等。

17、處于內(nèi)部的循環(huán)叫作內(nèi)循環(huán),處于外部的循環(huán)叫作外循環(huán)。 在設(shè)計多重循環(huán)時,要特別注意內(nèi)、外循環(huán)之間的關(guān)系,以及各語句放置的位置,不要搞錯。,補充:1 Matlab命令執(zhí)行過程,2 MATLAB程序設(shè)計原則和技巧,1、后面的內(nèi)容是程序的注解,要善于運用注解使程序更具可讀性。 2、養(yǎng)成在主程序開頭用clear指令清除變量的習(xí)慣,以消除工作空間中其他變量對程序運行的影響。但注意在子程序中不要用clear。 3、參數(shù)值要集中放在程序的開始部分,以便維護。要充分利用MATLAB工具箱提供的指令來執(zhí)行所要進行的運算,在語句行之后輸入分號使其及中間結(jié)果不在屏幕上顯示,以提高執(zhí)行速度。,4、程序盡量模塊化,也就

18、是采用主程序調(diào)用子程序的方法,將所有子程序合并在一起來執(zhí)行全部的操作。 5、充分利用Debugger來進行程序的調(diào)試(設(shè)置斷點、單步執(zhí)行、連續(xù)執(zhí)行) 6、設(shè)置好MATLAB的工作路徑,以便程序運行。,1. 矢量化盡可能使用向量和矩陣操作,例 求,t=cputime;s=0; for i=1:100000 s=s+(1/2i+1/3i); end cputime-t ans =,向量運算 t=cputime; n=1:100000; s=sum(1./2.n+1./3.n); cputime-t ans =,陣列預(yù)分配 陣列矩陣的初始化工作;在成熟規(guī)范的商業(yè)軟件里必不可少,同時也是一個良好的編程

19、素養(yǎng)的體現(xiàn)。 變量管理 matlab中的變量類型是不需要預(yù)先定義的,編程過程中不要改變變量的使用類型。 例如chardouble, realcomplex x=23; 程序,x=A 4 .盡量使用MATLAB內(nèi)部定義的函數(shù),本節(jié)內(nèi)容是需上機應(yīng)用的重點內(nèi)容。 程序出錯主要為兩類: 1、語法錯誤 如缺(或)等,在運行時可檢測出大多數(shù)該類錯誤,并指出錯在哪一行。 2、算法錯誤 邏輯上的錯誤,不易查找,遇到此類錯誤時需耐心。一般可考慮如下方法:直接調(diào)試法和工具調(diào)試法,5.1.6 程序的調(diào)試,直接調(diào)試法是指在利用matlab的相關(guān)指令對程序進行調(diào)試。 主要方法有: 刪除句尾分號和利用disp語句,顯示中

20、間結(jié)果; 在適當(dāng)位置加上keyboard語句,使程序暫停; 在函數(shù)定義行之前加上%注釋,使之變成腳本語言; 利用echo指令,使運行時在屏幕上逐行顯示文件內(nèi)容。 Ctrl+C強行停止程序,直接調(diào)試法,直接調(diào)試法一些輔助函數(shù): 常用指令:return, echo, input, pause, keyboard, break; echo命令可以使文件命令在執(zhí)行時可見,這對程序的 調(diào)試和演示很有用。 keyboard請求鍵盤輸入命令 pause等待用戶反映命令 警告命令:error, warning.lasterr,lastwarn, 提示命令:warndlg,errordlg,工具調(diào)試法,工具調(diào)試

21、法是指利用matlab的相關(guān)調(diào)試工具對程序進行調(diào)試 調(diào)試步驟為:,(1)在程序可疑處設(shè)置斷點; (2)執(zhí)行程序; (3)檢查程序運行至斷點處變 量當(dāng)前值 (4)在程序中一步步執(zhí)行 (5)結(jié)束調(diào)試狀態(tài)。 (6)取消斷點。,1Debug菜單項 該菜單項用于程序調(diào)試,需要與Breakpoints菜單項配合使用。 Step:單步運行 Step In:單步運行,調(diào)用函數(shù)時進入函數(shù)程序 Step Out: Run:運行 Go Until Cursor:運行到光標處,工具調(diào)試法調(diào)試菜單項,2Breakpoints菜單項(matlab7.0以上菜單內(nèi)容在Debug菜單中包括) Set/Clear Breakpoint:設(shè)置/清除斷點 Set/Modify Conditional Br

溫馨提示

  • 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論