




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、5.1 MATLAB程序設(shè)計(jì) 5.2 應(yīng)用實(shí)例,第5章 MATLAB程序設(shè)計(jì)及應(yīng)用,5.1 MATLAB程序設(shè)計(jì),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文件,例 建立一個(gè)命令文件將變量a,b的值互換,然后運(yùn)行該命令文件。 首先建立命令文件并以文件名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,將會(huì)執(zhí)行該命令文件。,1.建立新的M文件 (1
2、)菜單操作:MATLAB命令窗口的File菜單 New菜單項(xiàng) 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行 對(duì)程序的總體介紹 函數(shù)說明 對(duì)程序詳細(xì)描述 程序主體 注釋 解釋程序功能的文字 說明:除程序主體外,其他部分以%開頭。 P116 實(shí)例,1 腳本文件 沒有輸入和輸
3、出 由一系列指令組成 可在命令窗口直接運(yùn)行 產(chǎn)生的所有變量存儲(chǔ)在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)兩者不同時(shí),MATLAB將忽略函數(shù)名而確認(rèn)函數(shù)文件名,因此調(diào)用時(shí)使用函數(shù)文件名。 (2)關(guān)于注釋說明部分。注釋說明包括三部分內(nèi)容:緊隨函數(shù)文件引導(dǎo)行之后以%開頭的第一注釋行。第一注釋行
4、及之后連續(xù)的注釋行。與在線幫助文本相隔一空行的注釋行。,(1) 函數(shù)文件的基本結(jié)構(gòu),函數(shù)調(diào)用的一般格式: 輸出實(shí)參表=函數(shù)名(輸入實(shí)參表) 注意:等號(hào)左邊是方括號(hào),右邊輸入?yún)?shù)用括號(hào),(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ù)時(shí),MATLAB用兩個(gè)永久變量nargin和nargout分別記錄調(diào)用該函數(shù)時(shí)的輸入實(shí)參和輸出實(shí)參的個(gè)數(shù)。只要在函數(shù)文件中包含這兩個(gè)變量,就可以準(zhǔn)確地知道該函數(shù)文件被調(diào)用時(shí)的輸入輸出參數(shù)個(gè)數(shù),從而決定函數(shù)
6、如何進(jìn)行處理 例: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(提示信息,選項(xiàng)); 其中提示信息為一個(gè)字符串,用于提示用戶輸入什么樣的數(shù)據(jù)。 如果在input函數(shù)調(diào)用時(shí)采用s選項(xiàng),則允許用戶輸入一個(gè)字符串。例如,想輸入一個(gè)人的姓名,可采用命
8、令: xm=input(What is your name?,s),disp函數(shù),調(diào)用格式為 disp(輸出項(xiàng)) 其中輸出項(xiàng)既可以為字符串,也可以為矩陣。 注意:用disp函數(shù)顯示矩陣時(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ù)) 如果省略延遲時(shí)間,直接使用pause,則將暫停程序,直到用戶按任一鍵后程序繼續(xù)執(zhí)行。 若要強(qiáng)行中止程序的運(yùn)行可使用Ctrl+C命令。,pause函數(shù),5.1.4 選擇結(jié)構(gòu)- if語句,if語句 在MATLAB中,if語句有3種格式。 switch語句 try語句,語句格式為: if 條件 語句組 end 當(dāng)條件成立時(shí),則執(zhí)行語句組,執(zhí)行完之后繼續(xù)執(zhí)行if語句的后繼語句,若條件不成立,則直接執(zhí)行if語句的后繼語句,1.單分支if語句,雙分支if語句格式為: if 條件 語句組1 else 語句組2 end 當(dāng)條件成立時(shí),執(zhí)
10、行語句組1,否則執(zhí)行語句組2,語句組1或語句組2執(zhí)行后,再執(zhí)行if語句的后繼語句。,2.雙分支if語句,例 計(jì)算分段函數(shù)值 程序如下: x=input(請(qǐng)輸入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 輸入一個(gè)字符,若為大寫字母,則輸出其后繼字符,若為小寫字母,則輸出其前導(dǎo)字符,若為數(shù)字字符則輸出其對(duì)應(yīng)的數(shù)值,若為其他字符則原樣
11、輸出。 程序如下: c=input(請(qǐng)輸入一個(gè)字符,s); if c=A end,3.多分支if語句,5.1.4 選擇結(jié)構(gòu)- switch語句,switch語句 其語句格式為: switch 表達(dá)式 case 值1 語句組1 case 值2 語句組2 case 值m 語句組m otherwise 語句組m+1 end,例 某商場對(duì)顧客所購買的商品實(shí)行打折銷售,已知打折標(biāo)準(zhǔn),求所售商品的實(shí)際銷售價(jià)格 程序如下: price=input(請(qǐng)輸入商品價(jià)格); 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)錯(cuò)誤,則將錯(cuò)誤信息賦給保留的lasterr變量,并轉(zhuǎn)去執(zhí)行語句組2。這種試探性執(zhí)行語句是其他高級(jí)語言所沒有的。,5.1.4 選擇
13、結(jié)構(gòu)-try語句,例 矩陣乘法運(yùn)算要求兩矩陣的維數(shù)相容,否則會(huì)出錯(cuò)。先求兩矩陣的乘積,若出錯(cuò),則自動(dòng)轉(zhuǎn)去求兩矩陣的點(diǎ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 %顯示出錯(cuò)原因,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)變量=表達(dá)式1:表達(dá)式2:表達(dá)式3 循環(huán)體語句 end,for語句更一般的格式: for 循環(huán)變量=矩陣表達(dá)式 循環(huán)體語句 end 執(zhí)行過
14、程是依次將矩陣的各列元素賦給循環(huán)變量,然后執(zhí)行循環(huán)體語句,直至各列元素處理完畢。實(shí)際上,“表達(dá)式1:表達(dá)式2:表達(dá)式3”是一個(gè)僅為一行的矩陣(行向量),因而列向量是單個(gè)數(shù)據(jù)。,5.1.5 循環(huán)結(jié)構(gòu)- for語句,例 已知5個(gè)學(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語句一起使用,達(dá)到跳過本次循環(huán),去執(zhí)行下一輪循環(huán)的目的 分析下列程序,說明運(yùn)行結(jié)果及原因 a=3;b=6; for i=1:3 b=b+1; if i2 continue %當(dāng)if條件滿足時(shí)不再執(zhí)行后面語句,跳 出本次循環(huán)。 end a=a+2 %當(dāng)i2時(shí)不執(zhí)行該語句 end,運(yùn)行結(jié)果: a=7 b=9,i2,a=7 b=9,break命令,通常用于for或while循環(huán)語句中,
16、與if語句一起使用,中止本次循環(huán),跳出最內(nèi)層循環(huán) 分析下列程序,說明運(yùn)行結(jié)果及原因 a=3;b=6; for i=1:3 b=b+1; if i2 break %當(dāng)if條件滿足時(shí)不再執(zhí)行循環(huán) end a=a+2 end,運(yùn)行結(jié)果: a=7 b=9,i2,a=3 b=6,程序流控制語句 return指令 終止當(dāng)前的命令序列,把控制返回到調(diào)用函數(shù)或鍵盤。 keyboard 把“控制權(quán)”交給鍵盤。 error和warning 顯示出錯(cuò)和警告信息。,5.1.5 循環(huán)的嵌套,如果一個(gè)循環(huán)結(jié)構(gòu)的循環(huán)體又包括一個(gè)循環(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è)計(jì)多重循環(huán)時(shí),要特別注意內(nèi)、外循環(huán)之間的關(guān)系,以及各語句放置的位置,不要搞錯(cuò)。,補(bǔ)充:1 Matlab命令執(zhí)行過程,2 MATLAB程序設(shè)計(jì)原則和技巧,1、后面的內(nèi)容是程序的注解,要善于運(yùn)用注解使程序更具可讀性。 2、養(yǎng)成在主程序開頭用clear指令清除變量的習(xí)慣,以消除工作空間中其他變量對(duì)程序運(yùn)行的影響。但注意在子程序中不要用clear。 3、參數(shù)值要集中放在程序的開始部分,以便維護(hù)。要充分利用MATLAB工具箱提供的指令來執(zhí)行所要進(jìn)行的運(yùn)算,在語句行之后輸入分號(hào)使其及中間結(jié)果不在屏幕上顯示,以提高執(zhí)行速度。,4、程序盡量模塊化,也就
18、是采用主程序調(diào)用子程序的方法,將所有子程序合并在一起來執(zhí)行全部的操作。 5、充分利用Debugger來進(jìn)行程序的調(diào)試(設(shè)置斷點(diǎn)、單步執(zhí)行、連續(xù)執(zhí)行) 6、設(shè)置好MATLAB的工作路徑,以便程序運(yùn)行。,1. 矢量化盡可能使用向量和矩陣操作,例 求,t=cputime;s=0; for i=1:100000 s=s+(1/2i+1/3i); end cputime-t ans =,向量運(yùn)算 t=cputime; n=1:100000; s=sum(1./2.n+1./3.n); cputime-t ans =,陣列預(yù)分配 陣列矩陣的初始化工作;在成熟規(guī)范的商業(yè)軟件里必不可少,同時(shí)也是一個(gè)良好的編程
19、素養(yǎng)的體現(xiàn)。 變量管理 matlab中的變量類型是不需要預(yù)先定義的,編程過程中不要改變變量的使用類型。 例如chardouble, realcomplex x=23; 程序,x=A 4 .盡量使用MATLAB內(nèi)部定義的函數(shù),本節(jié)內(nèi)容是需上機(jī)應(yīng)用的重點(diǎn)內(nèi)容。 程序出錯(cuò)主要為兩類: 1、語法錯(cuò)誤 如缺(或)等,在運(yùn)行時(shí)可檢測出大多數(shù)該類錯(cuò)誤,并指出錯(cuò)在哪一行。 2、算法錯(cuò)誤 邏輯上的錯(cuò)誤,不易查找,遇到此類錯(cuò)誤時(shí)需耐心。一般可考慮如下方法:直接調(diào)試法和工具調(diào)試法,5.1.6 程序的調(diào)試,直接調(diào)試法是指在利用matlab的相關(guān)指令對(duì)程序進(jìn)行調(diào)試。 主要方法有: 刪除句尾分號(hào)和利用disp語句,顯示中
20、間結(jié)果; 在適當(dāng)位置加上keyboard語句,使程序暫停; 在函數(shù)定義行之前加上%注釋,使之變成腳本語言; 利用echo指令,使運(yùn)行時(shí)在屏幕上逐行顯示文件內(nèi)容。 Ctrl+C強(qiáng)行停止程序,直接調(diào)試法,直接調(diào)試法一些輔助函數(shù): 常用指令:return, echo, input, pause, keyboard, break; echo命令可以使文件命令在執(zhí)行時(shí)可見,這對(duì)程序的 調(diào)試和演示很有用。 keyboard請(qǐng)求鍵盤輸入命令 pause等待用戶反映命令 警告命令:error, warning.lasterr,lastwarn, 提示命令:warndlg,errordlg,工具調(diào)試法,工具調(diào)試
21、法是指利用matlab的相關(guān)調(diào)試工具對(duì)程序進(jìn)行調(diào)試 調(diào)試步驟為:,(1)在程序可疑處設(shè)置斷點(diǎn); (2)執(zhí)行程序; (3)檢查程序運(yùn)行至斷點(diǎn)處變 量當(dāng)前值 (4)在程序中一步步執(zhí)行 (5)結(jié)束調(diào)試狀態(tài)。 (6)取消斷點(diǎn)。,1Debug菜單項(xiàng) 該菜單項(xiàng)用于程序調(diào)試,需要與Breakpoints菜單項(xiàng)配合使用。 Step:單步運(yùn)行 Step In:單步運(yùn)行,調(diào)用函數(shù)時(shí)進(jìn)入函數(shù)程序 Step Out: Run:運(yùn)行 Go Until Cursor:運(yùn)行到光標(biāo)處,工具調(diào)試法調(diào)試菜單項(xiàng),2Breakpoints菜單項(xiàng)(matlab7.0以上菜單內(nèi)容在Debug菜單中包括) Set/Clear Breakpoint:設(shè)置/清除斷點(diǎn) Set/Modify Conditional Br
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 地?zé)崮芾庙?xiàng)目場地調(diào)研服務(wù)費(fèi)用協(xié)議
- 口腔門診護(hù)士規(guī)劃方案
- 體育素養(yǎng)面試題及答案
- 溫州瑞南220千伏輸變電工程環(huán)境影響報(bào)告表
- 精裝修公寓水電費(fèi)分?jǐn)偣芾矸?wù)合同
- 公寓銷售外包方案
- 資質(zhì)工作考核方案
- 化工廠吊裝方案
- 涂裝安全考試題及答案
- 平邑幼教面試題及答案
- 內(nèi)蒙古自治區(qū)通遼市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)及行政區(qū)劃代碼
- 螺旋溜槽安裝標(biāo)準(zhǔn)工藝
- 模具保養(yǎng)記錄表
- CNC機(jī)加工作業(yè)指導(dǎo)書
- 2022年人教版六年級(jí)下冊(cè)語文期末考試卷
- 《土地開發(fā)整理項(xiàng)目預(yù)算編制暫行辦法》
- 智能家居設(shè)備產(chǎn)業(yè)提質(zhì)增效行動(dòng)方案(參考意見稿)
- 安徽省評(píng)議公告的中小學(xué)教輔材料零售價(jià)格表
- 德龍自卸車合格證掃描件(原圖)
- 西子otis梯oh con6423中文調(diào)試手冊(cè)
- 串激電機(jī)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論