Page 294 - MATLAB an introduction with applications
P. 294

Optimization ———  279

                   Solution:
                   function y = fex3_18(X)
                   y = 9*X(1)^2+4*X(2)^2–8*X(1)*X(2)+3*X(1);
                   >> global X FUNC
                   >> FUNC = @fex3_18;
                   >> X=[–1.0,1.0];
                   >> [xMin,fMin,numCycles]=powell

                   xMin =
                          –0.3000
                          –0.3000
                   fMin =
                          –0.4500
                   numCycles =
                         2

                   function [xMin,fMin,nCyc]=powell(h,tol)
                   % Powell’s method
                   % h   = initial search increment  = 0.1
                   % tol = error tolerance  = 1.0e–6
                   % X = starting point
                   % FUNC = function that returns f
                   % xMin = minimum point
                   % fMin = miminum value of f
                   % nCyc = number of cycles to convergence
                   global X FUNC 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);
                   df = zeros(n,1);
                   u = eye(n);
                   for j = 1:40      % 40 cycles
                   xOld = X;
                   fOld = feval(FUNC,xOld);
                   for i = 1:n
                   V = u(1:n,i);
                   [a,b] = goldBracket(@fLine,0.0,h);
                   [s,fMin] = goldSearch(@fLine,a,b);
                   df(i) = fOld – fMin;
                   fOld = fMin;
                   X = X + s*V;
   289   290   291   292   293   294   295   296   297   298   299