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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

A=magic(6)得

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

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

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

lp=find(p~=0)'得

lp=259121316202327303134

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

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

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

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

1.if語句根據復雜程度,if語句有三種形式。

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

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

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

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

while語句的結構形式為

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

【例2-4-2】求MATLAB中的最大實數。

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

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

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

x1=8.9885e+307系統(tǒng)的最大浮點實數為(2-eps)*21023,其十進制形式為realmax=1.7977e+308。兩者數量級接近,但還是相差將近一倍,這是因為我們每次把x翻一番,故求得的數可能比最大數小不到一半目前二十六頁\總數四十頁\編于七點系統(tǒng)的最大浮點實數為(2-eps)*21023,其十進制形式為

realmax=1.7977e+308兩者數量級接近,但還是相差將近一倍,這是因為我們每次把x翻一番,故求得的數可能比最大數小不到一半。如果把程序中的x=2*x改為x=1.1*x,結果就會準確一些,得到

目前二十七頁\總數四十頁\編于七點如果把程序中的x=2*x改為x=1.1*x,結果就會準確一些,得到目前二十八頁\總數四十頁\編于七點

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

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

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

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

3.for語句

for語句的結構形式為

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

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

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

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

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目前三十三頁\總數四十頁\編于七點目前三十四頁\總數四十頁\編于七點

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

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

4.switch語句

switch-case-otherwise語句

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論