global numf numg x = struct('p',[-1.2; 1]); sdparams = struct('maxit',1000,'toler',1.0e-4); fprintf('Problem a\n'); [inform,xnew] = SteepDescent(@obja,x,sdparams); if inform.status == 0 fprintf('CONVERGENCE FAILURE: %d steps were taken without\n', inform.iter); fprintf('gradient size decreasing below %8.4g.\n', sdparams.toler); else fprintf('Success: %d steps taken\n', inform.iter); end fprintf(' Ending point: '); fprintf('%8.4g ',xnew.p); fprintf('\n Ending value: '); fprintf('%8.4g ',xnew.f); fprintf('; No. function evaluations: %d',numf); fprintf('\n Ending gradient: '); fprintf('%8.4g ',xnew.g); fprintf('; No. gradient evaluations %d',numg); fprintf('\n Norm of ending gradient: %8.4g\n\n\n', norm(xnew.g)); fprintf('Problem b\n'); [inform,xnew] = SteepDescent(@objb,x,sdparams); if inform.status == 0 fprintf('CONVERGENCE FAILURE: %d steps were taken without\n', inform.iter); fprintf('gradient size decreasing below %8.4g.\n', sdparams.toler); else fprintf('Success: %d steps taken\n', inform.iter); end fprintf(' Ending point: '); fprintf('%8.4g ',xnew.p); fprintf('\n Ending value: '); fprintf('%8.4g ',xnew.f); fprintf('; No. function evaluations: %d',numf); fprintf('\n Ending gradient: '); fprintf('%8.4g ',xnew.g); fprintf('; No. gradient evaluations %d',numg); fprintf('\n Norm of ending gradient: %8.4g\n\n\n', norm(xnew.g)); fprintf('Problem c\n'); [inform,xnew] = SteepDescent(@objc,x,sdparams); if inform.status == 0 fprintf('CONVERGENCE FAILURE: %d steps were taken without\n', inform.iter); fprintf('gradient size decreasing below %8.4g.\n', sdparams.toler); else fprintf('Success: %d steps taken\n', inform.iter); end fprintf(' Ending point: '); fprintf('%8.4g ',xnew.p); fprintf('\n Ending value: '); fprintf('%8.4g ',xnew.f); fprintf('; No. function evaluations: %d',numf); fprintf('\n Ending gradient: '); fprintf('%8.4g ',xnew.g); fprintf('; No. gradient evaluations %d',numg); fprintf('\n Norm of ending gradient: %8.4g\n\n\n', norm(xnew.g)); fprintf('Problem d\n'); % x = struct('p',2*ones(2,1)); x = struct('p',2.1*ones(2,1)); [inform,xnew] = SteepDescent(@objd,x,sdparams); if inform.status == 0 fprintf('CONVERGENCE FAILURE: %d steps were taken without\n', inform.iter); fprintf('gradient size decreasing below %8.4g.\n', sdparams.toler); else fprintf('Success: %d steps taken\n', inform.iter); end fprintf(' Ending point: '); fprintf('%8.4g ',xnew.p); fprintf('\n Ending value: '); fprintf('%8.4g ',xnew.f); fprintf('; No. function evaluations: %d',numf); fprintf('\n Ending gradient: '); fprintf('%8.4g ',xnew.g); fprintf('; No. gradient evaluations %d',numg); fprintf('\n Norm of ending gradient: %8.4g\n\n\n', norm(xnew.g));