Error: Not enough input arguments.
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Ba Ba Black Sheep!
le 3 Jan 2017
Commenté : Walter Roberson
le 3 Jan 2017
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 commentaires
Réponse acceptée
Walter Roberson
le 3 Jan 2017
[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 commentaires
Ba Ba Black Sheep!
le 3 Jan 2017
Modifié(e) : Ba Ba Black Sheep!
le 3 Jan 2017
Walter Roberson
le 3 Jan 2017
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
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Dialog Boxes dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!