我是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
。我更改的唯一内容是名称,因此除了名称之外,函数fminbnd
和train
的代码现在是相同的。
现在我使用相同的参数运行两个函数,并且自定义函数抛出错误,而原始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)
问题出在哪里?
答案 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
(你也可以获得其他输出参数)