Matlab入門教程--流程式控制制__matlab

來源:互聯網
上載者:User
   Matlab入門教程--流程式控制制 1-2、重複命令 最簡單的重複命令是for圈(for-loop),其基本形式為: for 變數 = 矩陣; 運算式; end 其中變數的值會被依次設定為矩陣的每一行,來執行介於for和end之間的 運算式。因此,若無意外情況,運算式執行的次數會等於矩陣的行數。 舉例來說,下列命令會產生一個長度為6的調和數列(Harmonic sequence): x = zeros(1,6); % x是一個16的零矩陣   for i = 1:6, x(i) = 1/i; end 在上例中,矩陣x最初是一個16的零矩陣,在for圈中,變數i的值依次是 1到6,因此矩陣x的第i個元素的值依次被設為1/i。我們可用分數來顯示此 數列: format rat % 使用分數來表示數值 disp(x) 1 1/2 1/3 1/4 1/5 1/6 for圈可以是多層的,下例產生一個16的Hilbert矩陣h,其中為於第i 列、第j行的元素為: h = zeros(6); for i = 1:6, for j = 1:6, h(i,j) = 1/(i+j-1); end end disp(h) 1 1/2 1/3 1/4 1/5 1/6 1/2 1/3 1/4 1/5 1/6 1/7 1/3 1/4 1/5 1/6 1/7 1/8 1/4 1/5 1/6 1/7 1/8 1/9 1/5 1/6 1/7 1/8 1/9 1/10 1/6 1/7 1/8 1/9 1/10 1/11  小提示:預先配置矩陣  在上面的例子,我們使用zeros來預先配置(Allocate)了一個適當大小 的矩陣。若不預先配置矩陣,程式仍可執行,但此時MATLAB需要動態地增 加(或減小)矩陣的大小,因而降低程式的執行效率。所以在使用一個矩 陣時,若能在事前知道其大小,則最好先使用zeros或ones等命令來預先配 置所需的記憶體(即矩陣)大小。 在下例中,for圈列出先前產生的Hilbert矩陣的每一行的平方和: for i = h, disp(norm(i)^2); % 印出每一行的平方和 end 1299/871 282/551 650/2343   524/2933 559/4431 831/8801 在上例中,每一次i的值就是矩陣h的一行,所以寫出來的命令特別簡潔。 令一個常用到的重複命令是while圈,其基本形式為: while 條件式; 運算式; end 也就是說,只要條件示成立,運算式就會一再被執行。例如先前產生調和 數列的例子,我們可用while圈改寫如下: x = zeros(1,6); % x是一個16的零矩陣 i = 1; while i <= 6, x(i) = 1/i; i = i+1; end format short 1-3、邏輯命令 最簡單的邏輯命令是if, ..., end,其基本形式為: if 條件式; 運算式; end if rand(1,1) > 0.5, disp('Given random number is greater than 0.5.'); end Given random number is greater than 0.5. 1-4、集合多個命令於一個M檔案 若要一次執行大量的MATLAB命令,可將這些命令存放於一個副檔名為m的檔 案,並在MATLAB提示號下鍵入此檔案的主檔名即可。此種包含MATLAB命令 的檔案都以m為副檔名,因此通稱M檔案(M-files)。例如一個名為test.m 的M檔案,包含一連串的MATLAB命令,那麽只要直接鍵入test,即可執行其 所包含的命令: pwd % 顯示現在的目錄 ans =   D:/MATLAB5/bin cd c:/data/mlbook % 進入test.m所在的目錄 type test.m % 顯示test.m的內容 % This is my first test M-file. % Roger Jang, March 3, 1997 fprintf('Start of test.m!/n'); for i = 1:3, fprintf('i = %d ---> i^3 = %d/n', i, i^3); end fprintf('End of test.m!/n'); test % 執行test.m   Start of test.m! i = 1 ---> i^3 = 1 i = 2 ---> i^3 = 8 i = 3 ---> i^3 = 27 End of test.m!  小提示:第一註解行(H1 help line)  test.m的前兩行是註解,可以使程式易於瞭解與管理。特別要說明的是, 第一註解行通常用來簡短說明此M檔案的功能,以便lookfor能以關鍵字比 對的方式來找出此M檔案。舉例來說,test.m的第一註解行包含test這個 字,因此如果鍵入lookfor  test,MATLAB即可列出所有在第一註解行包含test的M檔案,因而test.m 也會被列名在內。 嚴格來說,M檔案可再細分為命令集(Scripts)及函數(Functions)。前 述的test.m即為命令集,其效用和將命令逐一輸入完全一樣,因此若在命 令集可以直接使用工作空間的變數,而且在命令集中設定的變數,也都在 工作空間中看得到。函數則需要用到輸入引數(Input arguments)和輸出引數(Output arguments)來傳遞資訊,這就像是C語言的函數,或是FORTRAN語言的副程 序(Subroutines)。舉例來說,若要計算一個正整數的階乘 (Factorial),我們可以寫一個如下的MATLAB函數並將之存檔於fact.m: function output = fact(n) % FACT Calculate factorial of a given positive integer. output = 1; for i = 1:n, output = output*i; end 其中fact是函數名,n是輸入引數,output是輸出引數,而i則是此函數用 到的暫時變數。要使用此函數,直接鍵入函數名及適當輸入引數值即可: y = fact(5)   y = 120 (當然,在執行fact之前,你必須先進入fact.m所在的目錄。)在執行 fact(5)時,MATLAB會跳入一個下層的暫時工作空間(Temperary workspace),將變數n的值設定為5,然後進行各項函數的內部運算,所有 內部運算所產生的變數(包含輸入引數n、暫時變數i,以及輸出引數 output)都存在此暫時工作空間中。運算完畢後,MATLAB會將最後輸出引 數output的值設定給上層的變數y,並將清除此暫時工作空間及其所含的所 有變數。換句話說,在呼叫函數時,你只能經由輸入引數來控制函數的輸 入,經由輸出引數來得到函數的輸出,但所有的暫時變數都會隨著函數的 結束而消失,你並無法得到它們的值。  小提示:有關階乘函數  前面(及後面)用到的階乘函數只是純粹用來說明MATLAB的函數觀念。若 實際要計算一個正整數n的階乘(即n!)時,可直接寫成prod(1:n),或是 直接呼叫gamma函數:gamma(n-1)。 MATLAB的函數也可以是遞式的(Recursive),也就是說,一個函數可以 呼叫它本身。舉例來說,n! = n*(n-1)!,因此前面的階乘函數可以改成遞式的寫法: function output = fact(n) % FACT Calculate factorial of a given positive integer recursively.     if n == 1, % Terminating condition output = 1; return; end output = n*fact(n-1); 在寫一個遞函數時,一定要包含結束條件(Terminating condition),否則此函數將會一再呼叫自己,永遠不會停止,直到電腦的 記憶體被耗盡為止。以上例而言,n==1即滿足結束條件,此時我們直接將 output設為1,而不再呼叫此函數本身。 發信人: alphazhao (子羽 & 三笑), 信區: Modelling 標 題: Matlab入門 (3) 發信站: 武漢白雲黃鶴站 (Fri Dec 10 14:41:49 1999), 站內信件   發信人: Mars (混沌·分形·周期三), 信區: MATH 標 題: Matlab入門教程--流程式控制制 發信站: 一網深情 (Sun Nov 29 17:35:36 1998), 轉信 1-2、重複命令 最簡單的重複命令是for圈(for-loop),其基本形式為: for 變數 = 矩陣; 運算式; end 其中變數的值會被依次設定為矩陣的每一行,來執行介於for和end之間的 運算式。因此,若無意外情況,運算式執行的次數會等於矩陣的行數。 舉例來說,下列命令會產生一個長度為6的調和數列(Harmonic sequence): x = zeros(1,6); % x是一個16的零矩陣   for i = 1:6, x(i) = 1/i; end 在上例中,矩陣x最初是一個16的零矩陣,在for圈中,變數i的值依次是 1到6,因此矩陣x的第i個元素的值依次被設為1/i。我們可用分數來顯示此 數列: format rat % 使用分數來表示數值 disp(x) 1 1/2 1/3 1/4 1/5 1/6 for圈可以是多層的,下例產生一個16的Hilbert矩陣h,其中為於第i 列、第j行的元素為: h = zeros(6); for i = 1:6, for j = 1:6, h(i,j) = 1/(i+j-1); end end disp(h) 1 1/2 1/3 1/4 1/5 1/6 1/2 1/3 1/4 1/5 1/6 1/7 1/3 1/4 1/5 1/6 1/7 1/8 1/4 1/5 1/6 1/7 1/8 1/9 1/5 1/6 1/7 1/8 1/9 1/10 1/6 1/7 1/8 1/9 1/10 1/11  小提示:預先配置矩陣  在上面的例子,我們使用zeros來預先配置(Allocate)了一個適當大小 的矩陣。若不預先配置矩陣,程式仍可執行,但此時MATLAB需要動態地增 加(或減小)矩陣的大小,因而降低程式的執行效率。所以在使用一個矩 陣時,若能在事前知道其大小,則最好先使用zeros或ones等命令來預先配 置所需的記憶體(即矩陣)大小。 在下例中,for圈列出先前產生的Hilbert矩陣的每一行的平方和: for i = h, disp(norm(i)^2); % 印出每一行的平方和 end 1299/871 282/551 650/2343   524/2933 559/4431 831/8801 在上例中,每一次i的值就是矩陣h的一行,所以寫出來的命令特別簡潔。 令一個常用到的重複命令是while圈,其基本形式為: while 條件式; 運算式; end 也就是說,只要條件示成立,運算式就會一再被執行。例如先前產生調和 數列的例子,我們可用while圈改寫如下: x = zeros(1,6); % x是一個16的零矩陣 i = 1; while i <= 6, x(i) = 1/i; i = i+1; end format short 1-3、邏輯命令 最簡單的邏輯命令是if, ..., end,其基本形式為: if 條件式; 運算式; end if rand(1,1) > 0.5, disp('Given random number is greater than 0.5.'); end Given random number is greater than 0.5. 1-4、集合多個命令於一個M檔案 若要一次執行大量的MATLAB命令,可將這些命令存放於一個副檔名為m的檔 案,並在MATLAB提示號下鍵入此檔案的主檔名即可。此種包含MATLAB命令 的檔案都以m為副檔名,因此通稱M檔案(M-files)。例如一個名為test.m 的M檔案,包含一連串的MATLAB命令,那麽只要直接鍵入test,即可執行其 所包含的命令: pwd % 顯示現在的目錄 ans =   D:/MATLAB5/bin cd c:/data/mlbook % 進入test.m所在的目錄 type test.m % 顯示test.m的內容 % This is my first test M-file. % Roger Jang, March 3, 1997 fprintf('Start of test.m!/n'); for i = 1:3, fprintf('i = %d ---> i^3 = %d/n', i, i^3); end fprintf('End of test.m!/n'); test % 執行test.m   Start of test.m! i = 1 ---> i^3 = 1 i = 2 ---> i^3 = 8 i = 3 ---> i^3 = 27 End of test.m!  小提示:第一註解行(H1 help line)  test.m的前兩行是註解,可以使程式易於瞭解與管理。特別要說明的是, 第一註解行通常用來簡短說明此M檔案的功能,以便lookfor能以關鍵字比 對的方式來找出此M檔案。舉例來說,test.m的第一註解行包含test這個 字,因此如果鍵入lookfor  test,MATLAB即可列出所有在第一註解行包含test的M檔案,因而test.m 也會被列名在內。 嚴格來說,M檔案可再細分為命令集(Scripts)及函數(Functions)。前 述的test.m即為命令集,其效用和將命令逐一輸入完全一樣,因此若在命 令集可以直接使用工作空間的變數,而且在命令集中設定的變數,也都在 工作空間中看得到。函數則需要用到輸入引數(Input arguments)和輸出引數(Output arguments)來傳遞資訊,這就像是C語言的函數,或是FORTRAN語言的副程 序(Subroutines)。舉例來說,若要計算一個正整數的階乘 (Factorial),我們可以寫一個如下的MATLAB函數並將之存檔於fact.m: function output = fact(n) % FACT Calculate factorial of a given positive integer. output = 1; for i = 1:n, output = output*i; end 其中fact是函數名,n是輸入引數,output是輸出引數,而i則是此函數用 到的暫時變數。要使用此函數,直接鍵入函數名及適當輸入引數值即可: y = fact(5)   y = 120 (當然,在執行fact之前,你必須先進入fact.m所在的目錄。)在執行 fact(5)時,MATLAB會跳入一個下層的暫時工作空間(Temperary workspace),將變數n的值設定為5,然後進行各項函數的內部運算,所有 內部運算所產生的變數(包含輸入引數n、暫時變數i,以及輸出引數 output)都存在此暫時工作空間中。運算完畢後,MATLAB會將最後輸出引 數output的值設定給上層的變數y,並將清除此暫時工作空間及其所含的所 有變數。換句話說,在呼叫函數時,你只能經由輸入引數來控制函數的輸 入,經由輸出引數來得到函數的輸出,但所有的暫時變數都會隨著函數的 結束而消失,你並無法得到它們的值。  小提示:有關階乘函數  前面(及後面)用到的階乘函數只是純粹用來說明MATLAB的函數觀念。若 實際要計算一個正整數n的階乘(即n!)時,可直接寫成prod(1:n),或是 直接呼叫gamma函數:gamma(n-1)。 MATLAB的函數也可以是遞式的(Recursive),也就是說,一個函數可以 呼叫它本身。舉例來說,n! = n*(n-1)!,因此前面的階乘函數可以改成遞式的寫法: function output = fact(n) % FACT Calculate factorial of a given positive integer recursively.     if n == 1, % Terminating condition output = 1; return; end output = n*fact(n-1); 在寫一個遞函數時,一定要包含結束條件(Terminating condition),否則此函數將會一再呼叫自己,永遠不會停止,直到電腦的 記憶體被耗盡為止。以上例而言,n==1即滿足結束條件,此時我們直接將 output 設為 1 ,而不再呼叫此函數本身

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.