I have a requirement that, I use the following modified Rosenbrock function,
where the coefficients a and b are to be read from a text file.
.
I tried the following,
function out = rosenbrock(x) disp('rosenbrock()..........called'); coeff = load('coeff.txt'); a = coeff(1); b = coeff(2); xx = x(1); yy = x(2); out = (1 - xx + a)^2 + 100*(yy - b - (xx-a)^2)^2; end
But it is doing two things,
(1) Slowing down the performance of the optimization.
(2) The output is also not correct (the optimization isn't converging).
How can I solve this issue wile fulfilling my requirement?
Is it possible to pass the values of a and b as the arguments of rosenbrockwithgrad()?
Relevant Source Code
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(@rosenbrockwithgrad, x0, options); iter = output.iterations; fcount = output.funcCount; % plot window title
title 'Rosenbrock with Analytic Gradient...' disp('Optimization_With_Analytic_Gradient...');end function out = gradient( x ) out = [-400*(x(2) - x(1)^2)*x(1) - 2*(1 - x(1)); 200*(x(2) - x(1)^2)];end function [f,g] = rosenbrockwithgrad(x) % Calculate objective f
f = rosenbrock(x); if nargout > 1 % gradient required
g = gradient(x); end end
Best Answer