天天看點

Matlab中的函數

        當使用代碼時,遇到一片段很多并且使用率非常高時,我們就可以用到函數來封裝他,每次調用他的時候,就隻要調用函數名就可。Matlab也提供了函數的實作。

1.自定義函數

        當系統自帶的函數不能滿足目前需求時,我們就可以像Java一樣聲明一個新的方法。Matlab也可以做同樣的事。

        函數是寫在一個.m字尾檔案裡的,并且一個檔案隻能有一個函數。

Matlab中的函數

         建立腳本之後,就會出現一個編輯器框。在此框寫你要自定義函數的内容。

Matlab中的函數

         函數格式為:

% 函數

% function  [傳回值] = 函數名(形參)

%       函數體執行語句

        其中函數名最好跟檔案名一緻,如果你提前寫好了函數名,儲存檔案時會預設為該檔案名。

形參為你要傳入的元素,如果有多個則按照逗号排好(a,b)。

        形參就是你需要跟随調用函數時傳進來的參數矩陣,并且可以在該函數體内使用的。

        傳回值如果有多個的話,就要用[ ]中括号,變量之間的排列也用 , 連接配接。

        如:我要實作一個a矩陣和b矩陣交換的函數。并且傳回兩個矩陣 。

Matlab中的函數

        儲存之後就會提示你重命名

Matlab中的函數

         儲存之後,自定義函數就寫好了。

        我們來進行測試一下。

        在腳本檔案或者指令行視窗調用函數時,直接使用  接受傳回值的矩陣 = 函數名(實參) ,實參就是需要傳入函數中的值,傳回的值就會依次賦給左邊的變量矩陣。

A = [1:10];

B = [1;2;3];

[A,B] = exchange(A,B)

       運作之後, 我們可以發現A矩陣和B矩陣的值交換了 。

Matlab中的函數

        這種方式建立函數,是允許函數重載。那麼對于函數重載時,如何控制函數主體内容的實作可以用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

        對于指令行視窗分别執行:

Matlab中的函數
Matlab中的函數
Matlab中的函數

        建立test_nargout.m

function [a,b] = test_nargout()

    if nargout ==0

        disp('調用函數傳回0參數');

    elseif nargout ==1

        disp('調用函數傳回1參數');

    elseif nargout==2

        disp('調用函數傳回2參數');

    end

 來調用一下函數。

Matlab中的函數

         當發現自定義函數需要重新建立一個檔案夾存放可能有點麻煩時,并且感覺簡單的自定義函數沒必要這樣大張旗鼓的話,可以試試下面兩種函數。下面兩個函數就有一個不安全的問題,可以使用在函數外已經定義過的變量可以被使用。

2.inline函數

        直接可以在指令行或腳本檔案定義函數的。

%inline函數

    函數名  =  inline('函數表達式','自變量'); %自變量就是你需要傳入的參數

        其中,自變量就是上述的形參,你需要傳入的值,并且可以在函數表達式中當已知量使用,當自變量很多時,可以用,隔開。如 inline('函數表達式','自變量1','自變量2') 

        我們來測試一下,寫一個傳回1-n之和的函數。

fsum = inline('sum(1:n)','n');

b = fsum(100)

        不出所料b的值變成了5050

Matlab中的函數

3.匿名函數

函數名= @(自變量)函數表達式   %其中自變量就是需要傳入的參數

         開頭一個@ ,加一個被小括号包圍的傳入的參數。函數表達式不需要小括号和'  '包圍,可以直接寫一個公式。

        照樣寫一個例子,求傳回1-n之和的函數

fsum_1 = @(n)sum(1:n);

c = fsum_1(100)

Matlab中的函數

繼續閱讀