matlab學習筆記13_3建立函數句柄

一塊兒來學matlab-matlab學習筆記13函數

13_3 建立函數句柄

以爲有用的話,歡迎一塊兒討論相互學習~Follow Me

參考文獻
https://ww2.mathworks.cn/help/matlab/matlab_prog/creating-a-function-handle.htmlhtml

能夠爲已命名函數和匿名函數建立函數句柄。能夠將多個函數句柄存儲在數組中,保存並加載它們,方法與對任何其餘變量同樣。

什麼是函數句柄

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

  1. 將一個函數傳遞到另外一個函數(一般稱爲功能函數)。例如,將函數傳遞到 integral 和 fzero 等積分和優化函數。github

  2. 指定回調函數。例如,響應 UI 事件或與數據採集硬件交互的回調。數組

  3. 構造之內聯方式定義而非存儲在程序文件(匿名函數)中的函數的句柄。函數

  4. 從主函數外調用局部函數。學習

  • 可使用 isa(h,'function_handle') 來查看變量 h 是否爲函數句柄。

建立函數句柄

  • 經過在函數名稱前添加一個 @ 符號來爲函數建立句柄。例如,若是有一個名爲 myfunction 的函數,f = @myfunction; .
  • 使用句柄調用函數的方式和直接調用函數同樣
function y = computeSquare(x)
y = x.^2;
end
建立句柄並調用該函數以計算 4 的平方。

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

    16
  • 若是該函數不須要任何輸入參數,使用空括號,而不能直接調用函數名
h = @ones;
a = h()
a =

    1
若是不使用括號,則該賦值會建立另外一個函數句柄。

a = h
a =

    @ones
  • 函數句柄是能夠傳遞給其餘函數的變量,例如:q = integral(f,0,1);
  • 函數句柄會存儲其絕對路徑,所以有效句柄能夠從任意位置調用該函數。沒必要在建立句柄時指定函數路徑,只需指定函數名。優化

    注意

  • 名稱長度 - 函數名稱(包括包名稱和類名稱)的每一個部分都必須小於 namelengthmax 指定的數值。不然 MATLAB 會截斷該名稱的後面一部分。code

  • 範圍 - 在您建立句柄時,該函數必須處於範圍內。所以,該函數必須在 MATLAB 路徑上或位於當前文件夾中。或者,對於局部或嵌套函數句柄,這些函數必須位於當前文件中。htm

  • 優先級 - 當多個函數採用同一名稱時,MATLAB 會使用與調用函數相同的優先級規則來定義函數句柄。事件

  • 重載 - 若是指定的函數在非基礎 MATLAB 類的類中重載函數,那麼在構造該函數的句柄時,函數不會與該函數句柄關聯。相反,MATLAB 會考慮輸入參數並在計算時肯定要調用的實現。

    匿名函數

  • 建立一個指向用於計算平方數的匿名函數的句柄 sqr,並使用其句柄調用該匿名函數
sqr = @(n) n.^2;
x = sqr(3)
x =

     9

由函數句柄組成的數組

  • 您能夠經過將函數句柄收集到一個元胞數組或結構體數組中,來建立由這些函數句柄組成的數組。例如,使用元胞數組:
C = {@sin, @cos, @tan};
C{2}(pi)
ans =

    -1
或使用結構體數組:

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

     1

保存和加載函數句柄

  • 能夠在 MATLAB 中保存和加載函數句柄,就像處理任何其餘變量同樣。換言之,使用 save 和 load 函數。若是您保存函數句柄,則 MATLAB 不會保存路徑信息。若是加載函數句柄,而且函數文件再也不位於該路徑上,則該句柄無效。若是文件位置或文件名在您建立句柄後進行了更改,則該句柄將變得無效。若是句柄無效,MATLAB 可能會在您加載文件時顯示警告。當調用無效句柄時,MATLAB 將引起錯誤。
相關文章
相關標籤/搜索