Matlab自定義函數詳解


很久以前寫的一篇Matlab自定義函數訪問量很大,可惜沒有點贊的,我感覺是我沒講清楚,這里又寫了一篇筆記

Matlab函數

函數是組織好的,可重復使用的,用來實現單一,或相關聯功能的代碼段。

函數能提高應用的模塊性,和代碼的重復利用率。你已經知道Matlab提供了許多內建函數,比如disp()。但你也可以自己創建函數,這被叫做用戶自定義函數

>> disp('hello world')
hello world

總的來說,自定義函數分為兩步:即定義函數調用函數

定義一個函數

你可以定義一個由自己想要功能的函數,以下是簡單的規則:

  • 函數代碼塊以 function關鍵詞開頭,后接輸出變量和函數標識符名稱和圓括號 ()
  • 任何傳入參數和自變量必須放在圓括號中間,圓括號之間可以用於定義參數。
  • 函數的第一行語句可以選擇性地使用文檔字符串—用於存放函數說明。
  • 函數內容以end結束。

函數需要定義在腳本文件(*.m)中運行,不可以在命令窗口中臨時創建。

語法

Matlab定義函數需要使用function關鍵字,一般格式如下:

function 輸出變量 = 函數名(輸入變量)
	函數體
end

這里的輸入變量和輸出變量都可以根據實際情況缺省。

實例

創建一個函數,用來輸出“hello world!” ,步驟如下:

新建一個腳本,命名為eg1.m

test();
function  test()
  disp('hello world!')
end

點擊頂部菜單的運行按鈕,即可在命令窗口輸出:

>> eg1
hello world!

更復雜一點的應用,我們讓函數帶上輸入變量和輸出變量:

s = calc_area(4,5);
function  s = calc_area(w,h)
  s = w*h;
  disp(['area=',num2str(s)]);
end

以上實例輸出:

>> eg2
area=20

輸入變量缺省

有時候,輸入變量的個數不確定,但是又想將不同個數情況統一到一個函數里,即輸入變量有缺省時,可以利用nargin來判斷,然后給出對應的輸出。例如:

out(1)
out(1,2)
out(1,2,3)
function  out(a,b,c)
if nargin == 1
    disp(a)
elseif nargin == 2
    disp([a,b])
elseif nargin == 3
    disp([a,b,c])
end
end

上面的實例將會得到:

>> eg5
     1

     1     2

     1     2     3

可以看到,當輸入不同輸入變量個數時,會找到對應個數下的執行代碼,返回相應的內容。

當然這種做法也存在弊端,當變量個數太多時,要寫很多個判斷;這種情況下可以嘗試inputParser,這里我就不多解釋了,有興趣可以看這篇博文了解下。

函數調用

函數基本結構完成后,進行調用時,存在兩種方法:

  • 直接在函數所在腳本文件內調用(上面的例子就是這種情況);
  • 函數定義與調用分開,各自存為一個腳本,運行調用腳本。

法一:腳本內調用函數

直接在函數腳本內調用

如上圖所示,調用函數在前,定義函數在后,點運行即可得到輸出。

法二:函數腳本獨立,另外寫代碼調用

調用函數

定義函數

如上圖所示,函數腳本和調用函數的腳本分開了,保存在同一路徑下

在第二種方法下,也可以在命令窗口直接調用所寫的函數:

命令窗口調用函數

這種調用與上面本質上是一樣的,都是首先找到以函數名命名的腳本文件,然后再執行函數內部代碼塊,返回結果。在這里必須注意函數腳本名字要與函數名一致。

事實上,為了讓編程變得系統化,模塊化,我們不建議你采用第一種方法去寫代碼,因為這樣不利於分析和維護代碼。

而采用后面一種方法時,我們可以定義很多個函數,然后在其他腳本里調用它們,這樣形成了一種模塊化的關系。我們在分析代碼時,注意力可以集中到主程序上,思路將更加清晰。

輸出值缺省調用

在matlab的函數中,可以選擇性地獲取所返回的變量列表值,下面給出實例:

default = out()
[a,~,~]= out()
[~,b,~] = out()
[~,~,c] = out()
function  [a,b,c] = out()
  a = 1;
  b = 2;
  c = 3;
end

上述實例輸出結果:

>> eg4

default =

     1


a =

     1


b =

     2


c =

     3

可以看到,函數默認以返回的第一個變量為輸出值;若想得到返回的某個值時,用變量接住,對於不需要的值,則需要用~占位,但不接收這個值,這樣做的目的就是為了保證輸出的序號能夠匹配到。

小結

函數就是定義和調用,針對實際問題,分析出輸入、輸出變量,理清楚中間環節以什么樣的流程一步步轉換,這樣就可以順利完成自定義函數的編寫。

經過上面的學習,你應該掌握了基本的自定義函數的用法了。那么開始你的探索之旅吧,以代碼為筆,勾畫出腦海中的想法,讓它變成現實!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM