2012-05-25 78 views
0

我是Matlab新手,我試圖在matlab中編寫自定義函數,將函數句柄作爲其參數之一。 我得到這個錯誤的所有時間:無法將函數句柄作爲函數的參數

Error using subsindex 
Function 'subsindex' is not defined for values of class 'function_handle'. 

試圖調試我進行了如下測試:我運行命令x = fminbnd(@humps, 0.3, 1)。我按預期進行 - 我得到了結果x = 0.6370。 因此,我創建了一個名爲train的自定義函數,並將函數fminbnd的所有代碼複製到文件train.m。我唯一改變的是名字,所以現在除了名字之外,功能fminbndtrain的代碼是相同的。

現在我用相同的參數運行這兩個函數,並且自定義函數拋出錯誤,而原始fminbnd返回正確的答案。 下面是代碼:

>> x = fminbnd(@humps, 0.3, 1) 

x = 

    0.6370 

>> x = train(@humps, 0.3, 1) 
Error using subsindex 
Function 'subsindex' is not defined for values of class 'function_handle'. 

這裏是功能train(其餘的都來自fminbnd複製)標題:

function [xf,fval,exitflag,output] = train(funfcn,ax,bx,options,varargin) 

問題出在哪裏?

回答

1

做一個which train告訴我,神經網絡工具箱中有一個同名的函數。

/Applications/MATLAB_R2009b.app/toolbox/nnet/nnet/@network/train.m % network method 

您可能正在運行nnet train.m,而不是您認爲正在運行的那個。你在包含train.m的目錄中嗎?當我確信我是在正確的目錄,我得到它的工作:

>> which train 
/Users/myuserid/train.m 

>> x = train(@humps,0.3,1) 

x = 

    0.6370 

也許你能說出你的文件別的東西像myfminbnd.m呢?

+0

你說得對! +1爲你和你的答案將被接受。 – drasto

0

,而不是複製整個fminbnd功能,請嘗試:

function varargout = myfminbnd(varargin) 
    varargout = cell(1,nargout(@fminbnd)); 
    [varargout{:}] = fminbnd(varargin{:}); 
end 

這將作爲一個「別名」現有的功能:

>> fminbnd(@(x)x.^3-2*x-5, 0, 2) 
ans = 
     0.8165 

>> myfminbnd(@(x)x.^3-2*x-5, 0, 2) 
ans = 
     0.8165 

(你可以得到其他輸出參數作爲好吧)

+0

如何複製函數行爲並不重要,問題出在@kitchenette指出的函數名稱。 – drasto