天天看點

專題三 MATLAB程式流程控制3.1 順序結構程式3.2 用if語句實作選擇結構3.3 用switch語句實作選擇結構3.4 用for語句實作循環結構3.5 用while語句實作循環結構3.6 函數檔案的定義與調用3.7 函數的遞歸調用3.8 函數參數與變量的作用域

本篇是B站視訊的筆記。

3.1 順序結構程式

程式和程式設計

什麼叫程式?

程式是用某種計算機能夠了解并且能夠執行的語言來描述的解決問題的方法和步驟。

程式設計的基本步驟

分析問題,确定求解問題的數學模型或方法 → 設計算法,并畫出流程圖 → 選擇程式設計工具,根據算法編寫程式 → 調試程式,分析程式輸出結果

程式的3中基本結構

  • 順序結構
  • 選擇結構
  • 循環結構

腳本檔案和函數檔案

腳本檔案是可以在指令行視窗直接執行的檔案,也叫指令檔案。

函數檔案是定義一個函數,不能直接執行,而必須以函數調用的方式來調用。

檔案的建立

  • 用指令按鈕建立檔案。
  • 用edit指令建立檔案。
>> edit test
           

就相當于,以往寫C的程式的時候,函數是可以直接在主函數上建立。

而MATLAB可以制作成一個函數檔案,直接調用檔案即可。

順序結構

(1)資料的輸入

A=input(提示資訊,選項);

>> A=input('請輸入變量A的值:');
請輸入變量A的值: 100
           

(2)資料的輸出

disp(輸出項)

>> s='TC';
>> disp(s)
TC
>> a=[1,2,3;4,5,6];
>> disp(a)
     1     2     3
     4     5     6
           

(3)程式的暫停

pause(延遲秒數)

若延遲秒數不寫,則延遲至下一次點選。

若要強行中止程式的運作可使用Ctrl+C指令。

從程式功能上講,MATLAB一般包含三個步驟

  • 輸入原始資料
  • 對原始資料進行處理
  • 輸出處理結果

3.2 用if語句實作選擇結構

什麼事選擇結構?

選擇結構由稱為分支結構,是根據給定的條件是否成立來決定程式的執行流程。

  • 用if語句實作選擇結構
  • 用switch語句實作選擇結構

單分支if語句

語句格式:

if 條件

語句組

end

當條件結果為标量時,非零表示條件成立,零表示條件不成立。

當條件結果為矩陣時,如果矩陣為非空,且不包含零元素,則條件成立,否則不成立。

例如,[1,2;0,4]表示條件時,條件不成立;[1,2;3,4]表示條件時,條件成立。

雙分支if語句

語句格式:

if 條件

語句組1

else

語句組2

end

多分支if語句

if    條件1
            語句組1
  elseif    條件2
            語句組2
  ……
  elseif    條件m
            語句組m
  else
            語句組n
  end
           

在多分支if語句中不管有幾個分支,程式執行完一個分支後,其餘分支将不會再執行,這時整個if語句結束。

3.3 用switch語句實作選擇結構

switch語句的格式

switch 表達式

case 結果表1

語句組1

case 結果表2

語句組2

……

case 結果表m

語句組m

otherwise

語句組n

end

switch表達式應該是一個其值可以列舉的表達式。

case結果表為switch表達式的取值,當取值有多個時,用單中繼資料表示。

MATLAB的switch-case語句比C語言的人性化多了,不用糾結break

// num2cell函數:将數值矩陣轉換為單元矩陣

3.4 用for語句實作循環結構

什麼是循環結構?

循環結構又稱為重複結構,是利用計算機運算速度快以及能進行邏輯控制的特點來重複執行某些操作。

for語句

格式:

for 循環變量=表達式1:表達式2:表達式3

循環體語句

end

表達式1:初值

表達式2:步長

表達式3:終值

說明:

for語句針對向量的每一個元素執行一次循環體

推出循環之後,循環變量的值就是向量中最後的元素值。

向量為空時,循環體一次也不執行。

按照MATLAB的定義,for語句的循環變量也可以是一個列向量,其格式為:

for 循環變量=矩陣表達式

循環體語句

end

for k=[1,2,3,4] 循環4次 有4個列向量

for k=[1;2;3;4] 循環1次 有1個列向量

3.5 用while語句實作循環結構

while語句

格式:

while 條件

循環體語句

end

while語句多用于循環次數不确定的情況,而對于循環次數确定的情況,使用for語句更友善。

針對不同的情況可以選擇不同的循環語句,但從功能上講兩種循環語句可以互相替代。

break語句和continue語句

  • break語句用來跳出循環體,結束整個循環
  • continue語句用來結束本次循環,接着進行下一次是否執行循環的判斷。

循環的嵌套

如果一個循環結構的循環體又包含一個循環結構,就稱為循環的嵌套,或稱為多重循環結構。

3.6 函數檔案的定義與調用

函數檔案的基本結構

function 輸出形參表=函數名(輸入形參表)

注釋說明部分

函數體語句

當有多個形參時,形參之間用逗号分隔,組成形參表。當輸出形參多餘一個時,應該用方括号括起來,構成一個輸出矩陣。

  • 函數檔案名通常由函數名再加上擴充名.m組成,函數檔案名與函數名也可以不相同。
  • return語句表示結束函數的執行。
    專題三 MATLAB程式流程控制3.1 順序結構程式3.2 用if語句實作選擇結構3.3 用switch語句實作選擇結構3.4 用for語句實作循環結構3.5 用while語句實作循環結構3.6 函數檔案的定義與調用3.7 函數的遞歸調用3.8 函數參數與變量的作用域

函數調用

調用格式:

[函數實參表]=函數名(輸入實參表)

在調用函數時,函數輸入輸出參數稱為實際參數,簡稱實參。

專題三 MATLAB程式流程控制3.1 順序結構程式3.2 用if語句實作選擇結構3.3 用switch語句實作選擇結構3.4 用for語句實作循環結構3.5 用while語句實作循環結構3.6 函數檔案的定義與調用3.7 函數的遞歸調用3.8 函數參數與變量的作用域

匿名函數

基本格式:

函數句柄變量=@(匿名函數輸入參數)匿名函數表達式

專題三 MATLAB程式流程控制3.1 順序結構程式3.2 用if語句實作選擇結構3.3 用switch語句實作選擇結構3.4 用for語句實作循環結構3.5 用while語句實作循環結構3.6 函數檔案的定義與調用3.7 函數的遞歸調用3.8 函數參數與變量的作用域

函數句柄變量=@函數名

專題三 MATLAB程式流程控制3.1 順序結構程式3.2 用if語句實作選擇結構3.3 用switch語句實作選擇結構3.4 用for語句實作循環結構3.5 用while語句實作循環結構3.6 函數檔案的定義與調用3.7 函數的遞歸調用3.8 函數參數與變量的作用域

函數為内部函數或自定義函數

3.7 函數的遞歸調用

函數的嵌套調用

在一個函數中調用了其他函數

函數的遞歸調用

一個函數調用它自身稱為函數的遞歸調用。

遞歸是把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解。

(1)直接遞歸調用

專題三 MATLAB程式流程控制3.1 順序結構程式3.2 用if語句實作選擇結構3.3 用switch語句實作選擇結構3.4 用for語句實作循環結構3.5 用while語句實作循環結構3.6 函數檔案的定義與調用3.7 函數的遞歸調用3.8 函數參數與變量的作用域

(2)間接遞歸調用

專題三 MATLAB程式流程控制3.1 順序結構程式3.2 用if語句實作選擇結構3.3 用switch語句實作選擇結構3.4 用for語句實作循環結構3.5 用while語句實作循環結構3.6 函數檔案的定義與調用3.7 函數的遞歸調用3.8 函數參數與變量的作用域

3.8 函數參數與變量的作用域

函數參數的可調性

MATLAB有兩個預定義變量

nargin:輸入實參的個數

nargout:輸出實參的個數

專題三 MATLAB程式流程控制3.1 順序結構程式3.2 用if語句實作選擇結構3.3 用switch語句實作選擇結構3.4 用for語句實作循環結構3.5 用while語句實作循環結構3.6 函數檔案的定義與調用3.7 函數的遞歸調用3.8 函數參數與變量的作用域

全局變量與局部變量

局部變量是指在程式中隻在特定過程或函數中可以通路的變量。

全局變量的作用域是整個MATLAB工作空間,也就是全程有效,所有的函數都可以對它進行存取和修改。

全局變量定義格式:

global 變量名

專題三 MATLAB程式流程控制3.1 順序結構程式3.2 用if語句實作選擇結構3.3 用switch語句實作選擇結構3.4 用for語句實作循環結構3.5 用while語句實作循環結構3.6 函數檔案的定義與調用3.7 函數的遞歸調用3.8 函數參數與變量的作用域