Cody

# Problem 493. Quasi-Newton Method for Unconstrained Minimization using BFGS Update

Solution 669848

Submitted on 13 May 2015 by Patrick
This solution is locked. To view this solution, you need to provide a solution of the same size or smaller.

### Test Suite

Test Status Code Input and Output
1   Pass
%% % Rosenbrock's banana function F=@(x) 100*(x(2)-x(1).^2).^2 + (1-x(1)).^2; gradF=@(x) [100*(4*x(1).^3-4*x(1).*x(2))+2*x(1)-2; 100*(2*x(2)-2*x(1).^2)]; x0 = [-1.9; 2.0]; x1=[ -1.4478 2.1184]; x2=[ 1.7064 2.9446]; f1=6.0419; f2=0.6068; [xmin,fmin]=BFGS_Quasi_Newton(F,gradF,x0,0.01,1) % single steepest descent assert(norm(xmin-x1)<0.2||norm(xmin-x2)<0.2) assert( abs(fmin-f1)<0.5|| abs(fmin-f2)<0.5) % 2 local min

iter alpha f(alpha) norm(c) 0 0.000000 267.6200 1270.8691 1 0.0029 0.5132 0.5200 xmin = 1.7160 2.9471 fmin = 0.5132

2   Pass
%% % Rosenbrock's banana function F=@(x) 100*(x(2)-x(1).^2).^2 + (1-x(1)).^2; gradF=@(x) [100*(4*x(1).^3-4*x(1).*x(2))+2*x(1)-2; 100*(2*x(2)-2*x(1).^2)]; x0 = [0; 0]; xcorrect=[ 0.2927 0.0506]; fcorrect=0.63; [xmin,fmin]=BFGS_Quasi_Newton(F,gradF,x0,1e-2,2) % two iterations assert(norm(xmin-xcorrect)<0.1) assert( abs(fmin-fcorrect)<0.01)

iter alpha f(alpha) norm(c) 0 0.000000 1.0000 2.0000 2 0.0098 0.6237 7.5598 xmin = 0.2934 0.0508 fmin = 0.6237

3   Pass
%% % Rosenbrock's banana function F=@(x) 100*(x(2)-x(1).^2).^2 + (1-x(1)).^2; gradF=@(x) [100*(4*x(1).^3-4*x(1).*x(2))+2*x(1)-2; 100*(2*x(2)-2*x(1).^2)]; x0 = [0;0]; xcorrect = [1;1;]; fcorrect = 0; [xmin,fmin]=BFGS_Quasi_Newton(F,gradF,x0) assert(norm(xmin-xcorrect)<0.01) assert(abs(fmin-fcorrect)<0.01);

iter alpha f(alpha) norm(c) 0 0.000000 1.0000 2.0000 14 1.0088 0.0000 0.0000 xmin = 1.0000 1.0000 fmin = 3.7407e-20

4   Pass
%% % Rosenbrock's banana function F=@(x) 100*(x(2)-x(1).^2).^2 + (1-x(1)).^2; gradF=@(x) [100*(4*x(1).^3-4*x(1).*x(2))+2*x(1)-2; 100*(2*x(2)-2*x(1).^2)]; HessF=@(x) 200*[4*x(1).^2-2*(x(2)-x(1).^2)+1/100, -2*x(1); -2*x(1), 1]; xcorrect = [1;1]; fcorrect = 0; x0 = [-1.9; 2]; [xmin,fmin]=BFGS_Quasi_Newton(F,gradF,x0,1e-4) assert(isequal(round(xmin),xcorrect)) assert(isequal(round(fmin),fcorrect))

iter alpha f(alpha) norm(c) 0 0.000000 267.6200 1270.8691 17 1.0069 0.0000 0.0000 xmin = 1.0000 1.0000 fmin = 3.7485e-22