天天看點

matlab feval和eval,Matlab匿名函數,子函數,私有函數,重載函數,eval和feval函數...

匿名函數,子函數,私有函數等函數類型

匿名函數:

匿名函數沒有函數名,也不是.m檔案,隻包含一個表達式和輸入輸出參數。

Fxy=@(x,y)x.^y+3*x*y

matlab feval和eval,Matlab匿名函數,子函數,私有函數,重載函數,eval和feval函數...

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

matlab feval和eval,Matlab匿名函數,子函數,私有函數,重載函數,eval和feval函數...

重載函數:

與其他程式設計語言語言重登重載函數意義相同,同名函數不同輸入參數的重載,在實際使用中會調用對應正确參數的函數并執行

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

執行結果:

matlab feval和eval,Matlab匿名函數,子函數,私有函數,重載函數,eval和feval函數...

該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隻接受函數名,錯誤執行個體

執行結果:

matlab feval和eval,Matlab匿名函數,子函數,私有函數,重載函數,eval和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, ... 的内聯函數。

例:此示例建立一個簡單的内聯函數将某個數平方

matlab feval和eval,Matlab匿名函數,子函數,私有函數,重載函數,eval和feval函數...

例:此示例建立一個内聯函數以表示公式 f = 3sin(2x2)。生成的内聯函數可以使用 argnames 和 formula 函數進行計算

matlab feval和eval,Matlab匿名函數,子函數,私有函數,重載函數,eval和feval函數...

内聯函數相關的四個指令:

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]函數執行順序,部分函數未涉及,該知識标注為重點,遇見函數執行順序相關問題時便于查找