MATLAB 函數(shù)

函數(shù)是一起執(zhí)行任務(wù)的一組語句。在MATLAB中,函數(shù)是在單獨的文件中定義的。文件名和函數(shù)名應(yīng)該相同。

函數(shù)在其自己的工作空間(也稱為本地工作空間)中對變量進行操作,與在MATLAB命令提示符下訪問的工作空間(稱為基本工作空間)不同。

函數(shù)可以接受多個輸入?yún)?shù),并且可以返回多個輸出參數(shù)。

函數(shù)語句的語法是-

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

在線示例

以下名為mymax的函數(shù)應(yīng)寫入名為mymax.m的文件中。它以五個數(shù)字作為參數(shù),并返回最大的數(shù)字。

創(chuàng)建一個函數(shù)文件,命名mymax.m并在其中輸入以下代碼-

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

%此函數(shù)用于計算
%輸入五個數(shù)字
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

函數(shù)的第一行以關(guān)鍵字 function開頭 。它給出了函數(shù)的名稱和參數(shù)的順序。在我們的示例中,mymax函數(shù)具有五個輸入?yún)?shù)和一個輸出參數(shù)。

函數(shù)語句后的注釋行提供幫助文本。當您鍵入以下內(nèi)容時,將打印這些行:

help mymax

MATLAB將執(zhí)行上述語句并返回以下結(jié)果-

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

您可以將函數(shù)稱為-

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

MATLAB將執(zhí)行上述語句并返回以下結(jié)果-

ans = 89

匿名函數(shù)

匿名函數(shù)就像傳統(tǒng)編程語言中的內(nèi)聯(lián)函數(shù)一樣,是在單個MATLAB語句中定義的。它由一個MATLAB表達式以及任意數(shù)量的輸入和輸出參數(shù)組成。

您可以直接在MATLAB命令行或在函數(shù)或腳本中定義匿名函數(shù)。

這樣,您可以創(chuàng)建簡單的功能,而不必為其創(chuàng)建文件。

從表達式創(chuàng)建匿名函數(shù)的語法是

f = @(arglist)expression

實例

在此示例中,我們將編寫一個名為power的匿名函數(shù),該函數(shù)將兩個數(shù)字作為輸入,并將第一個數(shù)字提高為第二個數(shù)字的冪。

創(chuàng)建一個腳本文件并在其中鍵入以下代碼-

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

主和子函數(shù)

必須在文件中定義除匿名函數(shù)以外的任何函數(shù)。每個函數(shù)文件都包含一個首先出現(xiàn)的必需主函數(shù),以及在主函數(shù)之后并由其使用的任意數(shù)量的可選子函數(shù)。

可以從定義主文件的文件外部(從命令行或其他函數(shù))調(diào)用主函數(shù),但是不能從命令行或其他函數(shù)在功能文件外部調(diào)用子函數(shù)。

子函數(shù)僅對主函數(shù)和定義它們的函數(shù)文件中的其他子函數(shù)可見。

實例

讓我們寫一個名為quadratic的函數(shù)來計算一個二次方程的根。該函數(shù)包含三個輸入:二次系數(shù)、線性系數(shù)和常數(shù)項。它將回歸根。

函數(shù)文件quadratic.m將包含主函數(shù)quadratic和子函數(shù)disc,后者計算判別式。

創(chuàng)建一個函數(shù)文件 quadratic.m 并在其中輸入以下代碼

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

%此函數(shù)返回
%二次方程。
%它需要3個輸入?yún)?shù)
%x2,x和
%常數(shù)項
%它返回根
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) 
%函數(shù)計算判別式
dis = sqrt(b^2 - 4*a*c);
end   % end of sub-function

您可以從命令提示符處調(diào)用上述功能,如下所示:

quadratic(2,4,-4)

MATLAB將執(zhí)行上述語句并返回以下結(jié)果-

ans = 0.7321

嵌套函數(shù)

您可以在另一個函數(shù)的主體內(nèi)定義函數(shù)。這些稱為嵌套函數(shù)。嵌套函數(shù)包含任何其他函數(shù)的任何或所有組件。

嵌套函數(shù)在另一個函數(shù)的范圍內(nèi)定義,它們共享對包含函數(shù)的工作區(qū)的訪問。

嵌套函數(shù)遵循以下語法-

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

實例

讓我們重寫前面實例中的quadratic函數(shù),不過,這次disc函數(shù)將是一個嵌套函數(shù)。

創(chuàng)建一個函數(shù)文件quadratic2.m,并在其中輸入以下代碼-

function [x1,x2] = quadratic2(a,b,c)
function disc  %嵌套函數(shù)
d = sqrt(b^2 - 4*a*c);
end   % 結(jié)束函數(shù)disc

disc;
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end   %結(jié)束函數(shù) quadratic2

您可以從命令提示符處調(diào)用上述函數(shù),如下所示:

quadratic2(2,4,-4)

MATLAB將執(zhí)行上述語句并返回以下結(jié)果-

ans =  0.73205

私有函數(shù)

私有函數(shù)是僅對有限的一組其他函數(shù)可見的主函數(shù)。如果不想公開函數(shù)function(s)的實現(xiàn),可以將它們創(chuàng)建為私有函數(shù)。

私有函數(shù)位于具有特殊名稱 Private 的子文件夾中。

它們僅對父文件夾中的函數(shù)可見。

實例

讓我們重寫quadratic函數(shù)。不過,這一次,disc函數(shù)計算判別式,將是一個私有函數(shù)。

在工作目錄文件夾中創(chuàng)建一個名為 private 的子文件夾,在其中存儲以下函數(shù)文件 disc.m

function dis = disc(a,b,c) 
%函數(shù)計算判別式
dis = sqrt(b^2 - 4*a*c);
end      %子函數(shù)結(jié)束

在您的工作目錄中創(chuàng)建一個函數(shù) quadratic3.m ,并在其中輸入以下代碼-

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

% 這個函數(shù)返回
% 一元二次方程。
它需要3個輸入?yún)?shù)
% 它們是 x2,x 和
% 常數(shù)項
% 它返回根
d = disc(a,b,c); 

x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end      %結(jié)束 quadratic3

您可以從命令提示符處調(diào)用上述函數(shù),如下所示:

quadratic3(2,4,-4)

MATLAB將執(zhí)行上述語句并返回以下結(jié)果-

ans =  0.73205

全局變量

全局變量可以由多個函數(shù)共享。為此,您需要在所有函數(shù)中將變量聲明為全局變量。

如果要從基本工作空間訪問該變量,請在命令行中聲明該變量。

全局聲明必須在變量實際在函數(shù)中使用之前發(fā)生。最好將大寫字母用作全局變量的名稱,以將其與其他變量區(qū)分開。

實例

讓我們創(chuàng)建一個名為average.m的函數(shù)文件,并在其中輸入以下代碼-

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

創(chuàng)建一個腳本文件并在其中鍵入以下代碼-

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

運行文件時,它將顯示以下結(jié)果-

av =  35.500
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清