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
0 个评论
采纳的回答
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 个评论
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 Center 和 File Exchange 中查找有关 Dialog Boxes 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!