MATLAB - 巢狀函式



MATLAB 函式是一個獨立的、自包含的程式碼塊,它執行特定任務,可以接受輸入引數並返回輸出值。函式有助於組織程式碼,使其更易於閱讀,並促進程式碼重用。

建立簡單的 MATLAB 函式

假設我們想建立一個計算給定數字平方的函式。以下是你可以執行此操作的方法:

步驟 1:建立新的 MATLAB 指令碼

開啟 MATLAB 並透過點選“新建指令碼”按鈕或使用 edit 命令建立一個新的指令碼檔案。將其儲存為 .m 副檔名(例如,square.m)。

步驟 2:定義函式

在 square.m 檔案中,定義函式如下:

function result = square(x)
   % This function calculates the square of a number.
   result = x^2;
end

在 Matlab 中,它將如下所示:

function calculate

在此程式碼中:

  • function result = square(x) 宣告名為 square 的函式,該函式接受一個輸入引數 x 並返回一個結果。
  • result = x^2; 計算輸入 x 的平方並將其賦給變數 result。

步驟 3:使用函式

現在你已經建立了函式,你可以在 MATLAB 工作區或其他指令碼中使用它。以下是如何使用它:

>> num = 5;
result = square(num)

result =

   25

>> 

現在我們知道了如何在 Matlab 中建立普通函式,讓我們更詳細地瞭解 Matlab 中的巢狀函式。

巢狀函式

MATLAB 中的巢狀函式允許你在其他函式中定義函式。這些巢狀函式可以訪問其父函式的變數和工作區,這對於組織程式碼、封裝功能和最大限度地減少全域性變數的使用非常有用。

巢狀函式語法

function outerFunction()
   % Outer function code
   
   function innerFunction()
      % Nested function code
   end
   
   % Outer function code can call innerFunction
end

關於巢狀函式的重要事項

  • 巢狀函式可以訪問其父函式中的變數,但反之則不然。父函式無法訪問巢狀函式中定義的變數。
  • 巢狀函式還可以訪問同一父函式中其他巢狀函式的變數。
  • 巢狀函式不能從父函式外部呼叫;它們的作用域僅限於父函式。
  • MATLAB 允許你在單個父函式中定義多個巢狀函式。
  • 巢狀函式是封裝邏輯和防止 MATLAB 程式碼混亂的有用方法。

簡單的巢狀函式示例

function area = calculateCircleArea(diameter)
   % Nested function to calculate radius
   function radius = calculateRadius(d)
      radius = d / 2;
   end
   
   % Calculate the area of the circle
   r = calculateRadius(diameter);
   area = pi * r^2;
end

在這個例子中,calculateRadius 是一個巢狀函式,它可以訪問其父函式 calculateCircleArea 中的 diameter 變數。

在 Matlab 中,你將儲存並執行上述函式,如下所示:

calculate circle area

使用值 calculateCircleArea() 執行函式的結果如下:

>> d = 10;
circleArea = calculateCircleArea(d)

circleArea =

   78.5398

返回巢狀函式作為輸出

在 MATLAB 中,你還可以將巢狀函式作為外部函式的輸出返回。

function customCalculator = createCalculator(a, b)
   % Nested function to add two numbers
   function result = add()
      result = a + b;
   end
   
   % Nested function to subtract two numbers
   function result = subtract()
      result = a - b;
   end
   
   % Return the nested functions as outputs
   customCalculator.add = @add;
   customCalculator.subtract = @subtract;
end

在這個例子中,createCalculator 函式返回一個結構體,其中包含兩個巢狀函式 add 和 subtract 作為函式控制代碼。

Add 函式

add 函式計算 a 和 b 的和,並將其儲存在 result 變數中。

Subtract 函式

subtract 函式計算 a 和 b 之間的差,並將其儲存在 result 變數中。

定義這些巢狀函式後,createCalculator 函式執行以下操作:

返回結構體

它建立一個名為 customCalculator 的結構體,其中將包含指向 add 和 subtract 函式的函式控制代碼。

分配函式控制代碼

它將函式控制代碼 @add 分配給 customCalculator 結構體的 add 欄位。

它將函式控制代碼 @subtract 分配給 customCalculator 結構體的 subtract 欄位。

你可以使用這些控制代碼使用指定的值執行加法和減法,如下所示:

>> calc = createCalculator(5, 3)
additionResult = calc.add()
subtractionResult = calc.subtract()

calc = 

  struct with fields:

         add: @createCalculator/add
    subtract: @createCalculator/subtract

additionResult =

     8

subtractionResult =

     2

>>
廣告