版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Matlab控制流1、for循環(huán)結(jié)構(gòu)for循環(huán)結(jié)構(gòu)的語法形式為:forx=array(commands)end其中,for指令后的變量x稱為循環(huán)變量,而for與end之間的組命令稱為循環(huán)體。循環(huán)體被重復(fù)執(zhí)行的次數(shù)是確定的,該次數(shù)由for指令后面的數(shù)組array的列數(shù)決定。換言之,循環(huán)變量依次取數(shù)組的各列,對于每個變量值,循環(huán)體被執(zhí)行一次。例1一個簡單的for循環(huán)示例。fori=1:10;%i依次取1,2,…,10x(i)=i;%對每個i值,重復(fù)執(zhí)行由該指令構(gòu)成的循環(huán)體end;x
%要求顯示運(yùn)行后數(shù)組x的值x=12345678910
說明:循環(huán)不會因為在循環(huán)體內(nèi)對循環(huán)變量重新置值而中斷;在for后面的表達(dá)式中的數(shù)組可以為任何合法的Matlab數(shù)組;循環(huán)結(jié)構(gòu)可以嵌套使用;為了得到高效代碼,應(yīng)盡量提高代碼的向量化程度,而避免使用循環(huán)結(jié)構(gòu);為了得到高效代碼,在循環(huán)指令之前應(yīng)盡量對數(shù)組進(jìn)行預(yù)定義。2、while循環(huán)結(jié)構(gòu)while循環(huán)結(jié)構(gòu)的語法形式為:whileexpression(commands)end在while和end之間的“組命令”被稱為循環(huán)體。當(dāng)Matlab碰到while指令時,首先檢測expression的值,如其值為邏輯真(非零),則執(zhí)行組命令。當(dāng)組命令執(zhí)行完畢,繼續(xù)檢測表達(dá)式的值,若表達(dá)式值仍為真,循環(huán)執(zhí)行組命令;而一旦表達(dá)式值為假時,結(jié)束循環(huán)。例2Fibonacci數(shù)組的元素滿足Fibonacci規(guī)則:;且?,F(xiàn)要求該數(shù)組中第一個大于10000的元素。
a(1)=1;a(2)=1;i=2;whilea(i)<=10000 a(i+1)=a(i-1)+a(i); i=i+1;end;i,a(i),
i=21ans=10946while循環(huán)和for循環(huán)的區(qū)別在于,while循環(huán)結(jié)構(gòu)的循環(huán)體被執(zhí)行的次數(shù)不是確定的,而for結(jié)構(gòu)中循環(huán)體的執(zhí)行次數(shù)則是確定的。一般情況下,表達(dá)式的值都是標(biāo)量值,但是Matlab允許它為一個數(shù)組,此時只有當(dāng)該數(shù)組所有元素均為真時,Matlab才會執(zhí)行循環(huán)體。如while指令后的表達(dá)式為空數(shù)組,Matlab認(rèn)為表達(dá)式值為假,而不執(zhí)行循環(huán)體。3、if-else-end分支結(jié)構(gòu)if-else-end指令為程序流提供了一種分支結(jié)構(gòu),它有多種形式,其中最簡單用法是:如果表達(dá)式expression為真,執(zhí)行組命令commands,否則跳過該組命令。指令形式如下:ifexpression(commands)end如果判決條件expression為一個空數(shù)組,Matlab認(rèn)為條件為假(false)。如果有兩種選擇,采用下面的結(jié)構(gòu):ifexpression(commands1)else(commands2)end如果選擇項多于兩個,采用下面的結(jié)構(gòu):ifexpression1判決表達(dá)式1(commands1)若表達(dá)式1為真時,執(zhí)行組命令commands1,結(jié)束此結(jié)構(gòu)elseifexpression2判決表達(dá)式2(commands2)表達(dá)式1為假,而表達(dá)式2為真,執(zhí)行commands2,結(jié)束此結(jié)構(gòu)……else(commandsk)當(dāng)前面所有表達(dá)式均為假時,執(zhí)行該組命令end表達(dá)式有時由多個邏輯子表達(dá)式組成,Matlab將盡可能少地檢測這次子表達(dá)式的值。例如,表達(dá)式為:(子表達(dá)式1|子表達(dá)式2),當(dāng)Matlab檢測到子表達(dá)式1的值為真時,它就認(rèn)為表達(dá)式值為真,而不再對子表達(dá)式2進(jìn)行檢測。又如,表達(dá)式為:(子表達(dá)式1&子表達(dá)式2),當(dāng)Matlab檢測到子表達(dá)式1的值為假時,它就認(rèn)為表達(dá)式值為假的,從而跳過該結(jié)構(gòu)。if指令判決和break的配合使用,可以強(qiáng)行終止for循環(huán)或while循環(huán)。例3一個簡單的分支結(jié)構(gòu)。cost=10;number=12;ifnumber>8sums=number*0.95*cost;end,sums
sums=114.0000
例4用for循環(huán)指令來尋求Fibonacc數(shù)組中第一個大于10000的元素。n=100;a=ones(1,n);fori=3:na(i)=a(i-1)+a(i-2);ifa(i)>=10000a(i),break;%跳出所在的一級循環(huán)end;end,i
ans=10946i=214、switch-case結(jié)構(gòu)switch-case指令的一般語法結(jié)構(gòu)形式如下:switchexex為一標(biāo)量或字符串casetest1(commands1)當(dāng)ex等于test1時,執(zhí)行組命令1,然后跳出該結(jié)構(gòu)casetest2……casetestk(commandsk)當(dāng)ex等于testk時,執(zhí)行該組命令k,然后跳出該結(jié)構(gòu)otherwiseotherwise指令可以不存在(commands)表達(dá)式不等于前面所有檢測值時,則執(zhí)行該組命令end當(dāng)遇到switch結(jié)構(gòu)時,Matlab將表達(dá)式的值依次和各個case指令后面的檢測值進(jìn)行比較。如果比較結(jié)果為假,則取下一個檢測值再來比較,而一旦比較結(jié)果為真,Matlab將執(zhí)行相應(yīng)的一組命令,然后跳出該結(jié)構(gòu)。如果所有的比較結(jié)構(gòu)都為假,即表達(dá)式的值和所有的檢測值都不等,Matlab將執(zhí)行otherwise后面的一組命令,由此可見上述結(jié)構(gòu)保證了至少有一組命令會得到執(zhí)行。switch指令后面的表達(dá)式應(yīng)為一個標(biāo)量或者為一個字符串。對于標(biāo)量形式的表達(dá)式,比較這樣進(jìn)行:表達(dá)式==檢測值i。而對于字符串,Matlab將調(diào)用函數(shù)strcmp來實現(xiàn)比較:strcmp(表達(dá)式,檢測值i)。strcmp用來比較兩個字符串是否完全相同
比如:
>>a=‘學(xué)生’;b=‘學(xué)生';
>>strcmp(a,b)
ans=
1
>>返回1,則表示兩個字符串是相同的;否則就不同case指令后面的檢測值不僅可以為一個標(biāo)量值或一個字符串,還可以為一個元胞數(shù)組。如果一個檢測值時一個元胞數(shù)組,Matlab將把表達(dá)式的值和該元胞數(shù)組中的所有元素進(jìn)行比較,如果元胞數(shù)組中某個元素和表達(dá)式的值相等,Matlab認(rèn)為此次比較結(jié)果為真,從而執(zhí)行與該檢測值相應(yīng)的一組命令。元胞數(shù)組是MATLAB中特有的一種數(shù)據(jù)類型,是數(shù)組的一種,其內(nèi)部元素可以是屬于不同的數(shù)據(jù)類型,概念理解上,可以認(rèn)為它和c語言里面的結(jié)構(gòu)體、c++里面的對象很類似。matlab中用char(n)來定義,當(dāng)然最基本的是包裹式定義,比如先定義了一個字符型的變量a,并賦值,然后定義一個長整型b,并賦值…最后用大括號來打包裹c(diǎn)={a,b}來形成元胞c,當(dāng)然進(jìn)一步可以將c再包裹進(jìn)去如d={a,b,c,‘a(chǎn)bc’,123}都是合法的。例4
學(xué)生的成績管理,用來演示switch結(jié)構(gòu)的應(yīng)用。clear;%劃分區(qū)域:滿分(100),優(yōu)秀(90-99),良好(80-89),及格(60-79),不及格(<60)fori=1:10;a{i}=89+i;b{i}=79+i;c{i}=69+i;d{i}=59+i;end;c=[d,c];Name={'Jack','Marry','Peter','Rose','Tom'};Mark={72,83,56,94,100};Rank=cell(1,5);%創(chuàng)建一個含5個元素的框架數(shù)組S,它有三個域S=struct('Name',Name,'Marks',Mark,'Rank',Rank);%根據(jù)學(xué)生的分?jǐn)?shù),求出相應(yīng)的等級fori=1:5switchS(i).Markscase100S(i).Rank='滿分';caseaS(i).Rank='優(yōu)秀';caseb S(i).Rank='良好';casec S(i).Rank='及格';otherwise S(i).Rank='不及格';endend
%將學(xué)生姓名,得分,登記等信息打印出來。disp(['學(xué)生姓名','得分','等級']);disp('')fori=1:5;disp([S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank]);end;
Matlab的switch指令不同于C語言的switch指令。當(dāng)matlab檢測到某個檢測值和表達(dá)式的值相等,將執(zhí)行相應(yīng)的一組命令,執(zhí)行完畢,自動跳出switch結(jié)構(gòu),而無需使用break指令。5、try-catch結(jié)構(gòu)try-catch指令的語法結(jié)構(gòu)形式如下:try(commands1)組命令1總被執(zhí)行。若正確,則跳出此結(jié)構(gòu)catch(commands2)僅當(dāng)組命令1出現(xiàn)執(zhí)行錯誤,組命令2才被執(zhí)行end只有當(dāng)Matlab在執(zhí)行組命令1時出現(xiàn)了錯誤后,組命令2才會被執(zhí)行??烧{(diào)用lasterr函數(shù)查詢出錯原因。如果函數(shù)lasterr的運(yùn)行結(jié)果為一個空串,則表明組命令1被成功執(zhí)行了。當(dāng)執(zhí)行組命令2時又出錯,Matlab將終止該結(jié)構(gòu)。例5try-catch結(jié)構(gòu)應(yīng)用實例:對魔方陣的行進(jìn)行援引,當(dāng)“行下標(biāo)”超出魔方陣的最大行數(shù)時,將改向?qū)ψ詈笠恍械脑@示“出錯”警告。clear,N=4;A=magic(3);%設(shè)置3行3列魔方陣AtryA_N=A(N,:)%取A的第N行元素catchA_end=A(end,:)%如果取A(N,:)出錯,則改取A的最后一行endlasterr
%顯示出錯原因A_end=492ans=Indexexceedsmatrixdimensions.
6、控制流的其他常用指令1)return指令通常,當(dāng)被調(diào)函數(shù)執(zhí)行完后,Matlab會自動地把控制轉(zhuǎn)至主調(diào)函數(shù)或者指令窗。如果在被調(diào)函數(shù)中插入了return指令,可以強(qiáng)制Matlab結(jié)束執(zhí)行該函數(shù)并把控制轉(zhuǎn)出。2)input和keyboard指令(1)inputinput指令將Matlab的“控制權(quán)”暫時交給用戶。此后,用戶通過鍵盤鍵入數(shù)值、字符串或者表達(dá)式,并經(jīng)“回車”把鍵入內(nèi)容輸入工作空間,同時把“控制權(quán)”交還給Matlab。常用的格式如下:v=input(’message’)將用戶鍵入的內(nèi)容賦給變量vv=input(’message’,’s’)將用戶鍵入的內(nèi)容作為字符串賦給變量v指令中’message’是將要顯示在屏幕上的字符串,這是必不可少的。對于第一種調(diào)用格式,用戶可以輸入數(shù)值、字符串、元胞數(shù)組等各種形式的數(shù)據(jù)。對于第二種調(diào)用格式,不管鍵入什么,總以字符串形式賦給變量v(2)keyboard當(dāng)程序遇到keyboard時,Matlab將“控制權(quán)”交給鍵盤,用戶可以從鍵盤輸入各種合法的Matlab指令,只有當(dāng)用戶使用return指令結(jié)束輸入后,“控制權(quán)”才交還給程序。它與input的不同在于:它允許輸入任意多個Matlab指令,而input只能輸入賦給變量的“值”,即數(shù)值、字符串或元胞數(shù)組等。3)yesinput指令yesinput指令是一個智能輸入指令,它提供了一個缺省輸入值,并可以對輸入范圍進(jìn)行檢查。其調(diào)用形式如下:v=yesinput(’Prompt’,Default,Possib)該指令涉及用戶和Matlab的交互操作,因此無法在notebook中運(yùn)行?!疨rompt’為文字提示,Default為缺省設(shè)置“值”,possib為可選“值”的范圍。4)pause指令pause暫停執(zhí)行文件,等待用戶按任意鍵繼續(xù)pause(n)在繼續(xù)執(zhí)行之前,暫停n秒5)break指令break指令導(dǎo)致包含有該指令的while、for指令的終止。通過使用break指令,可不比等待循環(huán)的自然結(jié)束,而根據(jù)循環(huán)內(nèi)部另設(shè)的某種條件是否滿足,去決定是否退出循環(huán)。6)error和warning指令在編寫M文件時,常用的警示指令有:error(’message’)顯示出錯信息message,
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人股權(quán)抵押合同范例
- 三方合同:學(xué)生就業(yè)定向合作
- 專屬應(yīng)屆畢業(yè)生:個人租賃合同范本
- 中學(xué)教務(wù)主任聘任合同樣本
- 單項木工承包合同
- 中外采購與供應(yīng)合同范本
- 專業(yè)水處理設(shè)備維護(hù)合同細(xì)則
- 三人合伙經(jīng)營合同范本
- 不孕不育治療服務(wù)合同范文
- 三人合作經(jīng)營合同協(xié)議書范文
- 2024年山東省高考政治試卷真題(含答案逐題解析)
- 煙葉復(fù)烤能源管理
- 食品安全管理員考試題庫298題(含標(biāo)準(zhǔn)答案)
- 執(zhí)業(yè)醫(yī)師資格考試《臨床執(zhí)業(yè)醫(yī)師》 考前 押題試卷絕密1 答案
- 2024年山東濟(jì)寧初中學(xué)業(yè)水平考試地理試卷真題(含答案詳解)
- 社會保險課件教學(xué)課件
- 訂婚協(xié)議書手寫模板攻略
- 準(zhǔn)備單元 雪地上的“足跡”(教學(xué)設(shè)計)-2023-2024學(xué)年五年級下冊科學(xué)大象版
- 宇航用商業(yè)現(xiàn)貨(COTS)器件保證指南-編制說明
- 音樂學(xué)科閱讀方案
- 《立體倉庫鋼結(jié)構(gòu)貨架技術(shù)規(guī)范(征求意見稿)》
評論
0/150
提交評論