官术网_书友最值得收藏!

  • MATLAB 2020 從入門到精通
  • 黃少羅 閆聰聰編著
  • 2123字
  • 2021-08-12 17:18:27

4.3 程序結(jié)構(gòu)

對(duì)于一般的程序設(shè)計(jì)語言來說,程序結(jié)構(gòu)大致可以分為順序結(jié)構(gòu)、循環(huán)結(jié)構(gòu)與分支結(jié)構(gòu)3種。MATLAB程序設(shè)計(jì)語言也不例外,但是要比其他程序設(shè)計(jì)語言好學(xué)得多,因?yàn)槠湔Z法不像C語言那樣復(fù)雜,并且具有功能強(qiáng)大的工具箱,使得它成為科研工作者及學(xué)生最易掌握的軟件之一。下面將分別就上述3種程序結(jié)構(gòu)進(jìn)行介紹。

4.3.1 順序結(jié)構(gòu)

順序結(jié)構(gòu)是最簡(jiǎn)單、最易學(xué)的一種程序結(jié)構(gòu),它由多個(gè)MATLAB語句順序構(gòu)成,各語句之間用分號(hào)“;”隔開(若不加分號(hào),則必須分行編寫),程序執(zhí)行時(shí)也是按照由上至下的順序進(jìn)行的。

例4-14:方程求根運(yùn)算。

本實(shí)例求解一元二次方程ax2+bx+c=0的解,根據(jù)公式推導(dǎo)978-7-111-67080-3-Chapter04-57.jpg,根據(jù)定義abc的值,求2x2+3x+4=0的解。

解:MATLAB程序如下。

例4-15:矩陣除法運(yùn)算。

本實(shí)例求解矩陣的左除和右除。

解:MATLAB程序如下。

4.3.2 循環(huán)結(jié)構(gòu)

在利用MATLAB進(jìn)行數(shù)值實(shí)驗(yàn)或工程計(jì)算時(shí),用得最多的便是循環(huán)結(jié)構(gòu)了。在循環(huán)結(jié)構(gòu)中,被重復(fù)執(zhí)行的語句組稱為循環(huán)體。常用的循環(huán)結(jié)構(gòu)有兩種:for-end循環(huán)與while-end循環(huán)。下面分別簡(jiǎn)要介紹相應(yīng)的用法。

978-7-111-67080-3-Chapter04-61.jpgfor-end循環(huán)

在for-end循環(huán)中,循環(huán)次數(shù)一般情況下是已知的,除非用其他語句提前終止循環(huán)。這種循環(huán)以for開頭,以end結(jié)束,其一般形式如下。

其中,“表達(dá)式”通常為形如msn(s的默認(rèn)值為1)的向量,即變量的取值從m開始,以間隔s遞增一直到n,變量每取一次值,循環(huán)便執(zhí)行一次。事實(shí)上,這種循環(huán)在上一節(jié)就已經(jīng)用到了。下面來看一個(gè)特別的for-end循環(huán)示例。

例4-16:創(chuàng)建一個(gè)10階Hilbert矩陣。

解:MATLAB程序如下。

978-7-111-67080-3-Chapter04-65.jpgwhile-end循環(huán)

如果不知道所需要的循環(huán)到底要執(zhí)行多少次,那么就可以選擇while-end循環(huán)。這種循環(huán)以while開頭,以end結(jié)束,其一般形式如下。

其中,“表達(dá)式”即循環(huán)控制語句,一般是由邏輯運(yùn)算或關(guān)系運(yùn)算及一般運(yùn)算組成的表達(dá)式。若表達(dá)式的值非零,則執(zhí)行一次循環(huán),否則停止循環(huán)。這種循環(huán)方式在編寫某一數(shù)值算法時(shí)用得非常多。一般來說,能用for-end循環(huán)實(shí)現(xiàn)的程序也能用while-end循環(huán)實(shí)現(xiàn),如下例所示。

例4-17:函數(shù)求和運(yùn)算。

利用while-end循環(huán)求解978-7-111-67080-3-Chapter04-68.jpg。

解:MATLAB程序如下。

1)編寫名為qiuhe.m的M文件。

2)在命令行窗口中運(yùn)行,結(jié)果如下。

4.3.3 分支結(jié)構(gòu)

這種程序結(jié)構(gòu)也叫選擇結(jié)構(gòu),即根據(jù)表達(dá)式值的情況來選擇執(zhí)行哪些語句。在編寫較復(fù)雜的算法時(shí)一般都會(huì)用到此結(jié)構(gòu)。MATLAB編程語言提供了3種分支結(jié)構(gòu):if-else-end結(jié)構(gòu)、switch-case-end結(jié)構(gòu)和try-catch-end結(jié)構(gòu)。其中較常用的是前兩種。下面分別介紹這3種結(jié)構(gòu)的用法。

978-7-111-67080-3-Chapter04-71.jpgif-else-end結(jié)構(gòu)

這種結(jié)構(gòu)也是復(fù)雜結(jié)構(gòu)中最常用的一種分支結(jié)構(gòu),具有以下3種形式。

1.形式1

說明 若表達(dá)式的值非零,則執(zhí)行if與end之間的語句組,否則直接執(zhí)行end后面的語句。

例4-18:請(qǐng)求未處理文本輸入。

解:MATLAB程序如下。

1)編寫名為domore.m的M文件。

2)在命令行窗口中運(yùn)行,結(jié)果如下。

2.形式2

說明 若表達(dá)式的值非零,則執(zhí)行語句組1,否則執(zhí)行語句組2。通過M文件,畫出下列分段函數(shù)所表示的曲面。

例4-19:矩陣變換。

本實(shí)例編寫一個(gè)分段函數(shù)的程序。

解:MATLAB程序如下。

1)編寫名為example的M文件。

2)在命令行窗口中運(yùn)行,結(jié)果如下。

3.形式3

說明 程序執(zhí)行時(shí)先判斷表達(dá)式1的值,若非零則執(zhí)行語句組1,然后執(zhí)行end后面的語句,否則判斷表達(dá)式2的值,若非零則執(zhí)行語句組2,然后執(zhí)行end后面的語句,否則繼續(xù)上面的過程。如果所有的表達(dá)式都不成立,則執(zhí)行else與end之間的語句組n

例4-20:將隨機(jī)矩陣中小于0.5的元素替換為0。

解:MATLAB程序如下。

978-7-111-67080-3-Chapter04-86.jpgswitch-case-end結(jié)構(gòu)

一般來說,這種分支結(jié)構(gòu)也可以由if-else-end結(jié)構(gòu)實(shí)現(xiàn),但那樣會(huì)使程序變得更加復(fù)雜且不易維護(hù)。switch-case-end分支結(jié)構(gòu)一目了然,而且更便于后期維護(hù)。這種結(jié)構(gòu)的形式如下。

其中,switch后面的“變量或表達(dá)式”可以是任何類型的變量或表達(dá)式。如果變量或表達(dá)式的值與其后某個(gè)case后的常量表達(dá)式的值相等,就執(zhí)行這個(gè)case和下一個(gè)case之間的語句組,否則執(zhí)行otherwise后面的語句組n+1;執(zhí)行完一個(gè)語句組,程序便退出該分支結(jié)構(gòu),執(zhí)行end后面的語句。下面來看一個(gè)這種結(jié)構(gòu)的例子。

例4-21:方法判斷。

本實(shí)例編寫一個(gè)使用方法判斷的程序。

解:MATLAB程序如下。

1)編寫名為mm6的M文件。

2)在命令行窗口中運(yùn)行,結(jié)果如下。

例4-22:乘積評(píng)定。

編寫一個(gè)學(xué)生成績(jī)?cè)u(píng)定函數(shù),要求若該生考試成績(jī)?cè)?5~100之間,則評(píng)定為“優(yōu)秀”;若在70~84之間,則評(píng)定為“良好”;若在60~69之間,則評(píng)定為“及格”;若在60分以下,則評(píng)定為“不及格”。

解:MATLAB程序如下。

1)首先建立名為grade_assess.m的函數(shù)文件。

2)構(gòu)造一個(gè)姓名名單以及相應(yīng)的分?jǐn)?shù),來看一下程序的運(yùn)行結(jié)果。

978-7-111-67080-3-Chapter04-96.jpgtry-catch-end結(jié)構(gòu)

有些MATLAB參考書中沒有提到這種結(jié)構(gòu),因?yàn)樯鲜鰞煞N分支結(jié)構(gòu)足以處理實(shí)際中的各種情況。但是這種結(jié)構(gòu)在程序調(diào)試時(shí)很有用,因此在這里簡(jiǎn)單介紹一下這種分支結(jié)構(gòu)。其一般形式如下。

在程序不出錯(cuò)的情況下,這種結(jié)構(gòu)只有語句組1被執(zhí)行;若程序出現(xiàn)錯(cuò)誤,那么錯(cuò)誤信息將被捕獲,并存放在lasterr變量中,然后執(zhí)行語句組2;若在執(zhí)行語句組2的時(shí)候,程序又出現(xiàn)錯(cuò)誤,那么程序?qū)⒆詣?dòng)終止,除非相應(yīng)的錯(cuò)誤信息被另一個(gè)try-catch-end結(jié)構(gòu)捕獲。下面來看一個(gè)例子。

例4-23:矩陣的串聯(lián)。

利用try-catch-end結(jié)構(gòu)調(diào)試程序,顯示無法垂直串聯(lián)矩陣的原因。

解:MATLAB程序如下。

在利用MATLAB編程解決實(shí)際問題時(shí),可能要提前終止for與while等循環(huán)結(jié)構(gòu),有時(shí)還可能要顯示必要的出錯(cuò)或警告信息、顯示批處理文件的執(zhí)行過程等,而這些特殊要求的實(shí)現(xiàn)就需要用到本節(jié)所要講述的程序流程控制命令,如break命令、pause命令、continue命令、return命令、echo命令、error命令與warning命令等。

例4-24:查看內(nèi)存。

顯示函數(shù)的執(zhí)行過程。

解:MATLAB程序如下。

主站蜘蛛池模板: 兴国县| 禹州市| 沁水县| 额敏县| 德兴市| 资中县| 高要市| 翁源县| 浮山县| 伊金霍洛旗| 牟定县| 永和县| 高雄县| 朝阳县| 通河县| 垦利县| 瑞金市| 嵊州市| 石柱| 黎城县| 化隆| 古丈县| 固始县| 繁峙县| 三穗县| 襄樊市| 将乐县| 大庆市| 奎屯市| 普宁市| 咸宁市| 武乡县| 黄石市| 策勒县| 轮台县| 拜泉县| 阿鲁科尔沁旗| 建湖县| 贵定县| 宣武区| 如东县|