for循環(huán) -- 北太天元學(xué)習(xí)5
我們利用前面學(xué)習(xí)的知識(shí), 可以為計(jì)算 1x2x3x4x5x6 寫一個(gè)算法:
首先使用賦值語句
p = 1 ;
然后
p = p * 2;
然后再計(jì)算
p = p * 3;
然后再計(jì)算
p = p * 4
然后再計(jì)算
p = p * 5
然后再計(jì)算
p = p * 6
我們應(yīng)該觀察到,我們上面的程序語句每一條做的都是原先計(jì)算的結(jié)果p上再乘以一個(gè)數(shù)。
這些步驟都是重復(fù)步驟, 雖然乘上的數(shù)在遞增。
好在這個(gè)是到6就結(jié)束,如果是到100呢,我們?nèi)绻蒙厦娴姆椒ㄘM不是要累死或者無聊死。
我們實(shí)際可以通過使用循環(huán)語句來讓計(jì)算機(jī)自動(dòng)執(zhí)行這個(gè)循環(huán)過程。
首先我給大家介紹的是for循環(huán)。for循環(huán)用于實(shí)現(xiàn)包含某種迭代過程的算法,在這個(gè)過程中有一個(gè)計(jì)數(shù)變量(有時(shí)稱為索引index),在上面舉例計(jì)算1x2x...x6這個(gè)例子中每一步增加1。在每個(gè)步驟中,都會(huì)運(yùn)行一段代碼, 這些代碼通常依賴于這個(gè)計(jì)數(shù)變量。
在北太天元中,for循環(huán)的一般形式如下所示:
for i= 開始數(shù):步增數(shù):結(jié)束數(shù)
? 程序語句1
? 程序語句2
?? ?...
end
其中索引i從開始數(shù)每一步增加步增數(shù), 一直到超過或者等于結(jié)束數(shù)循環(huán)停止。
請(qǐng)注意,這組語句將對(duì)于i的各種值,執(zhí)行"程序語句1; 程序語句2; ..."這些被for和end圈定范圍內(nèi)的命令語句。
例如: 計(jì)算一個(gè)和 1/1^2 + 1/2^2 + ... + 1/50^2
我們使用for循環(huán), 對(duì)于這個(gè)例子,k將是從1到50的索引。在for循環(huán)內(nèi)部添加命令來執(zhí)行
把 1/k^2 加到保存求和值的變量上. 求解該問題的北太天元代碼可以是這樣:
s=0;
for k=1:50
?? ?s = s + 1/k^2;
end
s
我們可以把上面代碼輸入到北太天元的命令行窗口,但是出于方便編輯或者以后方便重用的目的,
我們將創(chuàng)建一個(gè)北太天元 m文件,然后在北太天元命令行窗口輸入這個(gè) m文件名 就可以執(zhí)行上面的代碼。
北太天元 m文件有兩種類型——m腳本和 m函數(shù)?,F(xiàn)在我們重點(diǎn)介紹的是如何寫m腳本。
在北太天元的圖形交互界面的左側(cè)是目錄窗口,這里展示了當(dāng)前目錄下保存的文件,包括m腳本和m函數(shù)文件。
在北太天元的圖形交互界面的左上部還有菜單,點(diǎn)擊文件菜單,然后點(diǎn)擊子菜單的新建, 就可以看到編輯窗口
里開了一個(gè)空白的m文件,然后把上面的代碼copy到編輯窗口,然后再利用菜單--保存,看到一個(gè)彈出的窗口,
給新創(chuàng)建的m腳本命名并保存。此時(shí)就可以執(zhí)行這個(gè)新建的m腳本。
在上面代碼段的for循環(huán)內(nèi)部的行上,我們使用分號(hào)來抑制輸出到命令窗口。如果我們?nèi)サ舴痔?hào),
你會(huì)看到s的每一步的計(jì)算值都會(huì)輸出到命令行窗口。
順便說一句,你必須對(duì)如何命名腳本文件名和變量名有些謹(jǐn)慎,因?yàn)槭虑榭赡艹龊跄愕囊饬现?
例如,如果你給你的文件命名為 1.m , 那么你在命令窗口輸入 1 企圖調(diào)用這個(gè)m腳時(shí),北太天元
會(huì)認(rèn)為你想輸入的是 數(shù)字1, 而不是調(diào)腳本 1.m . m腳本或者m函數(shù)文件名必須是以字母或者中文
或者下劃線開頭的,后面再繼續(xù)的字符除了字母中文下劃線之外還增加了數(shù)字, 例如
a1.m? ,? 實(shí)驗(yàn)1.m? __abc_1.m 都是合法的文件名,
但是? 1.m , 1a.m 都是非法的文件名。
另外,你還需要對(duì)變量名也要謹(jǐn)慎一些, 例如,剛才在代碼中我們使用 s 作為存儲(chǔ)求和的值的變量,
你可能會(huì)覺得 求和的英文單詞是sum, 為啥不用sum 呢? 但是sum 是北太天元內(nèi)置函數(shù)名,
因此,如果使用了sum 作為存儲(chǔ)求和值的變量名,那么sum這個(gè)內(nèi)置函數(shù)將被屏蔽,也就是說我們將
無法使用內(nèi)置函數(shù)sum。
實(shí)際上,上面這個(gè)例子,我們也可以不使用for循環(huán),而是使用內(nèi)置函數(shù)sum 來完成求和。
我們可以用下面的代碼來完成 1/1^2 + 1/2^2 + ... + 1/50^2 的計(jì)算
>> x=1:50
sum( 1 /x.^2 )
這將允許我們不使用for循環(huán)而直接計(jì)算1/1^2 + 1/2^2 + ... + 1/50^2 的和, 而且會(huì)計(jì)算得更快一些。