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;