无法将函数句柄作为函数的参数传递

时间:2012-05-25 00:17:24

标签: function matlab arguments function-handle

我是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)

问题出在哪里?

2 个答案:

答案 0 :(得分: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而不是其他内容?

答案 1 :(得分: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

(你也可以获得其他输出参数)