【Matlab】函數句柄和匿名函數


什么是函數句柄?

函數句柄是一種存儲指向函數的關聯關系的 MATLAB® 數據類型。間接調用函數使您在調用該函數時無需考慮調用位置。函數句柄的典型用法包括:

  • 將一個函數傳遞到另一個函數(通常稱為復合函數)。例如,將函數傳遞到 integralfzero 等積分和優化函數。
  • 指定回調函數(例如,響應 UI 事件或與數據采集硬件交互的回調)。
  • 構造以內聯方式定義而非存儲在程序文件(匿名函數)中的函數的句柄。
  • 從主函數外調用局部函數。

您可以使用 isa``(h,'function_handle') 來查看變量 h 是否為函數句柄

創建函數句柄

通過在函數名稱前添加一個 @ 符號來為函數創建句柄。例如,假設您有一個名為 computeSquare 的函數,該函數定義為:

function y = computeSquare(x)
y = x.^2;
end

則可以創建句柄並調用該函數以計算 4 的平方。

f = @computeSquare;
a = 4;
b = f(a)

函數句柄是您可傳遞給其他函數的變量。例如,計算 x2 在區間 [0,1] 上的積分。

q = integral(f,0,1);

函數句柄會存儲其絕對路徑,因此如果您有有效句柄,則可以從任意位置調用該函數。您不必在創建句柄時指定函數路徑,只需指定函數名。

匿名函數

您可以創建指向匿名函數的句柄。匿名函數是基於單行表達式的 MATLAB 函數,不需要程序文件。構造指向匿名函數的句柄,方法是定義 anonymous_function 函數主體,以及指向匿名函數 arglist 的以逗號分隔的輸入參數列表。語法為:

h = @(arglist)anonymous_function

例如,創建一個指向用於計算平方數的匿名函數的句柄 sqr,並使用其句柄調用該匿名函數。

sqr = @(n) n.^2;
x = sqr(3)

由函數句柄組成的數組

您可以通過將函數句柄收集到一個元胞數組或結構體數組中,來創建由這些函數句柄組成的數組。例如,使用元胞數組:

C = {@sin, @cos, @tan};
C{2}(pi)
ans =

    -1

或使用結構體數組:

S.a = @sin;  S.b = @cos;  S.c = @tan;
S.a(pi/2)


免責聲明!

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



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