Maltab中有關的函數知識,你都知道嗎?
本博客會討論:如何定義函數;如何將數據傳遞到函數;如何返回數據,包括多個結果;如何在函數中加入僅能用作幫助的其他函數;
Maltab中函數的通用模板
通用模板:
function <return info> <founction name> (<paramters>)
<doucumentation>
<code body>
對於大部分函數來說,<return info>中是返回結果的名稱,後面緊跟一個等號(=),如果返回結果的數量大於1,這些結果被放在一個向量的中,類似[outputArg1,outputArg2,...]
。如果函數沒有返回結果,可以省略列表和等號。<function name>是函數名,但需注意命名規則。<parameters>是傳遞到函數的數據名稱的列表,各種數據名稱之間用逗號隔開,例如:(inputArg1,inputArg2)
;<documentation>是一行或多行註釋,描述了函數的功能和調用方法。
定義函數
在matlab語言中,函數必須保存爲一個單獨的文件,該文件保存在任何腳本或函數都可以調用的目錄中。如果函數名稱爲function_name
,那麼包含該函數的文件名必須是<function_name>.m
.
例如:
這裏定義了,一個名爲get_cylinder的函數,用於計算圓柱的體積
function volume = get_cylinder(height,radius)
% 計算圓柱體積的函數
base = pi* radius^2;
volume = base*height;
end
實現:
使用help get_cylinder直接可以顯示函數的幫助文檔,就是你定義函數是寫的註釋內容。
函數的保存和使用
創建自定義Matlab函數和創建.m文件中的腳本是一樣的。創建的文件被保存爲一個M文件,M文件的名稱必須與函數的名稱相同。
例如,我剛剛創建了一個名爲get_cylinder的函數,函數就必須保存在一個名稱爲get_cylinder.m的文件文件一但保存,用戶就可以可以調用了。
調用的方式是:在命令行窗口,腳本或其他函數中輸入函數的名稱和形式、數量準確的參數就可以了,如果沒有將函數的調用結果複製給其他變量,它將被賦值給變量ans.
可變數量的參數
雖然參數個數通常時固定的,但是大部分編程語言(包括Matlab)都能夠處理可變數量的參數,無論是輸入常數還是返回常數。內置函數nargin可以計算用戶調用函數時實際提供的參數個數。
例如:
前面那個例子中,可以使用nargin查看函數所需提供參數的個數
如果函數中含有nargin,用戶調用該函數時,只要提供一些他認爲重要的值,而那些不重要的值則會使用函數的默認值。
function c = addme(a,b)
switch nargin
case 2
c = a + b;
case 1
c = a + a;
otherwise
c = 0;
end
end
演示:
使用nargout函數,可以計算用戶實際提供的存儲變量的個數。
例如:
使用varargin的函數輸入:確定使用 varargin 的函數可接受多少個輸入。
例如:
function num = sum1(a,b,varargin)
num = a+b+varargin{:};
end
我們再調用函數nargin看看,負號表示第三個輸入是 varargin。
再調用一下sum1的函數,發現varargin確實可以支持多參數輸入
###返回多個結果
很多語言都能通過參數名稱來返回函數的多個結果,但Maltab是其中比較特別的。matlab的多個結果用變量名的 “向量” 來表示
例如:
function [area,volume] = cylinder5_2(height,radius)
%計算圓柱體體積的函數
%usage:[area,volume] = cylinder(height,radius)
base = pi .* radius.^2;
volume = base .* height;
area = 2 * pi * radius .* height + 2* base;
end
這裏顯示了一個能調用返回多個結果的函數。
常規方法是使用變量的名稱來獲取向量中的結果。該名稱可以爲任何有效的變量名,而值是按照定義的結果順序來返回的。如果返回的結果數少於全部結果(或根本沒有),則按照從左到右的順序返回所有結果中的前幾個。
例如:
這裏如果只想要第二個結果值,必須在第一個位置放一個‘~’標記。
輔助函數
因爲Maltab 語言使用文件名來識別函數,所有,正常情況下,每個函數都應該保存爲一個單獨的M文件。可是,有時候,執行M文件的主函數中包括的算法時,需要使用到輔助函數(有時候可稱爲“幫助函數”)。如果某個輔助函數只應用於主函數或其幫助函數可以將該輔助函數與其調用函數寫在同一個文件,輔助函數寫在主函數的後面。
function result = volume(radius,height)
result = get_are(radius)*height;
end
function ares = get_are(radius)
ares = radius^2*pi;
end
全局變量
由於matlab總是將輸入數據複製到函數的工作空間中,所有有時會非常低效地將大數據集輸入和輸出函數。爲了避免傳遞大量數據,我們可以使用全局變量。全局變量必須同時再調用腳本和使用關鍵詞global
的函數中定義。
例如:
function change_num(num)
global number
number = num + 4;
end
結果:
但是,必須謹慎使用全局變量,因爲任何具有全局訪問權限的函數都有權更改該數據。
小結
- 函數必須在同名文件中定義,關鍵詞
function
可以將其區別於腳本。 - 參數被依次複製到函數中,並賦值給相應的形參。
- 通過將結果賦值給返回變量,結果被返回給調用方
- 除非被聲明爲全局變量,否則函數內的變量只能再函數的代碼塊中訪問
- 輔助函數只能被同一個文件中的函數(可以添加到主函數的下面)訪問,否則需遵守與主函數相同的規則。
特殊字符、保留字和函數
特殊字符、保留字和函數 | 含義 |
---|---|
help | 調用函數 |
function | 將M文件標識爲函數 |
nargin | 確定函數調用者提供的輸入參數的數量 |
natgout | 確定函數調用者請求的輸出參數的數量 |
global <var> | 定義變量<var>爲全局變量 |