Page 296 - MATLAB an introduction with applications
P. 296
Optimization ——— 281
function [xMin,fMin,nCyc] = FletcherReeves(h,tol)
% Fletcher–Reeves method
% h = initial search increment = 0.1
% tol = error tolerance = 1.0e–6
% X = starting point
% FUNC = handle of function that returns f
% DFUNC = handle of function that returns grad(f)
% xMin = minimum point
% fMin = miminum value of f
% nCyc = # of cycles to convergence
global X FUNC DFUNC V
if nargin < 2; tol = 1.0e–6; end
if nargin < 1; h = 0.1; end
if size(X,2) > 1; X = X’; end
n = length(X);
g0 = –feval(DFUNC,X);
V = g0;
for i = 1:50
[a,b] = goldBracket(@fLine,0.0,h);
[s,fMin] = goldSearch(@fLine,a,b);
X = X + s*V;
g1 = –feval(DFUNC,X);
if sqrt(dot(g1,g1)) <= tol
xMin = X; nCyc = i; return
end
gamma = dot((g1 – g0),g1)/dot(g0,g0);
V = g1 + gamma*V;
g0 = g1;
end
error(‘Method did not converge’)
function z = fLine(s)
global X FUNC V
z = feval(FUNC,X+s*V);
function [a,b] = goldBracket(func,x1,h)
% Brackets the minimum point of f(x)
% func = returns f(x)
% x1= starting value of x
% h = initial step size
% a, b = limits on x
c = 1.618033989;
f1 = feval(func,x1);