Page 293 - MATLAB an introduction with applications
P. 293

278 ———  MATLAB: An Introduction with Applications


                   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;
                   end
                   V = X – xOld;
                   [a,b] = goldBracket(@fLine,0.0,h);
                   [s,fMin] = goldSearch(@fLine,a,b);
                   X = X + s*V;
                   % convergence criterion
                   if sqrt(dot(X–xOld,X–xOld)/n) < tol
                   xMin = X; nCyc = j; return
                   end
                   iMax = 1; dfMax = df(1);
                   for i = 2:n
                   if df(i) > dfMax
                   iMax = i; dfMax = df(i);
                   end
                   end
                   for i = iMax:n–1
                   u(1:n,i) = u(1:n,i+1);
                   end
                   u(1:n,n) = V;
                   end
                   error(‘No converge’)

                   function z = fLine(s)
                   global X FUNC V
                   z = feval(FUNC,X+s*V);
                   Example E5.6: Use Powell’s method to find the minimum of the function
                                              2
                                         2
                                 f(x) =  9x + 4x − 8x x + 3x 1
                                                  1 2
                                             2
                                        1
                   Start with      x  = [0   0] .
                                           T
                                   0
   288   289   290   291   292   293   294   295   296   297   298