第7章+Matlab程序設(shè)計(jì)_第1頁
第7章+Matlab程序設(shè)計(jì)_第2頁
第7章+Matlab程序設(shè)計(jì)_第3頁
第7章+Matlab程序設(shè)計(jì)_第4頁
第7章+Matlab程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、,Matlab程序設(shè)計(jì)與應(yīng)用,Matlab Programming dp(1,:)=sin(10*angle).2; polar(angle,dp(1,:);,2020/10/23,5,腳本程序 可調(diào)用Matlab工作域內(nèi)所有數(shù)據(jù),且產(chǎn)生的變量均為全局變量 以引導(dǎo)的是注釋行,不可執(zhí)行 運(yùn)行此程序前,要將此m文件放在當(dāng)前目錄,2020/10/23,6,Matlab函數(shù)程序的基本結(jié)構(gòu),comp.m 函數(shù)程序范例 function y=comp(x) %comp(x): comp(x)=(x+10)2*x; z=x+10; y=z.2*x; return y %函數(shù)結(jié)束并返回y,2020/10/23

2、,7,函數(shù)程序 定義的局部變量僅在內(nèi)部有效 文件名與函數(shù)名對(duì)應(yīng) help命令可查看該m文件第一塊連續(xù)的注釋 應(yīng)在第一塊連續(xù)注釋中包含函數(shù)的特征信息,2020/10/23,8,函數(shù)設(shè)計(jì)中可以接受不同數(shù)目,類型參數(shù),function out=arg_adjust(a,b,c) %本函數(shù)用以示例輸入不同數(shù)目參數(shù)的設(shè)計(jì) if(nargin=1) out=a; elseif(nargin=2) out=(a.2+b.2); elseif(nargin=3) out=(a*b*c)/2; end,2020/10/23,9,參數(shù)與變量,局部變量與全局變量 變量名稱開頭必須是一個(gè)英文字母,后可接字母、數(shù)字和下

3、劃線 變量名區(qū)分大小寫 變量默認(rèn)為局部變量,global申明全局變量,2020/10/23,10,4.2 流程控制,Matlab提供四種基本流程控制,表:四種基本流程控制功能,2020/10/23,11,選擇語句,if 判斷表達(dá)式 執(zhí)行語句 end,if 判斷表達(dá)式 執(zhí)行語句 else 執(zhí)行語句 end,if 判斷表達(dá)式一 執(zhí)行語句塊一 elseif 判斷表達(dá)式二 執(zhí)行語句塊二 elseif 判斷表達(dá)式三 執(zhí)行語句塊三 else 執(zhí)行語句塊四 end,2020/10/23,12,If語句 if語句稱為條件執(zhí)行語句。 其關(guān)鍵字包括if、else、elseif和end。,格式之一: if 表達(dá)式

4、語句組A end 其工作流程如圖所示。,注意:語句中的end是決不可少的,沒有它,在邏輯表達(dá)式為0時(shí),就找不到繼續(xù)執(zhí)行程序的入口。,2020/10/23,13,格式之二: if 表達(dá)式 語句組A else 語句組B end 其工作流程如圖所示。,2020/10/23,14,格式之三: if 表達(dá)式1 語句組A elseif 表達(dá)式2 語句組B else 語句組C end 工作流程原理如圖所示。,2020/10/23,15,選擇語句 else部分可以是復(fù)合語句或其他控制語句 if語句嵌套時(shí),if和else必須對(duì)應(yīng) else子句中嵌套if時(shí),形成elseif結(jié)構(gòu),可實(shí)現(xiàn)多路選擇結(jié)構(gòu),2020/10

5、/23,16,分支語句,switch 分支條件(數(shù)值或字符串) case 數(shù)值(或字符串)條件一 執(zhí)行語句一 case 數(shù)值(或字符串)條件二 執(zhí)行語句二 otherwise 執(zhí)行語句N end,2020/10/23,17,分支語句,R=input(Who are you?) switch R case Mike display(Have a nice day, Mike!) case Rose display(You look good, Rose.) case Jerry display(Long time no see, Jerry) otherwise display(Nice to

6、meet you.) end,2020/10/23,18,分支語句 Matlab的switch無C語言的break Matlab只執(zhí)行第一個(gè)檢驗(yàn)成功的case C語言檢驗(yàn)全部case,2020/10/23,19,循環(huán)語句 for循環(huán)(對(duì)循環(huán)次數(shù)的判斷),例: for i=1:5 for j=1:6 a(i,j)=1/(i+j-1); end end,for 計(jì)數(shù)器初始值:增量:終止值 指令 end,2020/10/23,20,循環(huán)語句 for循環(huán)一定以end結(jié)束,中間的都認(rèn)為是循環(huán)內(nèi)容 避免用i,j作循環(huán)變量名,它們是虛數(shù)單位 循環(huán)語句中的分號(hào);可屏蔽中間結(jié)果輸出 循環(huán)語句鋸齒形對(duì)齊,易讀 f

7、or循環(huán)效率不如向量運(yùn)算的高,2020/10/23,21,循環(huán)語句,練習(xí): 使用for循環(huán)語句 實(shí)現(xiàn)計(jì)算n!,function result = factorial(n) %using for loop if(n=0) return else result=1; for i=1:1:n result=result*i; end end,2020/10/23,22,循環(huán)語句,例 已知求y的表達(dá)式,當(dāng)n=100時(shí),求y的值。 程序如下: y=0; n=100; for i=1:n y=y+1/i/i; end y 為提高程序的執(zhí)行速度,常用向量運(yùn)算來代替循環(huán)操作: n=100; i=1:n; f=

8、1./i.2; y=sum(f),2020/10/23,23,循環(huán)語句 while循環(huán)(對(duì)邏輯條件判斷),例: n=1;m=9;a=0; while nm a=a+n*m; n=n+1; m=m-2; end,運(yùn)算指令 while 循環(huán)條件 指令 end,2020/10/23,24,while語句為條件循環(huán)語句,循環(huán)執(zhí)行一組語句,執(zhí)行次數(shù)不確定,而是決定于一些邏輯條件。其關(guān)鍵字包括while、end、break等。 基本調(diào)用格式: while 表達(dá)式 語句A end,2020/10/23,25,循環(huán)語句,練習(xí): 使用while循環(huán)語句 實(shí)現(xiàn)計(jì)算n!,function result = fact

9、orial(n) %using while loop if(n=0) result=1; else result=1;i=1; while in i=i+1; result=result*i; end end,2020/10/23,26,4.3 函數(shù)文件 函數(shù)文件的基本結(jié)構(gòu) 函數(shù)文件由function語句引導(dǎo),其基本結(jié)構(gòu)為: function 輸出形參表=函數(shù)名(輸入形參表) 注釋說明部分 函數(shù)體語句 其中以function開頭的一行為引導(dǎo)行,表示該M文件是一個(gè)函數(shù)文件。函數(shù)名的命名規(guī)則與變量名相同。輸入形參為函數(shù)的輸入?yún)?shù),輸出形參為函數(shù)的輸出參數(shù)。當(dāng)輸出形參多于一個(gè)時(shí),則應(yīng)該用方括號(hào)括起來

10、。,2020/10/23,27,函數(shù)調(diào)用 函數(shù)調(diào)用的一般格式是: 輸出實(shí)參表=函數(shù)名(輸入實(shí)參表) 要注意的是,函數(shù)調(diào)用時(shí)各實(shí)參出現(xiàn)的順序、個(gè)數(shù),應(yīng)與函數(shù)定義時(shí)形參的順序、個(gè)數(shù)一致,否則會(huì)出錯(cuò)。函數(shù)調(diào)用時(shí),先將實(shí)參傳遞給相應(yīng)的形參,從而實(shí)現(xiàn)參數(shù)傳遞,然后再執(zhí)行函數(shù)的功能。 在MATLAB中,函數(shù)可以嵌套調(diào)用,即一個(gè)函數(shù)可以調(diào)用別的函數(shù),甚至調(diào)用它自身。一個(gè)函數(shù)調(diào)用它自身稱為函數(shù)的遞歸調(diào)用。,2020/10/23,28,例: 利用函數(shù)的遞歸調(diào)用,求n!。 n!本身就是以遞歸的形式定義的: 顯然,求n!需要求(n-1)!,這時(shí)可采用遞歸調(diào)用。遞歸調(diào)用函數(shù)文件factor.m如下: function

11、 f=factor(n) if n=1 f=1; else f=factor(n-1)*n; %遞歸調(diào)用求(n-1)! end,2020/10/23,29,4.4 程序調(diào)試,語法錯(cuò)誤 函數(shù)參數(shù)類型 矩陣階數(shù) 錯(cuò)誤命令字母 循環(huán)命令不匹配 標(biāo)點(diǎn)符號(hào); , ( ) 等,2020/10/23,30,常見錯(cuò)誤一:程序文件名錯(cuò),m_file_name (回車) ? Undefined function or variable m_file_name. 可能出錯(cuò)原因: 1.程序文件名錯(cuò) 2.大小寫錯(cuò) 3.m文件不在搜索路徑中,改正對(duì)策: 1.核對(duì)文件名 2.檢查大小寫,統(tǒng)一命名風(fēng)格 3.拷貝到或包含路徑,

12、2020/10/23,31,常見錯(cuò)誤二:操作符錯(cuò), operator (回車) ? operator | missing operator, comma, or semi-colon. 可能出錯(cuò)原因: 1.錯(cuò)用或漏用操作符,不恰當(dāng)?shù)亩禾?hào)、分號(hào)等 2.運(yùn)行程序文件,但加了后綴.m,Matlab認(rèn)為是變量運(yùn)算,改正對(duì)策: 1.檢查操作符 2.去掉文件名后綴,2020/10/23,32,例:矩陣階數(shù)不符的情況 A=1, 2; 3, 4; B=1, 2, 3; 4, 5, 6; 7, 8, 9; A*B ? Error using = * Inner matrix dimension must agr

13、ee.,2020/10/23,33,其他常用調(diào)試方法 將每步執(zhí)行結(jié)果輸出到命令窗口,檢查中間結(jié)果 去除屏蔽輸出的 ; 號(hào) 注意變量的值的變化,2020/10/23,34,其他常用調(diào)試方法 逐部分注釋可疑代碼 如何快速注釋大段代碼?,2020/10/23,35,盡量使用Matlab已有函數(shù) 使用經(jīng)測試過的功能程序 MathWorks網(wǎng)站FileExchange,2020/10/23,36,4.5 程序設(shè)計(jì)優(yōu)化,例 已知求y的表達(dá)式,當(dāng)n=100時(shí),求y的值。 程序如下: y=0; n=100; for i=1:n y=y+1/i/i; end y 為提高程序的執(zhí)行速度,常用向量運(yùn)算來代替循環(huán)操作

14、: n=100; i=1:n; f=1./i.2; y=sum(f),使用向量操作,2020/10/23,37,數(shù)據(jù)預(yù)定義 Matlab中不必預(yù)先定義 越界賦值時(shí),系統(tǒng)額外操作 預(yù)估變量最大維數(shù),function y=test1 for i=1:50 y(i)=det(pascal(i); end,function y=test2 y=zeros(50,1); for i=1:50 y(i)=det(pascal(i); end,test2運(yùn)行時(shí)間 顯著少于test1。 使用cputime函數(shù) 分析兩種方式的 優(yōu)劣。,2020/10/23,38,發(fā)揮MATLAB的最高性能 加速代碼的常用技巧

15、矩陣存儲(chǔ)管理 ,2020/10/23,39,數(shù)據(jù)的取舍與保留,1向0方向取整數(shù)函數(shù)fix 格式:I=fix(X) 返回X中每個(gè)元素的最靠近零的整數(shù)。若X為復(fù)數(shù),則分別對(duì)X的實(shí)部和虛部取整。,2向-方向取整數(shù)函數(shù)floor 格式:I=floor(X) 返回X中每個(gè)元素的最靠近該元素的最小整數(shù)。若X為復(fù)數(shù),則分別對(duì)X的實(shí)部和虛部取最小整。,3向-方向取整數(shù)函數(shù)ceil 格式:I=ceil(X) 返回X中每個(gè)元素的最靠近該元素的最大整數(shù)。若X為復(fù)數(shù),則分別對(duì)X的實(shí)部和虛部取最大整數(shù)。 4四舍五入取整數(shù)函數(shù)round 格式:I=round(X) 返回X中每個(gè)元素的最靠近該元素的整數(shù)。若X為復(fù)數(shù),則分別對(duì)X的實(shí)部和虛部取整數(shù)。,2020/10/23,40,5模數(shù)余函數(shù)mod 格式:M=mod(X,Y) 返回X關(guān)于Y的余數(shù)。 6除后余數(shù)函數(shù)rem 格式:M=rem(X,Y) 功能:返回X關(guān)于Y的余數(shù)。,7符號(hào)函數(shù)sign 格式:s=sign(X) 如果X大于零,則返回1;如果X等于零,則返回

溫馨提示

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