我正在尝试在matlab中解决以下问题。我有一个由5个参数和4个变量定义的函数作为数据输入。我这样定义:
g = @(b)((b(4)*(b(2)*x(:,1) + b(3)*x(:,2) + 1)) + b(5)*x(:,3)*x(:,4).^b(1));
然后我想找到最小化此函数中错误的参数值,我将其定义为:
sum_res = @(b)(y-g)'*(y-g);
[beta_opt,fval] = fminsearch(sum_res,[1,1]);
我收到以下错误消息:
Undefined function 'minus' for input arguments of type 'function_handle'.
Error in @(b)(y-g)'*(y-g)
Error in fminsearch (line 191)
fv(:,1) = funfcn(x,varargin{:});
答案 0 :(得分:1)
错误消息是正确的; g
是函数句柄,而不是值类型。因此,当您在y-g
函数中执行减法sum_res
时,将没有减法运算符将接受函数句柄作为操作数(如何减去函数句柄?)
您似乎忘记将参数b
传递给g
函数内的sum_res
函数句柄(假设b确实是您想要的参数)
sum_res = @(b)(y-g(b))'*(y-g(b));