第周邏輯判斷及流程控制_第1頁
第周邏輯判斷及流程控制_第2頁
第周邏輯判斷及流程控制_第3頁
第周邏輯判斷及流程控制_第4頁
第周邏輯判斷及流程控制_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

注意,前面的單個(gè)等號表示賦值,后面的雙等號則表示關(guān)系運(yùn)算。式中2+2==4是關(guān)系運(yùn)算,它的優(yōu)先級高,算出的結(jié)果給a賦值,為了改善可讀性,最好加上括號,寫成a=(2+2==4),表明是把括號內(nèi)的關(guān)系式的結(jié)果給a賦值,但表示關(guān)系運(yùn)算的相等符號仍必須用雙等號。目前一頁\總數(shù)四十頁\編于七點(diǎn)MATLAB中的關(guān)系運(yùn)算都適用于矩陣,它是對矩陣的各個(gè)元素進(jìn)行元素群運(yùn)算,因此兩個(gè)相比較的矩陣必須有相同的階數(shù),輸出的結(jié)果也是同階矩陣。例如鍵入

A=magic(6)得

A=3516261924 3327212325 3192222720 82833171015 30534121416 43629131811目前二頁\總數(shù)四十頁\編于七點(diǎn)要找到此矩陣中所有被3整除的元素,并在其位置上標(biāo)以1,可以用表2-4中的rem函數(shù),rem(A,3)表示A除以3的余數(shù),余數(shù)為零就是整除。鍵入

p=(rem(A,3)==0)得

p=001001100100010010001001100100010010目前三頁\總數(shù)四十頁\編于七點(diǎn)rem(A,3)表示A除以3的余數(shù),余數(shù)為零就是整除。目前四頁\總數(shù)四十頁\編于七點(diǎn)關(guān)系運(yùn)算中還包括某些條件判斷,例如判斷矩陣元素中有無NaN、Inf值,矩陣是否為實(shí)數(shù)陣、稀疏陣或空陣等,它們不能直接用上述六種關(guān)系符簡單地表述,MATLAB把它們編成了專用的函數(shù)以備直接調(diào)用,見表2-5。目前五頁\總數(shù)四十頁\編于七點(diǎn)目前六頁\總數(shù)四十頁\編于七點(diǎn)目前七頁\總數(shù)四十頁\編于七點(diǎn)[j,k]=find(p~=0)給出p矩陣中不為零的元素的兩個(gè)下標(biāo),find(p~=0)或lp=find(p~=0)給出p矩陣中不為零的元素的順序號。矩陣元素是按列排序號的,先排第一列,再排第二列……,依次排完后,再確定它們的順序號。一個(gè)6×6的矩陣的36個(gè)元素的序號排列見表2-6。因此一個(gè)m×n陣中下標(biāo)為(j,k)的元素,其序號為l=(k-1)*n+j。目前八頁\總數(shù)四十頁\編于七點(diǎn)[j,k]=find(p~=0)給出p矩陣中不為零的元素的兩個(gè)下標(biāo)目前九頁\總數(shù)四十頁\編于七點(diǎn)鍵入

lp=find(p~=0)'得

lp=259121316202327303134

目前十頁\總數(shù)四十頁\編于七點(diǎn)find(p~=0)或lp=find(p~=0)給出p矩陣中不為零的元素的順序號。矩陣元素是按列排序號的,先排第一列,再排第二列……,依次排完后,再確定它們的順序號。一個(gè)6×6的矩陣的36個(gè)元素的序號排列見表2-6。因此一個(gè)m×n陣中下標(biāo)為(j,k)的元素,其序號為l=(k-1)*n+j。可以看出這些序號確實(shí)對應(yīng)于p中的l元素。矩陣的序號(index)與下標(biāo)(subscript)是一一對應(yīng)的。目前十一頁\總數(shù)四十頁\編于七點(diǎn)邏輯量只能取0(假)和1(真)兩個(gè)值。邏輯量的基本運(yùn)算為“與(&)”、“或(|)”和“非(~)”三種。有時(shí)也包括“異或(xor)”,不過“異或”可以用三種基本運(yùn)算組合而成。兩個(gè)邏輯量經(jīng)這三種邏輯運(yùn)算后的輸出仍然是邏輯量,表示邏輯量的輸入/輸出關(guān)系的表稱為真值表,見表2-7。目前十二頁\總數(shù)四十頁\編于七點(diǎn)所有的算法語言中都有邏輯運(yùn)算。MATLAB的特點(diǎn)是使邏輯運(yùn)算用于元素群,得出同階的0-1矩陣。為了按列、按行判斷一群元素的邏輯值,它又增加了兩種對元素群的邏輯運(yùn)算函數(shù)all(全為真)和any(不全為假),見表2-5。現(xiàn)在來看邏輯式u=p|~p,這是把p和非p求“或”。得

u=111111111111111111111111111111111111目前十三頁\總數(shù)四十頁\編于七點(diǎn)~p就是把p中的0元素?fù)Q成1,1元素?fù)Q成0。在p和非p對應(yīng)位置上的元素,必有一個(gè)是1,把p和~p“或”起來,一定是全1。目前十四頁\總數(shù)四十頁\編于七點(diǎn)all和any后的輸入變量應(yīng)為矩陣,它是按列運(yùn)算的。從它們的定義可知

all(p)=000000(列中有一個(gè)元素為0,即得0)all(u)=111111(列中元素為全1,才得1) any(p)=111111(列中有一個(gè)元素為1,即得1)

目前十五頁\總數(shù)四十頁\編于七點(diǎn)目前十六頁\總數(shù)四十頁\編于七點(diǎn)計(jì)算機(jī)程序通常都是從前到后逐條執(zhí)行的。但有時(shí)也會根據(jù)實(shí)際情況,中途改變執(zhí)行的次序,稱為流程控制。MATLAB設(shè)有四種流程控制的語言結(jié)構(gòu),即if語句、while語句、for語句和switch語句。

1.if語句根據(jù)復(fù)雜程度,if語句有三種形式。

(1)if(表達(dá)式)語句組A,end。其流程見圖2-1(a)。執(zhí)行到此語句時(shí),計(jì)算機(jī)先檢驗(yàn)if后的邏輯表達(dá)式,如為1,就執(zhí)行語句組A;如為0,就跳過語句組A,直接執(zhí)行end后的后續(xù)語句。注意,這個(gè)end是決不可少的,沒有它,在表達(dá)式為0時(shí),就找不到繼續(xù)執(zhí)行的程序入口。目前十七頁\總數(shù)四十頁\編于七點(diǎn)(2)if(表達(dá)式)語句組A,else語句組B,end。其流程見圖2-1(b)。執(zhí)行到此語句時(shí),計(jì)算機(jī)先檢驗(yàn)if后的(邏輯)表達(dá)式,如為1,就執(zhí)行語句組A;如為0,就執(zhí)行語句組B。else用來標(biāo)志語句組B的執(zhí)行條件,同時(shí)也標(biāo)志語句組A的結(jié)束(免去了end)。同樣,最后的end是不可少的,沒有它,執(zhí)行完語句組B后,就找不到進(jìn)入后續(xù)程序的入口。

(3)if(表達(dá)式1)語句組A,elseif(表達(dá)式2)語句組B,else語句組C,end。其流程見圖2-1(c)。前兩種形式的if語句都是兩分支的程序結(jié)構(gòu),要實(shí)現(xiàn)兩個(gè)以上分支的結(jié)構(gòu)就得采用含elseif的結(jié)構(gòu)。圖中表示的是三分支的情況。在語句中間可加入多個(gè)elseif以形成多個(gè)分支,只是程序結(jié)構(gòu)顯得冗長。目前十八頁\總數(shù)四十頁\編于七點(diǎn)圖2-1if語句的三種程序結(jié)構(gòu)形式目前十九頁\總數(shù)四十頁\編于七點(diǎn)【例2-4-1】輸入數(shù)n,判斷其奇偶性。程序如下:

n=input('n='),ifrem(n,2)==0A='even',elseA='odd',end運(yùn)行此程序時(shí),程序要求用戶輸入一個(gè)數(shù),然后判斷該數(shù)是奇數(shù)還是偶數(shù)。所以該程序共有兩個(gè)出口。實(shí)際上這個(gè)程序并不全面,如果用戶根本未鍵入任何數(shù)就回車,程序會判斷為“odd”(請讀者考慮其原因)。為了使程序在用戶無輸入時(shí)自動中止,可以把程序改為

clcclearn=7;ifisempty(n)==1A='empty'elseifrem(n,2)==0A='even'elseA='odd'end實(shí)際上這個(gè)程序仍不全面,它不能用于負(fù)數(shù),請讀者分析其原因。目前二十頁\總數(shù)四十頁\編于七點(diǎn)運(yùn)行此程序時(shí),程序要求用戶輸入一個(gè)數(shù),然后判斷該數(shù)是奇數(shù)還是偶數(shù)。所以該程序共有兩個(gè)出口。目前二十一頁\總數(shù)四十頁\編于七點(diǎn)實(shí)際上這個(gè)程序并不全面,如果用戶根本未鍵入任何數(shù)就回車,程序會判斷為“odd”(請讀者考慮其原因)。為了使程序在用戶無輸入時(shí)自動中止,可以把程序改為ifisempty(n)==1A='empty',elseifrem(n,2)==0A='even',elseA='odd',end目前二十二頁\總數(shù)四十頁\編于七點(diǎn)2.while語句

while語句的結(jié)構(gòu)形式為

while(表達(dá)式)語句組A,end其流程見圖2-2。執(zhí)行到此語句時(shí),計(jì)算機(jī)先檢驗(yàn)while后的邏輯表達(dá)式,如為1,它就執(zhí)行語句組A;到end處后,它跳回到while的入口,再檢驗(yàn)表達(dá)式;如還是1,再執(zhí)行語句組A;周而復(fù)始,直到表達(dá)式不成立(結(jié)果為零)為止。此時(shí)跳過語句組A,直接執(zhí)行end后的后續(xù)語句。while語句與if語句的不同在于它的分支中是循環(huán)地執(zhí)行某個(gè)語句組,故稱為循環(huán)語句。目前二十三頁\總數(shù)四十頁\編于七點(diǎn)圖2-2while語句流程圖目前二十四頁\總數(shù)四十頁\編于七點(diǎn)

【例2-4-2】求MATLAB中的最大實(shí)數(shù)。

解:我們設(shè)定一個(gè)數(shù)x,讓它不斷增大,直到MATLAB無法表示它的值,只能表示為inf為止。于是,可列出下列程序

clcclearx=1;whilex~=inf,x1=x;x=2*x;end,x1formatshorte其中我們先設(shè)x=1,進(jìn)入while循環(huán)。運(yùn)行這行程序,得

x1=8.9885e+307目前二十五頁\總數(shù)四十頁\編于七點(diǎn)先設(shè)x=1,進(jìn)入while循環(huán),只要x不等于inf,就把x加倍,直到x=inf。如果把此時(shí)的x顯示出來,它是無窮大,不是題中要找的數(shù)。要找的是變?yōu)闊o窮大之前的最大數(shù),因此在對x加倍之前,把它存在x1中,顯示的x1就是要求的最大數(shù)。運(yùn)行這行程序,得

x1=8.9885e+307系統(tǒng)的最大浮點(diǎn)實(shí)數(shù)為(2-eps)*21023,其十進(jìn)制形式為realmax=1.7977e+308。兩者數(shù)量級接近,但還是相差將近一倍,這是因?yàn)槲覀兠看伟褁翻一番,故求得的數(shù)可能比最大數(shù)小不到一半目前二十六頁\總數(shù)四十頁\編于七點(diǎn)系統(tǒng)的最大浮點(diǎn)實(shí)數(shù)為(2-eps)*21023,其十進(jìn)制形式為

realmax=1.7977e+308兩者數(shù)量級接近,但還是相差將近一倍,這是因?yàn)槲覀兠看伟褁翻一番,故求得的數(shù)可能比最大數(shù)小不到一半。如果把程序中的x=2*x改為x=1.1*x,結(jié)果就會準(zhǔn)確一些,得到

目前二十七頁\總數(shù)四十頁\編于七點(diǎn)如果把程序中的x=2*x改為x=1.1*x,結(jié)果就會準(zhǔn)確一些,得到目前二十八頁\總數(shù)四十頁\編于七點(diǎn)

【例2-4-3】求MATLAB的相對精度。

解:解題的思路是讓y不斷減小,直至MATLAB分不出1+y與1的差別為止。其程序?yàn)?/p>

clccleary=1;while1+y>1y1=y;y=y/2;end,y1結(jié)果為

y1=2.2204e-016目前二十九頁\總數(shù)四十頁\編于七點(diǎn)它就是MATLAB內(nèi)部給出的浮點(diǎn)數(shù)相對精度。目前三十頁\總數(shù)四十頁\編于七點(diǎn)

3.for語句

for語句的結(jié)構(gòu)形式為

fork=初值:增量:終值語句組A,end即它把語句組A反復(fù)執(zhí)行N次,每次執(zhí)行時(shí)程序中的k值不同。有多少個(gè)k值呢?可得

N=1+(終值-初值)/增量

【例2-4-4】用for語句求三角函數(shù)表的程序?yàn)閏lcclearforx=0:0.1:pi/4disp([x,sin(x),cos(x),tan(x)])end目前三十一頁\總數(shù)四十頁\編于七點(diǎn)所得的結(jié)果將和2.3節(jié)中的答案相同。這也可以看出,MATLAB的元素群運(yùn)算功能與一個(gè)for循環(huán)相當(dāng)。由于它不需每次檢驗(yàn)表達(dá)式,因此運(yùn)算速度比for語句快得多。但是不能認(rèn)為它可全部取代for語句,由下例可以看出。目前三十二頁\總數(shù)四十頁\編于七點(diǎn)

【例2-4-5】列出構(gòu)成hilbert矩陣的程序,它需要兩重循環(huán):clcclearn=input('n='),formatrat%有理數(shù)形式fori=1:n,forj=1:n,h(i,j)=1/(i+j-1);end,end,h執(zhí)行時(shí),先按提示輸入n,比如輸入5,結(jié)果為

h=11/21/31/41/5 1/21/31/41/51/6 1/31/41/51/61/7 1/41/51/61/71/8 1/51/61/71/81/9目前三十三頁\總數(shù)四十頁\編于七點(diǎn)目前三十四頁\總數(shù)四十頁\編于七點(diǎn)

formatrat,n=input('n='),fori=1:nforj=1:nh(i,j)=1/(i+j-1);endendh為改善可讀性用縮進(jìn)方法。結(jié)果和上一結(jié)果相同,如本例中應(yīng)寫成:目前三十五頁\總數(shù)四十頁\編于七點(diǎn)由于我們現(xiàn)在是在MATLAB命令窗中直接輸入程序,因此不得不把它寫在一行中。此時(shí)要注意,在if、for、while與表達(dá)式之間應(yīng)留空格,在表達(dá)式與語句組之間必須用空格或逗號分隔,而在語句組的后面,必須要用逗號或分號來與end或else相分隔,否則,MATLAB會顯示出錯(cuò)信息并中止運(yùn)行。

break是中止循環(huán)的命令,在循環(huán)語句中,可用它在一定條件下跳出循環(huán),這是常常用到的。在多重循環(huán)中,break只能使程序跳出包含它的最內(nèi)部的那個(gè)循環(huán)。目前三十六頁\總數(shù)四十頁\編于七點(diǎn)

4.switch語句

switch-case-otherwise語句

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論