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)

哪里有问题?

4

2 回答 2

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

于 2012-05-25T00:30:06.750 回答
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

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

于 2012-05-25T00:40:03.033 回答