MATLAB - 函式



函式是一組執行特定任務的語句。在 MATLAB 中,函式在單獨的檔案中定義。檔案和函式的名稱應相同。

函式在其自己的工作區(也稱為區域性工作區)中操作變數,該工作區與您在 MATLAB 命令提示符下訪問的工作區(稱為基本工作區)分開。

函式可以接受多個輸入引數,並且可以返回多個輸出引數。

函式語句的語法如下:

function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)

示例

以下名為mymax的函式應寫入名為mymax.m的檔案中。它將五個數字作為引數,並返回這些數字中的最大值。

建立一個名為 mymax.m 的函式檔案,並在其中鍵入以下程式碼:

function max = mymax(n1, n2, n3, n4, n5)

%This function calculates the maximum of the
% five numbers given as input
max =  n1;
if(n2 > max)
   max = n2;
end
if(n3 > max)
   max = n3;
end
if(n4 > max)
   max = n4;
end
if(n5 > max)
   max = n5;
end

函式的第一行以關鍵字function開頭。它給出函式的名稱和引數的順序。在我們的示例中,mymax函式有五個輸入引數和一個輸出引數。

緊跟在函式語句之後的註釋行提供了幫助文字。當您鍵入以下內容時,將列印這些行:

help mymax

MATLAB 將執行上述語句並返回以下結果:

This function calculates the maximum of the
   five numbers given as input

您可以像這樣呼叫函式:

mymax(34, 78, 89, 23, 11)

MATLAB 將執行上述語句並返回以下結果:

ans = 89

匿名函式

匿名函式類似於傳統程式語言中的行內函數,在單個 MATLAB 語句中定義。它由單個 MATLAB 表示式和任意數量的輸入和輸出引數組成。

您可以在 MATLAB 命令列或函式或指令碼中定義匿名函式。

這樣,您就可以建立簡單的函式,而無需為它們建立檔案。

從表示式建立匿名函式的語法為

f = @(arglist)expression

示例

在這個例子中,我們將編寫一個名為 power 的匿名函式,它將接收兩個數字作為輸入,並返回第一個數字的第二個數字次冪。

建立一個指令碼檔案,並在其中鍵入以下程式碼:

power = @(x, n) x.^n;
result1 = power(7, 3)
result2 = power(49, 0.5)
result3 = power(10, -10)
result4 = power (4.5, 1.5)

執行該檔案時,它將顯示:

result1 =  343
result2 =  7
result3 =  1.0000e-10
result4 =  9.5459

主函式和子函式

除匿名函式之外的任何函式都必須在檔案中定義。每個函式檔案都包含一個必需的主函式(首先出現)和任意數量的可選子函式(出現在主函式之後並由其使用)。

主函式可以從定義它們的外部檔案(從命令列或其他函式)呼叫,但子函式不能從命令列或其他函式(在函式檔案外部)呼叫。

子函式僅對定義它們的函式檔案中的主函式和其他子函式可見。

示例

讓我們編寫一個名為 quadratic 的函式,它將計算二次方程的根。該函式將接收三個輸入,二次係數、線性係數和常數項。它將返回根。

函式檔案 quadratic.m 將包含主函式quadratic和子函式disc,後者計算判別式。

建立一個函式檔案quadratic.m,並在其中鍵入以下程式碼:

function [x1,x2] = quadratic(a,b,c)

%this function returns the roots of 
% a quadratic equation.
% It takes 3 input arguments
% which are the co-efficients of x2, x and the 
%constant term
% It returns the roots
d = disc(a,b,c); 
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end   % end of quadratic

function dis = disc(a,b,c) 
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end   % end of sub-function

您可以從命令提示符下呼叫上述函式,如下所示:

quadratic(2,4,-4)

MATLAB 將執行上述語句並返回以下結果:

ans = 0.7321

巢狀函式

您可以在另一個函式的主體中定義函式。這些稱為巢狀函式。巢狀函式包含任何其他函式的任何或所有元件。

巢狀函式在另一個函式的作用域內定義,並且它們共享對包含函式的工作區的訪問許可權。

巢狀函式遵循以下語法:

function x = A(p1, p2)
...
B(p2)
   function y = B(p3)
   ...
   end
...
end

示例

讓我們重寫上一個示例中的quadratic函式,但是這次disc函式將是一個巢狀函式。

建立一個函式檔案quadratic2.m,並在其中鍵入以下程式碼:

function [x1,x2] = quadratic2(a,b,c)
function disc  % nested function
d = sqrt(b^2 - 4*a*c);
end   % end of function disc

disc;
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end   % end of function quadratic2

您可以從命令提示符下呼叫上述函式,如下所示:

quadratic2(2,4,-4)

MATLAB 將執行上述語句並返回以下結果:

ans =  0.73205

私有函式

私有函式是僅對有限數量的其他函式可見的主函式。如果您不想公開函式的實現,則可以將其建立為私有函式。

私有函式駐留在具有特殊名稱private子資料夾中。

它們僅對父資料夾中的函式可見。

示例

讓我們重寫quadratic函式。但是這次,計算判別式的disc函式將是一個私有函式。

在工作目錄中建立一個名為 private 的子資料夾。將以下函式檔案disc.m儲存在其中:

function dis = disc(a,b,c) 
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end      % end of sub-function

在您的工作目錄中建立一個函式 quadratic3.m,並在其中鍵入以下程式碼:

function [x1,x2] = quadratic3(a,b,c)

%this function returns the roots of 
% a quadratic equation.
% It takes 3 input arguments
% which are the co-efficient of x2, x and the 
%constant term
% It returns the roots
d = disc(a,b,c); 

x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end      % end of quadratic3

您可以從命令提示符下呼叫上述函式,如下所示:

quadratic3(2,4,-4)

MATLAB 將執行上述語句並返回以下結果:

ans =  0.73205

全域性變數

全域性變數可以由多個函式共享。為此,您需要在所有函式中將變數宣告為全域性變數。

如果您想從基本工作區訪問該變數,則在命令列中宣告該變數。

全域性宣告必須在函式中實際使用變數之前發生。最好對全域性變數的名稱使用大寫字母,以將其與其他變數區分開來。

示例

讓我們建立一個名為 average.m 的函式檔案,並在其中鍵入以下程式碼:

function avg = average(nums)
global TOTAL
avg = sum(nums)/TOTAL;
end

建立一個指令碼檔案,並在其中鍵入以下程式碼:

global TOTAL;
TOTAL = 10;
n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42];
av = average(n)

執行該檔案時,它將顯示以下結果:

av =  35.500
廣告

© . All rights reserved.