浙江大學城市學院實驗報告

2021-07-29 17:27:13 字數 4182 閱讀 5135

課程名稱數學建模(ii

實驗專案名稱實驗三 matlab程式設計

學生姓名專業班級學號

實驗成績指導老師(簽名日期

一. 實驗目的和要求

1、掌握matlab特有的m檔案的設計;

2、掌握並能熟練應用關係運算、邏輯運算、程式的控制結構;

二. 實驗預備知識

利用matlab的命令視窗,可以完成較為簡單的運算,但遇到較為複雜的問題時,僅靠命令視窗來解決可能會非常繁瑣,這時我們就要考慮使用matlab的程式設計。matlab提供了乙個完善的程式語言環境,使我們能方便地編寫複雜的程式,完成各種複雜的計算。matlab語言在形式上與c語言相似,但它的程式設計效率比c語言高得多,因為用matlab語言程式設計,不需要事先定義變數,不需要考慮資料型別,系統會自動把所有的資料,包括標量、向量、字元、字串等統一處理成矩陣,矩陣的大小是根據需要動態變化。

本實驗中我們主要介紹matlab類似於其它高階語言的關係運算、邏輯運算、程式的控制結構,以及matlab特有的m-檔案。

關係運算是指對兩個量之間的大小比較,matlab提供了6個關係運算子,如表3.1所示

表3.1

若關係運算比較兩個數值,則當關係成立時,結果為1(表示真),否則為0(表示假)。進行關係運算的兩個量也可以是具有相同格式的矩陣(事實上,若比較的是兩個數,這兩個數可以看作為兩個1×1矩陣),此時兩矩陣的所有對應位置的元素作關係運算,最終的結果是由各對應元素進行關係運算後的結果「0」和「1」組成的矩陣,格式與比較矩陣相同。

>> a1=5>8

a1 =

0>> a2=[1 2 3;4 5 6];a3=[6 5 4;3 2 1];

>> a4=a2<=a3 %兩矩陣進行關係運算。

a4 =

1 1 1

0 0 0

>> a5=a2>=3矩陣與標量間的關係運算是指矩陣的每個元素與該標量進行關係運算。

a5 =

0 0 1

1 1 1

matlab提供了3各邏輯運算子,如下表3.2所示:

表3.2

邏輯運算將每個非零元素當作1(真)來處理。同關係運算一樣,它也可以作用於格式相同的矩陣,運算結果為由「0」和「1」組成的矩陣。

>> b1=3&0,b2=3|0,b3=~(2>=3) %數值的邏輯運算。

b1 =

0b2 =

1b3 =

1>> b4=[-2 -1 0;1 2 3];b5=[1 3 5;-1 -3 -5];

>> b6=(b4>-2)&(b5<=3),b7=~(b5>=b4|b4<0) %矩陣間的邏輯運算。

b6 =

0 1 0

1 1 1

b7 =

0 0 0

1 1 1

除上述的關係運算子和邏輯運算子之外,matlab還提供了大量的關係和邏輯函式,最常見的有函式any(a)、all(a)以及異或運算函式xor(a,b)。若矩陣a的某列中有非零元素, 則any(a) 的關於此列的值為1,否則為0。若矩陣a的某列中所有元素非零,all(a) 的關於此列的值為1,否則為0。

>> c=[1 2 3;0 1 0];

>> c1=any(c),c2=all(c)

c1 =

1 1 1矩陣c的每一列中都有非零元素。

c2 =

0 1 0矩陣c中只有第二列中所有元素非零。

matlab程式的控制結構有順序結構、迴圈結構和選擇結構三種。順序結構較為簡單,即根據語句的書寫順序,從上到下按行執行,執行完所有語句後結束程式執行。我們這裡主要介紹迴圈結構的控制流語句for、while和選擇結構的控制流語句if、switch,這四個語句均以end結束。

for迴圈語句的一般格式為:

for 迴圈變數=冒號表示式

迴圈體end其中的迴圈體可以是一條語句或命令,也可以是由逗號、分號隔開的若干語句或命令。冒號表示式用來控制迴圈的次數,對於由冒號表示式確定的每乙個迴圈變數的值,迴圈體中的所有語句都被重複執行。

我們利用for迴圈來計算自然數1~5的階乘。

>> d=zeros(1,5開闢存放各階乘的位址, matlab可動態調節矩陣的格式,故只使用後面的語句結果也是將各階乘存放到矩陣d中,但預先開闢空間可節約執行時間。

>> e=1對乘積因子變數e賦初值。

>> for i=1:5迴圈變數i從1一直到5,步長為1。

d(i)=e*i此for迴圈的迴圈體包含兩個語句,此句作用是求i的階乘並存放在d(i)處且結果不顯示(不顯示可節約執行時間)。

e=d(i改變e的值且結果不顯示。

end結束for迴圈。

>> disp(d顯示各階乘。

1 2 6 24 120

前述for語句一般格式中的「冒號表示式」部分也可以是任意的向量或矩陣的變數名,此時,迴圈變數依次取向量的值或按矩陣的列依次取值。

>> f1=[1 3 5];f2=[1 3 5;4 6 8]; i=1;j=1;

>> for g=f1

f3(i)=g;i=i+1取出f1的各分量的值。

end>> for h=f2

f4(j)=h(2)*h(1);j=j+1求各列元素的乘積。

end>> disp(f3)

1 3 5

>> disp(f4)

4 18 40

for迴圈可以巢狀使用,如以下程式可以生成3×5hilbert矩陣。

>> k=zeros(3,5);

>> for i=1:3

for j=1:5

k(i,j)=1/(i+j-1);

endend

>> format rat改變顯示格式。

>> k

k = 11/21/31/41/5

1/21/31/41/51/6

1/31/41/51/61/7

>> format恢復顯示格式。

for迴圈主要用於迴圈次數固定的情形,而很多實際計算中迴圈次數往往並不能預先確定,此時我們可以使用while迴圈語句。

while迴圈語句的一般格式為:

while 條件

迴圈體end「條件」即執行迴圈的條件,用來控制迴圈的次數,它可以是關係表示式或邏輯表示式。當條件成立(即為1)時,迴圈體被執行,直到條件不成立(即為0)時,結束迴圈。

我們利用while迴圈來尋找階乘小於100萬的最大的自然數。

>> m=1;

>> while prod(1:m)<1000000prod為向量的連乘函式。

m=m+1;

end>> m=m-1結束迴圈的條件為階乘大於100萬,故最終的結果需減1。

m = 9

選擇結構的if語句的格式主要有以下三種:

格式1:if 條件

語句組 end

當條件成立時,執行語句組,否則執行end的後續語句。

格式2:if 條件

語句組1

else

語句組2

end當條件成立時,執行語句組1,否則執行語句組2。執行完成之後,執行end的後續語句。

格式3:if 條件1

語句組1

elseif 條件2

語句組2

……elseif 條件n

語句組n

else

語句組n+1

end當條件1成立時,執行語句組1,執行完成後,執行end的後續語句;當條件1不成立時,判斷條件2,若其成立,執行語句組2,執行完成後,執行end的後續語句;依次類推,若所有條件均不成立,則執行語句組n+1,執行完成後,執行end的後續語句。

我們可以利用上述3種格式的if語句自定義符號函式。若用格式1,需分別呼叫3次;若用格式2,則需使用巢狀;下面是用格式3書寫的程式。

>> if x>0

y=1;

elseif x<0

y=-1;

else

y=0;

end 無論是for迴圈還是while迴圈,break語句可以強行退出迴圈,立即執行此迴圈end的後續語句。一般我們用if語句與break語句組合使用來中斷迴圈。

我們用while迴圈來統計由matlab產生的100個隨機數中介於0.5到1的隨機數個數,並使用break語句來中斷迴圈。事實上,本例通過簡單的迴圈語句即可實現,下列程式僅為說明break語句的用法。

浙江大學城市學院計算學院

發展物件民主評議測評表 填寫說明 1 單選,請在相應意見欄下空格內畫上 記號,無任何記號視為棄權票 在兩欄以上 含兩欄 同時畫 的,或在表決票上出現其他符號的,作為無效票處理。發展物件民主評議測評表 填寫說明 1 單選,請在相應意見欄下空格內畫上 記號,無任何記號視為棄權票 在兩欄以上 含兩欄 同時...

浙江大學城市學院封面個人簡歷

姓名 杜宗飛專業 電腦科學與技術 學院 數理資訊學院學歷 本科 手機 e mail 位址 浙江大學城市學院 自薦信尊敬的領導 您好!今天我懷著對人生事業的追求,懷著激動的心情向您毛遂自薦,希望您在百忙之中給予我片刻的關注。我是浙江大學城市學院電腦科學與技術專業的2014屆畢業生。浙江大學城市學院大學...

浙江大學城市學院創意與藝術設計學院

1.目的和要求 1 1.1目的 1 1.2要求 1 2 程序安排 1 2.1選題 1 2.2開題報告 含文獻綜述和外文文獻翻譯 2 2.3開題報告 含文獻綜述和外文文獻翻譯 答辯 2 2.4畢業設計 2 2.5畢業設計 答辯 2 2.6檢查 3 2.7總結 3 3.選題 3 3.1選題要求 3 3....