匿名函數,子函數,私有函數等函數類型
匿名函數:
匿名函數沒有函數名,也不是.m檔案,隻包含一個表達式和輸入輸出參數。
Fxy=@(x,y)x.^y+3*x*y
x,y為輸入輸入參數,Fxy為函數名
子函數:
在 Matlab中, 多個函數寫入一個.m檔案中。其中出現的第一個函數稱為主函數,其他函數稱為子函數,儲存時檔案名與主函數名相同,外部程式隻能調用主函數。
特點:
子函數隻能被同一檔案下的其他函數調用
通過名稱調用函數時優先調用子函數,再調用内置函數。
同一檔案的主函數,子函數工作區獨立,各個函數之間的資訊傳遞通過輸入輸出參數實作。
Help,lookfor無法顯示子函數的相關資訊
function F=ex4_19(n)
A=1;
w=2;
phi=pi/2;
signal=createsig(A,w,phi);
F=signal.^n;%%%%%%%%subfunction%%%%%%%%%%function signal=createsig(A,w,phi)
x=0:pi/100:pi*2;
signal=A*sin(w*x+phi);
私有函數和私有目錄:
私有函數指位于私有目錄private下的函數檔案。
特點:
私有函數構造與普通函數相同。
私有函數隻能被private目錄下的M檔案直接調用。
使用指令調用私有函數,優先級僅次于Matlab内置函數和子函數
Help,lookfor無法顯示私有函數資訊。
例如,在位于 MATLAB® 搜尋路徑下的檔案夾内,建立名稱為 private 的子檔案夾。不要将 private 添加到該路徑。在 private 檔案夾内的名稱為 findme.m 的檔案中,建立一個函數:
function findme% FINDME An example of a privatefunction.
disp('You found the private function.')
在private檔案夾上層目錄檔案夾并建立一個名稱為 visible.m 的檔案。
function visible
findme
先執行函數visible再執行findme
重載函數:
與其他程式設計語言語言重登重載函數意義相同,同名函數不同輸入參數的重載,在實際使用中會調用對應正确參數的函數并執行
eval和feval函數:
eval函數與文本變量一起使用,在具體使用中文法:
eval(s);
s為字元串,eval函數可以求表達式的值或者執行文本字元串的語句。
例:eval_exp1:
Array=1:5;
String='[Array*2;Array/2;2.^Array]';
Output=eval(String)
執行結果:
Output =
2.0000 4.0000 6.0000 8.0000 10.0000
0.5000 1.0000 1.5000 2.0000 2.5000
2.0000 4.0000 8.0000 16.0000 32.0000
該eval函數求出了字元串中的值
例:eval_exp2:
theta=pi;
eval('Output=exp(sin(theta))');
who
執行結果:
該eval函數執行了字元串中的語句
feval函數
[y1,...,yN] =feval(fun,x1,...,xM)
該指令含義為用fun函數執行參數為x1,x1………….xM的運算,與函數句柄類似
例:feval_exp1.m
Array=1:5;
String='[Array*2;Array/2;2.^Array]';
Outpute=eval(String)
Outputf=feval(String)%feval隻接受函數名,錯誤執行個體
執行結果:
例:feval_exp2.m
fun='round'x=2.5;
Output=feval(fun,x)
執行結果:
Y =round(X) 将 X 的每個元素四舍五入為最近的整數。在對等情況下,即有元素的小數部分恰好為 0.5 時,round 函數會偏離零四舍五入到具有更大幅值的整數。
内聯函數:在以後的版本中将會删除inline。請改用匿名函數。(是以隻做了解)
inline(expr) 按照 expr 中包含的 MATLAB® 表達式構造一個内聯函數對象。内聯函數的輸入參數是通過在 expr 中搜尋孤立的小寫字母字元(i 或 j 除外)自動确定的,該小寫字母字元不屬于通過多個字母字元構成的字詞的一部分。如果不存在此類字元,則使用 x。如果該字元不是唯一的,則使用最接近 x 的字元。如果找到兩個字元,則選擇在字母表中靠後的字元。
inline(expr,arg1,arg2,...) 構造一個由 arg1、arg2 ... 指定輸入參數的内聯函數。可以使用多字元符号名稱。
inline(expr,n)(其中 n 是标量)構造一個其輸入參數為 x, P1, P2, ... 的内聯函數。
例:此示例建立一個簡單的内聯函數将某個數平方
例:此示例建立一個内聯函數以表示公式 f = 3sin(2x2)。生成的内聯函數可以使用 argnames 和 formula 函數進行計算
内聯函數相關的四個指令:
char(fun) 将内聯函數轉換為字元數組。這與 formula(fun) 完全相同。
argnames(fun) 以字元向量元胞數組形式傳回内聯對象 fun 的輸入參數名稱。
formula(fun) 傳回内聯對象 fun 的公式。
vectorize(fun) 在 fun 的公式中将 . 插入在任何 ^、* 或 /' 之前。結果是内聯函數的向量化版本。
函數優先順序:[lz1]
本主題介紹 MATLAB® 在目前作用域内的多個函數具有相同名稱時如何确定要調用的函數。目前作用域包括目前檔案、相對于目前運作的函數的可選私有子檔案夾、目前檔案夾以及 MATLAB 路徑。
MATLAB 使用下面的優先順序:
變量
在認定名稱與函數比對之前,MATLAB 會先在目前工作區中檢查具有該名稱的變量。
注意:
如果您建立與函數同名的變量,MATLAB 不能運作該函數,直到您從記憶體中清除該變量。
導入的包函數
包函數與特定檔案夾相關聯。使用 import 函數導入包函數時,它優先于同名的其他所有函數。
目前函數内的嵌套函數
目前檔案内的局部函數
私有函數
私有函數是名稱為 private 的子檔案夾(即目前運作的檔案所在的檔案夾正下方的檔案夾)中的函數。
對象函數
對象函數以輸入參數清單形式接受特定類的對象。如果存在多個同名的對象函數,MATLAB 檢查輸入參數的類以确定要使用的函數。
@ 檔案夾中的類構造函數
MATLAB 使用類構造函數建立各種對象(例如 timeseries 或 audioplayer),您也可以使用面向對象的程式設計定義自己的類。例如,如果您建立類檔案夾 @polynom 和構造函數 @polynom/polynom.m,構造函數優先于路徑中任何位置的名為 polynom.m 的其他函數。
加載的 Simulink® 模型
目前檔案夾中的函數
路徑中其他位置的函數,按照顯示順序
在同一檔案夾内确定函數優先級時,MATLAB 按以下順序考慮檔案類型:
内置函數
MEX 函數
未加載的 Simulink 模型檔案,檔案類型的順序如下:SLX 檔案
MDL 檔案
使用 MATLAB App 設計工具建立的 App 檔案 (.mlapp)
帶有 .mlx 擴充名的程式檔案
P 檔案(即帶有 .p 擴充名的編碼程式檔案)
帶有 .m 擴充名的程式檔案
例如,如果 MATLAB 在同一檔案夾中找到同名的 .m 檔案和 P 檔案,它使用 P 檔案。因為 P 檔案不會自動重新生成,是以確定您在編輯 P 檔案時重新生成該檔案。
要确定 MATLAB 對特定輸入所調用的函數,請在對 which 函數的調用中包括函數名稱和輸入。
[lz1]函數執行順序,部分函數未涉及,該知識标注為重點,遇見函數執行順序相關問題時便于查找