問:f=@(x)acos(x)表示什么意思?其中@代表什么?
答:表示f為函數句柄,@是定義句柄的運算符。f=@(x)acos(x) 相當於建立了一個函數文件:
% f.m
function y=f(x)
y=acos(x);
若有下列語句:xsqual=@(x)1/2.*(x==-1/2)+1.*(x>-1/28&x<1/2)+1.2.*(x==-1/2);
則相當於建立了一個函數文件:
% xsqual.m
function y=xsqual(x)
y=1/2.*(x==-1/2)+1.*(x>-1/28&x<1/2)+1.2.*(x==-1/2);
詳細說明:
1、函數句柄/function_handle(@):是一種間接調用函數的方式。
2、語法:handle=@functionname or handle=@(arglist)anonymous_function
3、描述:函數句柄(function handle)是一種能夠提供函數間接調用的matlab value。你可以通過傳遞句柄來調用各種其他功能。你也可以將句柄存儲到數據結構中備用(例如Handle Graphic 回調)。句柄是matlab的標准數據類型之一。
當創建句柄時,你所指定的函數必須在matlab搜索路徑之中,並且必須在創建語句的scope之中。例如,只要在定義子函數的文件之中,你句可以為這個子函數創建句柄。這些條件不適用於evaluate函數句柄。例如,你可以在一個單獨(out-scope)通過句柄執行一個子函數,這要求句柄是在in-scope創建的。
handle=@(arglist)anonymous_function用來創建匿名函數(anonymous function)並返回該匿名函數的句柄。括號右邊的函數體是單個的matlab語句(statement)或者matlab命令。arglist是一個用逗號“,”分隔的輸入變量列表。該函數通過句柄handle執行。
備注:函數句柄是標准的matlab數據類型。因此,你可以像matlab其他數據類型一樣進行操作。
4、函數句柄的好處
①提高運行速度。因為matlab對函數的調用每次都是要搜索所有的路徑,從set path中我們可以看到,路徑是非常的多的,所以如果一個函數在你的程序中需要經常用到的話,使用函數句柄,對你的速度會有提高的。
②使用可以與變量一樣方便。比如說,我再這個目錄運行后,創建了本目錄的一個函數句柄,當我轉到其他的目錄下的時候,創建的函數句柄還是可以直接調用的,而不需要把那個函數文件拷貝過來。因為你創建的function handles中,已經包含了路徑,
