- MATLAB/Simulink權(quán)威指南:開發(fā)環(huán)境、程序設(shè)計、系統(tǒng)仿真與案例實戰(zhàn)
- 徐國保 張冰 石麗梅 吳凡
- 3234字
- 2019-12-20 20:33:30
3.1 程序結(jié)構(gòu)
MATLAB語言有三種常用的程序控制結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。MATLAB語言里的任何復(fù)雜程序都可以由這三種基本結(jié)構(gòu)組成。
3.1.1 順序結(jié)構(gòu)
順序結(jié)構(gòu)是MATLAB語言程序的最基本的結(jié)構(gòu),是指按照程序中的語句排列順序依次執(zhí)行,每行語句是從左往右執(zhí)行,不同行語句是從上往下執(zhí)行。一般數(shù)據(jù)的輸入和輸出、數(shù)據(jù)的計算和處理程序都是順序結(jié)構(gòu)。順序結(jié)構(gòu)的基本流程如圖3-1所示,程序先執(zhí)行語句A,然后執(zhí)行語句B,最后執(zhí)行語句C。

圖3-1 順序結(jié)構(gòu)流程圖
1.?dāng)?shù)據(jù)的輸入
MATLAB語言要從鍵盤輸入數(shù)據(jù),可以使用input函數(shù),該函數(shù)的調(diào)用格式有如下兩種。
1)x=input('提示信息')
其中,提示信息表示字符串,用于提示用戶輸入什么樣的數(shù)據(jù),等待用戶從鍵盤輸入數(shù)據(jù),賦值給變量x。
例如,從鍵盤中輸入變量x,可以用下面的命令實現(xiàn):

執(zhí)行該語句時,命令行窗口顯示提示信息“輸入變量x:”,然后等待用戶從鍵盤輸入x的值。
2)str=input('提示信息','s')
其中,該格式用于用戶輸入一個字符串,賦值給字符變量str。
例如,用戶想從鍵盤輸入自己的名字,賦值給字符變量str,可以采用下面命令:

執(zhí)行該語句時,命令行窗口顯示提示信息“what's your name?”,然后等待用戶從鍵盤輸入字符變量str的值。
2.?dāng)?shù)據(jù)的輸出
MATLAB語言可以在命令窗口顯示輸出信息,可以用函數(shù)disp實現(xiàn),該函數(shù)的調(diào)用格式如下:

其中,輸出信息可以是字符串,也可以是矩陣信息。例如:

需要注意,用disp函數(shù)顯示矩陣信息將不顯示矩陣的變量名,輸出格式更緊湊,沒有空行。
【例3-1】 從鍵盤輸入a、b和c的值,求解一元二次方程ax2+bx+c=0的根。
程序代碼如下:

程序運行結(jié)果是:

再一次運行程序后的結(jié)果是:

由上面程序結(jié)果可知,MATLAB語言的數(shù)據(jù)輸入、數(shù)據(jù)處理和數(shù)據(jù)輸出命令都是按照順序結(jié)構(gòu)執(zhí)行的。
3.1.2 選擇結(jié)構(gòu)
MATLAB語言的選擇結(jié)構(gòu)是根據(jù)選定的條件成立或者不成立,分別執(zhí)行不同的語句。選擇結(jié)構(gòu)有下面三種常用語句:if語句、switch語句和try語句。
1.if語句
在MATLAB語言中,if語句有三種格式。
1)單項選擇結(jié)構(gòu)
單項選擇語句的格式如下:

當(dāng)條件成立時,執(zhí)行語句組,執(zhí)行完后繼續(xù)執(zhí)行end后面的語句;若條件不成立,則直接執(zhí)行end后面的語句。單項選擇程序結(jié)構(gòu)流程圖如圖3-2所示。

圖3-2 單項選擇結(jié)構(gòu)流程圖
【例3-2】 從鍵盤輸入一個值x,判斷當(dāng)x>0時,計算的值并顯示。
程序代碼如下:

程序運行結(jié)果如下:

再一次運行程序,輸入x=﹣2,程序結(jié)果是:

由上面的程序結(jié)果可知,當(dāng)條件不滿足時,就直接執(zhí)行end后面的語句。
2)雙項選擇結(jié)構(gòu)
雙項選擇語句的格式如下:

當(dāng)條件1成立時,執(zhí)行語句組1,否則執(zhí)行語句組2,之后繼續(xù)執(zhí)行end后面的語句。雙項選擇程序結(jié)構(gòu)流程圖如圖3-3所示。

圖3-3 雙項選擇結(jié)構(gòu)流程圖
【例3-3】 從鍵盤輸入一個值x,計算下面分段函數(shù)的值并顯示。

程序代碼如下:

程序運行結(jié)果是:

再一次運行程序,輸入x=﹣2,程序結(jié)果是:

該例題如果用單項選擇結(jié)構(gòu)也可以實現(xiàn),程序代碼如下:

3)多項選擇結(jié)構(gòu)
多項選擇語句的格式如下:

當(dāng)條件1成立時,執(zhí)行語句組1;否則當(dāng)條件2成立時,執(zhí)行語句組2;以此類推,最后執(zhí)行end后面的語句。需要注意,if和end必須配對使用。多項選擇程序的結(jié)構(gòu)流程圖如圖3-4所示。

圖3-4 多項選擇結(jié)構(gòu)流程圖
【例3-4】 從鍵盤輸入一個值x,用下面的分段函數(shù)實現(xiàn)符號函數(shù)的功能。

程序代碼如下:

程序運行結(jié)果如下:

若用MATLAB的符號函數(shù)sign驗證,可以得到同樣的結(jié)果:

2.switch語句
在MATLAB語言中,switch語句也用于多項選擇。根據(jù)表達式的值的不同,分別執(zhí)行不同的語句組。該語句的格式如下:

switch語句結(jié)構(gòu)流程圖如圖3-5所示。當(dāng)表達式的值等于表達式1的值時,執(zhí)行語句組1;當(dāng)表達式的值等于表達式2的值時,執(zhí)行語句組2;以此類推,當(dāng)表達式的值等于表達式m的值時,執(zhí)行語句組m;當(dāng)表達式的值不等于case所列表達式的值時,執(zhí)行語句組n。需要注意,當(dāng)任意一個case表達式為真,執(zhí)行完其后的語句組,直接執(zhí)行end后面的語句。

圖3-5 switch語句結(jié)構(gòu)流程圖
【例3-5】 某商場“十一”假期搞促銷活動,對顧客所購商品總價打折,折扣率標(biāo)準(zhǔn)如下,從鍵盤輸入顧客所購商品總價,計算打折后總價。

程序代碼如下:

num2cell函數(shù)的功能是將數(shù)值矩陣轉(zhuǎn)換為單元矩陣。程序運行結(jié)果如下:

3.try語句
在MATLAB語言里,try語句是一種試探性執(zhí)行語句,該語句的格式如下:

try語句先試探執(zhí)行語句組1,如果語句組1在執(zhí)行過程中出錯,則將錯誤信息賦值給系統(tǒng)變量lasterr,并轉(zhuǎn)去執(zhí)行語句組2。
【例3-6】 試用try語句求函數(shù)y=x?sin(x)的值,自變量的范圍為0≤x≤pi,步長為pi/10。
程序代碼如下:

程序運行結(jié)果如下:

3.1.3 循環(huán)結(jié)構(gòu)
循環(huán)結(jié)構(gòu)是MATLAB語言的一種非常重要的程序結(jié)構(gòu),是按照給定的條件,重復(fù)執(zhí)行指定的語句。MATLAB語言提供兩種循環(huán)結(jié)構(gòu)語句:循環(huán)次數(shù)確定的for循環(huán)語句和循環(huán)次數(shù)不確定的while循環(huán)語句。
1.for循環(huán)語句
for循環(huán)語句是MATLAB語言的一種重要的程序結(jié)構(gòu),是以指定次數(shù)重復(fù)執(zhí)行循環(huán)體內(nèi)的語句。for循環(huán)語句的格式如下:

其中
(1)表達式1的值為循環(huán)變量的初始值,表達式2的值為步長,表達式3的值為循環(huán)變量的終值;
(2)當(dāng)步長為1時,可以省略表達式2;
(3)當(dāng)步長為負值時,初值大于終值;
(4)循環(huán)體內(nèi)不能對循環(huán)變量重新設(shè)置;
(5)for循環(huán)允許嵌套使用;
(6)for和end配套使用,且小寫。
for循環(huán)語句的流程圖如圖3-6所示。首先計算3個表達式的值,將表達式1的值賦給循環(huán)變量k,然后判斷k值是否介于表達式1和表達式3的值之間,如果不是,結(jié)束循環(huán),如果是,則執(zhí)行循環(huán)體語句,k增加一個表達式2的步長,然后再判斷k值是否介于表達式1和表達式3的值之間,直到條件不滿足,結(jié)束循環(huán)為止。
【例3-7】 利用for循環(huán)語句,求解1~100的數(shù)字之和。
程序代碼如下:

圖3-6 for循環(huán)語句流程圖

程序運行結(jié)果如下:

【例3-8】 利用for循環(huán)語句,驗證當(dāng)n等于1000和1 000 000時,y的值。

程序代碼如下:

程序運行結(jié)果如下:

MATLAB是一種基于矩陣的語言,為了提高程序執(zhí)行速度,也可以用向量的點運算來代替循環(huán)操作。可以用下面的程序代替:

程序運行結(jié)果:

由以上程序結(jié)果可知,當(dāng)n都取值1 000 000時,用后一種方法編寫的程序比前一種方法的運算速度快很多。
循環(huán)的嵌套是指在一個循環(huán)結(jié)構(gòu)的循環(huán)體中又包含另一個循環(huán)結(jié)構(gòu),或稱為多重循環(huán)結(jié)構(gòu)。設(shè)計多重循環(huán)時要注意外循環(huán)和內(nèi)循環(huán)之間的關(guān)系,以及各循環(huán)體語句的放置位置。總的循環(huán)次數(shù)是外循環(huán)次數(shù)與內(nèi)循環(huán)次數(shù)的乘積。可以用多個for和end配套實現(xiàn)多重循環(huán)。
【例3-9】 利用for循環(huán)的嵌套語句,求解x(i,j)=i2+j2,i∈[1:4],j∈[5:1]。
程序代碼如下:

程序運行結(jié)果如下:

【例3-10】 若一個整數(shù)等于它的各個真因子之和,則稱該數(shù)為完數(shù)。利用for雙重循環(huán)語句,求解[1,10000]之間的所有完數(shù)。
程序代碼如下:

程序運行結(jié)果如下:

2.while循環(huán)語句
while循環(huán)語句是MATLAB語言的一種重要的程序結(jié)構(gòu),是在滿足條件下重復(fù)執(zhí)行循環(huán)體內(nèi)的語句,循環(huán)次數(shù)一般是不確定的。while循環(huán)語句的格式如下:

其中,當(dāng)條件表達式為真,就執(zhí)行循環(huán)體語句;否則,就結(jié)束循環(huán)。while和end匹配使用。
while循環(huán)結(jié)構(gòu)的流程圖如圖3-7所示。當(dāng)條件表達式為真,執(zhí)行循環(huán)體語句,修改循環(huán)控制變量,再次判斷表達式是否為真,直至條件表達式為假,跳出循環(huán)體。

圖3-7 while循環(huán)結(jié)構(gòu)流程圖
【例3-11】 利用while循環(huán)語句,求解sum=1+2+…+n≥800時,最小正整數(shù)n的值。
程序代碼如下:

程序運行結(jié)果如下:

【例3-12】 所謂水仙花數(shù)是指一個三位數(shù),各位數(shù)字的立方和等于該數(shù)本身,例如153=1 3+5 3+3 3,所以153是一個水仙花數(shù)。試用while循環(huán)語句編程找出100~999所有的水仙花數(shù)。
程序代碼如下:

程序運行結(jié)果如下:

3.1.4 程序控制命令
MATLAB語言有許多程序控制命令,主要有pause暫停命令、continue繼續(xù)命令、break中斷命令和return退出命令等。
1.pause命令
在MATLAB語言中,pause命令可以使程序運行停止,等待用戶按任意鍵繼續(xù),也可設(shè)定暫停時間。該命令的調(diào)用格式如下:

2.continue命令
MATLAB語言的continue命令一般用于for或while循環(huán)語句中,與if語句配套使用,達到跳出本次循環(huán),執(zhí)行下次循環(huán)的目的。
例如:

程序運行結(jié)果如下:

3.break命令
MATLAB語言的break命令一般用于for或while循環(huán)語句中,與if語句配套使用終止循環(huán),或跳出最內(nèi)層循環(huán)。
例如:

程序運行結(jié)果如下:

4.return命令
MATLAB語言的return命令一般用于直接退出程序,與if語句配套使用。
例如:

程序運行結(jié)果如下:

- Instant Raspberry Pi Gaming
- 高效能辦公必修課:Word圖文處理
- Deep Learning Quick Reference
- 基于LPC3250的嵌入式Linux系統(tǒng)開發(fā)
- Apache Hive Essentials
- 電腦上網(wǎng)直通車
- PostgreSQL Administration Essentials
- 大數(shù)據(jù)處理平臺
- Associations and Correlations
- Visual C++編程全能詞典
- Ceph:Designing and Implementing Scalable Storage Systems
- 計算機網(wǎng)絡(luò)安全
- 數(shù)據(jù)庫系統(tǒng)原理及應(yīng)用教程(第5版)
- Visual Basic.NET程序設(shè)計
- 運動控制系統(tǒng)應(yīng)用與實踐