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
函數有五個輸入參數和一個輸出參數。
函數語句之後的註釋行提供了幫助文本。當鍵入時,這些行被打印 -
Trial>> help mymax
This function calculates the maximum of the
five numbers given as input
現在,我們來調用這個函數 -
mymax(11,22,35,81,198)
執行上面代碼,得到以下結果 -
Trial>> mymax(11,22,35,81,198)
ans =
198
匿名函數
匿名函數就像傳統編程語言中的內聯函數,在單個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
可以從命令提示符調用上述函數 -
Trial>> quadratic(2,4,-4)
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.m
函數,得到以下結果 -
Trial>> quadratic2(2,4,-4)
ans =
0.7321
私有函數
私有函數是僅在有限的其他函數組中可見的主函數。如果不想公開函數的實現,則可以將其創建爲私有函數。
私有函數處在在專用名稱爲私有的子文件夾中。
它們只對父文件夾中的函數可見。
示例
下面來重寫二次函數。這一次,計算判別式的disc
函數將是私有函數。
在工作目錄中創建一個名爲private
的子文件夾(F:\worksp\matlab\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
(對應目錄爲:F:\worksp\matlab),並在其中鍵入以下代碼:
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
在Matlab命令行中,調用以上定義的函數 -
Trial>> quadratic3(2,4,-4)
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)
執行上面示例代碼,得到以下結果 -
Trial>> global TOTAL;
TOTAL = 10;
n = [36, 45, 35, 45, 33, 29, 50, 41, 58, 47];
av = average(n)
av =
41.9000