Suppose, I have the following functions:
function [f,g] = rosenbrockwithgrad(x, a, b) % Calculate objective f
f = rosenbrock(x, a, b); % gradient required
if nargout > 1 g = gradient(x); endend function out = rosenbrock(x, a, b) xx = x(1); yy = x(2); out = (1 - xx + a)^2 + 100*(yy - b - (xx-a)^2)^2;end
I need to use them in the following routine,
function [x, fval, eflag, iter, fcount] = Optimization_With_Analytic_Gradient(a, b, 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(@rosenbrockwithgrad, x0, options); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% iter = output.iterations; fcount = output.funcCount; % plot window title
title 'Rosenbrock with Analytic Gradient...' disp('Optimization_With_Analytic_Gradient...');end
Note the use of fminunc().
So, How can I do that?
My code generates the following Error
>> main Error using rosenbrockwithgrad (line 3) Not enough input arguments. Error in fminunc (line 271) [f,GRAD] = feval(funfcn{3},x,varargin{:}); Error in Optimization_With_Analytic_Gradient (line 24) [x, fval, eflag, output] = fminunc(@rosenbrockwithgrad, x0, options); Error in main (line 53) [x, fval, eflag, iter, fcount] = Optimization_With_Analytic_Gradient(a, b, starting_point); Caused by: Failure in initial user-supplied objective function evaluation. FMINUNC cannot continue. >>
Best Answer