Error: Not enough input arguments.

1 次查看(过去 30 天)
The following code works fine.
See the inline function fungrad.
function [x, fval, eflag, iter, fcount] =
Optimization_With_Analytic_Gradient(start_point)
x0 = start_point;
% inline function defitions
fungrad = @(x)deal(fun(x),grad(x));
% options setup
options = optimoptions( 'fminunc', ...
'Display','off',...
'OutputFcn',@bananaout,...
'Algorithm','trust-region', ...
'GradObj','on');
% calling fminunc
[x,fval,eflag,output] = fminunc(fungrad,x0,options);
iter = output.iterations;
fcount = output.funcCount;
% plot window title
title 'Rosenbrock solution via fminunc with gradient'
disp('Optimization_With_Analytic_Gradient...');
end
But, when I call it using the following code,
function out = fungrad(x)
out = deal(fun(x),grad(x));
end
It displays the following error:
Error using fungrad (line 2)
Not enough input arguments.
Error in Optimization_With_Analytic_Gradient (line 24)
[x,fval,eflag,output] = fminunc(fungrad,x0,options);
Error in main (line 48)
[x, fval, eflag, iter, fcount] =
Optimization_With_Analytic_Gradient(starting_point);
Rest of the code:
function out = fun(x)
out = 100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;
end
function out = grad( x )
out = [-400*(x(2) - x(1)^2)*x(1) - 2*(1 - x(1));
200*(x(2) - x(1)^2)];
end

采纳的回答

Walter Roberson
Walter Roberson 2017-1-3
[x,fval,eflag,output] = fminunc(@fungrad,x0,options);
However, your code will not work. Your objective function must return the gradient information only when nargout > 1. Your use of deal() always returns two outputs, and that is going to fail.
  2 个评论
Ba Ba Black Sheep!
编辑:Ba Ba Black Sheep! 2017-1-3
Your objective function must return the gradient information
only when nargout > 1.
which one? banana? or, fungrad?
_
N.B. Sorry! I am absolutely new.
Walter Roberson
Walter Roberson 2017-1-3
You have
fungrad = @(x)deal(fun(x),grad(x));
so your fungrad is always returning two outputs. fungrad is being used as your objective function for fminunc . The objective function must only assign the gradient when it is asked to do so. See the example https://www.mathworks.com/help/optim/ug/fminunc.html#butzm_r-1 and notice that it tests nargout

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Nonlinear Least Squares (Curve Fitting) 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by