位置:首頁 > 高級語言 > Matlab教學 > MATLAB函數

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 函數有5個輸入參數和一個輸出參數。

注釋行語句的功能後提供的幫助文本。這些線條打印,當輸入:

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.7321

私有函數

一個私有函數是一個主要的函數,是隻看得見一組有限的其它函數。如果不想公開的執行的一個函數,可以創建私有函數。

私有函數駐留特殊的名字私人的子文件夾中。

他們是可見的,隻有在父文件夾的函數。

例子

讓我們重寫quadratic 函數。然而,這時候,計算​​的判彆式disc 函數,這是一個私有函數。

創建一個子文件夾命名為私人工作目錄。它存儲在以下函數文件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-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 quadratic3

可以從命令提示符調用上麵的函數為:

quadratic3(2,4,-4)

MATLAB將執行上麵的語句,並返回以下結果:

ans =
    0.7321

全局變量

全局變量可以共享由一個以上的函數。對於這一點,需要將變量聲明為全局在所有的函數可使用。

如果想訪問該變量從基工作區,然後在命令行聲明的變量。

全局聲明必須出現在變量中實際上是使用功能。這是一個很好的做法是使用大寫字母為全局變量的名稱,以區彆於其他變量。

例子

讓我們創建一個函數文件名為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.5000