三個(gè)例子講解MATLAB三種循環(huán)

2017-03-06  by:CAE仿真在線  來源:互聯(lián)網(wǎng)

FOR循環(huán)

在for和end語(yǔ)句之間的{commands}按數(shù)組中的每一列執(zhí)行一次。在每一次迭代中,x被指定為數(shù)組的下一列,即在第n次循環(huán)中,x=array(:, n)。

如? for n=1:10

x(n)=sin(n*pi/10);

end

當(dāng)有一個(gè)等效的數(shù)組方法來解給定的問題時(shí),應(yīng)避免用For循環(huán)。例如,上面的例子可被重寫為

? n=1:10;

? x=sin(n*pi/10)

第二種方式執(zhí)行速度更快。

為了得到最大的速度,在For循環(huán)(While循環(huán))被執(zhí)行之前,應(yīng)預(yù)先分配數(shù)組。

WHILE循環(huán)

只要在表達(dá)式里的所有元素為真,就執(zhí)行while和end語(yǔ)句之間的{commands}。通常,表達(dá)式的求值給出一個(gè)標(biāo)量值,但數(shù)組值也同樣有效。在數(shù)組情況下,所得到數(shù)組的所有元素必須都為真??紤]下列例子:


? num=0;EPS=1;

? while (1+EPS)>1

EPS=EPS/2;

num=num+1;

end


? num

num =

53


? EPS=2*EPS

EPS =

2.2204e-016


這個(gè)例子表明了計(jì)算特殊MATLAB值eps的一種方法,它是一個(gè)可加到1,而使結(jié)果以有限精度大于1的最小數(shù)值。這里我們用大寫EPS,因此MATLAB的eps的值不會(huì)被覆蓋掉。在這個(gè)例子里,EPS以1開始。只要(1+EPS)>1為真(非零),就一直求While循環(huán)內(nèi)的命令值。由于EPS不斷地被2除,EPS逐漸變小以致于EPS+1不大于1。(記住,發(fā)生這種情況是因?yàn)橛?jì)算機(jī)使用固定數(shù)的數(shù)值來表示數(shù)。MATLAB用16位,因此,我們只能期望EPS接近10-16。)在這一點(diǎn)上,(1+EPS)>1是假(零),于是While循環(huán)結(jié)束。最后,EPS與2相乘,因?yàn)樽詈蟪?使EPS太小。

IF-ELSE-END結(jié)構(gòu)

如果在表達(dá)式中的所有元素為真(非零),那么就執(zhí)行if和end語(yǔ)言之間的{commands}。在表達(dá)式包含有幾個(gè)邏輯子表達(dá)式時(shí),即使前一個(gè)子表達(dá)式?jīng)Q定了表達(dá)式的最后邏輯狀態(tài),仍要計(jì)算所有的子表達(dá)式。例如,


? apples=10;%number of apples

? cost=apples*25%cost of apples

? if apples>5%give 20% discount for larger purchases

cost=(1-20/100)*cost;

end

? cost

cost =

200


假如有兩個(gè)選擇,If-Else-End結(jié)構(gòu)是:


ifexpression

commands evaluated if True

else

commands evaluated if False

end

在這里,如果表達(dá)式為真,則執(zhí)行第一組命令;如果表達(dá)式是假,則執(zhí)行第二組命令。


當(dāng)有三個(gè)或更多的選擇時(shí),If-Else-End結(jié)構(gòu)采用形式

if expression1

commands evaluated if expression1 is True

elseif expression2

commands evaluated if expression2 is True

elseif expression3

commands evaluated if expression3 is True

elseif ……

.

else

commands evaluated if no other expressionis True

end


最后的這種形式,只和所碰到的、與第一個(gè)真值表達(dá)式相關(guān)的命令被執(zhí)行;接下來的關(guān)系表達(dá)式不檢驗(yàn),跳過其余的If-Else-End結(jié)構(gòu)。而且,最后的else命令可有可無(wú)。


現(xiàn)在我們知道了如何用If-Else-End結(jié)構(gòu)來決策,就有可能提出一種合理的方法來跳出或中斷For循環(huán)和While循環(huán)。

? EPS=1;

? for num=1:1000

EPS=EPS/2;

if (1+EPS)<=1

EPS=EPS*2

break

end

end


這個(gè)例子演示了估算EPS的另一種方法。在這種情況下,For循環(huán)構(gòu)造成要執(zhí)行足夠多的次數(shù)。If-Else-End結(jié)構(gòu)檢驗(yàn)要看EPS是否變得足夠小。如果是,EPS乘2,break命令強(qiáng)迫For循環(huán)提早結(jié)束,num=53。


在這個(gè)例子里,當(dāng)執(zhí)行break語(yǔ)句時(shí),MATLAB跳到循環(huán)外下一個(gè)語(yǔ)句。在現(xiàn)在情況下,它返回到MATLAB的提示符并顯示EPS。如果一個(gè)break語(yǔ)句出現(xiàn)在一個(gè)嵌套的For循環(huán)或While循環(huán)結(jié)構(gòu)里,那么MATLAB只跳出break所在的那個(gè)循環(huán),不跳出整個(gè)嵌套結(jié)構(gòu)。



開放分享:優(yōu)質(zhì)有限元技術(shù)文章,助你自學(xué)成才

相關(guān)標(biāo)簽搜索:三個(gè)例子講解MATLAB三種循環(huán) MatLab培訓(xùn) MatLab培訓(xùn)課程 MatLab在線視頻教程 MatLab技術(shù)學(xué)習(xí)教程 MatLab軟件教程 MatLab資料下載 MatLab代做 MatLab基礎(chǔ)知識(shí) Fluent、CFX流體分析 HFSS電磁分析 Ansys培訓(xùn) Abaqus培訓(xùn) 

編輯
在線報(bào)名:
  • 客服在線請(qǐng)直接聯(lián)系我們的客服,您也可以通過下面的方式進(jìn)行在線報(bào)名,我們會(huì)及時(shí)給您回復(fù)電話,謝謝!
驗(yàn)證碼

全國(guó)服務(wù)熱線

1358-032-9919

廣州公司:
廣州市環(huán)市中路306號(hào)金鷹大廈3800
電話:13580329919
          135-8032-9919
培訓(xùn)QQ咨詢:點(diǎn)擊咨詢 點(diǎn)擊咨詢
項(xiàng)目QQ咨詢:點(diǎn)擊咨詢
email:kf@1cae.com