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