當使用代碼時,遇到一片段很多并且使用率非常高時,我們就可以用到函數來封裝他,每次調用他的時候,就隻要調用函數名就可。Matlab也提供了函數的實作。
1.自定義函數
當系統自帶的函數不能滿足目前需求時,我們就可以像Java一樣聲明一個新的方法。Matlab也可以做同樣的事。
函數是寫在一個.m字尾檔案裡的,并且一個檔案隻能有一個函數。

建立腳本之後,就會出現一個編輯器框。在此框寫你要自定義函數的内容。
函數格式為:
% 函數
% function [傳回值] = 函數名(形參)
% 函數體執行語句
其中函數名最好跟檔案名一緻,如果你提前寫好了函數名,儲存檔案時會預設為該檔案名。
形參為你要傳入的元素,如果有多個則按照逗号排好(a,b)。
形參就是你需要跟随調用函數時傳進來的參數矩陣,并且可以在該函數體内使用的。
傳回值如果有多個的話,就要用[ ]中括号,變量之間的排列也用 , 連接配接。
如:我要實作一個a矩陣和b矩陣交換的函數。并且傳回兩個矩陣 。
儲存之後就會提示你重命名
儲存之後,自定義函數就寫好了。
我們來進行測試一下。
在腳本檔案或者指令行視窗調用函數時,直接使用 接受傳回值的矩陣 = 函數名(實參) ,實參就是需要傳入函數中的值,傳回的值就會依次賦給左邊的變量矩陣。
A = [1:10];
B = [1;2;3];
[A,B] = exchange(A,B)
運作之後, 我們可以發現A矩陣和B矩陣的值交換了 。
這種方式建立函數,是允許函數重載。那麼對于函數重載時,如何控制函數主體内容的實作可以用nargin 和nargout 。這兩個可以捕捉到是如何調用函數的,一個記錄傳入參數的個數,一個記錄函數傳回參數的個數。
nargin 傳回目前調用該函數之後傳入參數的個數。
nargout 傳回調用該函數之後函數傳回的參數的個數。
我們來試一下。
建立test_nargin.m檔案
function [a,b] = test_nargin(a,b)
if nargin == 0
disp('沒有參數傳入');
elseif nargin==1
disp('有一個參數傳入');
elseif nargin ==2
disp('有兩個參數傳入');
end
對于指令行視窗分别執行:
建立test_nargout.m
function [a,b] = test_nargout()
if nargout ==0
disp('調用函數傳回0參數');
elseif nargout ==1
disp('調用函數傳回1參數');
elseif nargout==2
disp('調用函數傳回2參數');
end
來調用一下函數。
當發現自定義函數需要重新建立一個檔案夾存放可能有點麻煩時,并且感覺簡單的自定義函數沒必要這樣大張旗鼓的話,可以試試下面兩種函數。下面兩個函數就有一個不安全的問題,可以使用在函數外已經定義過的變量可以被使用。
2.inline函數
直接可以在指令行或腳本檔案定義函數的。
%inline函數
函數名 = inline('函數表達式','自變量'); %自變量就是你需要傳入的參數
其中,自變量就是上述的形參,你需要傳入的值,并且可以在函數表達式中當已知量使用,當自變量很多時,可以用,隔開。如 inline('函數表達式','自變量1','自變量2')
我們來測試一下,寫一個傳回1-n之和的函數。
fsum = inline('sum(1:n)','n');
b = fsum(100)
不出所料b的值變成了5050
3.匿名函數
函數名= @(自變量)函數表達式 %其中自變量就是需要傳入的參數
開頭一個@ ,加一個被小括号包圍的傳入的參數。函數表達式不需要小括号和' '包圍,可以直接寫一個公式。
照樣寫一個例子,求傳回1-n之和的函數
fsum_1 = @(n)sum(1:n);
c = fsum_1(100)