global numf numg numH x = struct('p',ones(4000,1)); nparams = struct('maxit',1000,'toler',1.0e-4,'delbar',100,'eta',0.1,'initdel',1,'method','chol','hessian','exact'); fprintf('objg: Newton, Problem size: '); fprintf('%d\n',length(x.p)); % tic, [inform,xnew] = Newton(@objg,x,nparams); toc, if inform.status == 0 fprintf('CONVERGENCE FAILURE: %d steps were taken without\n', inform.iter); fprintf('gradient size decreasing below %8.4g.\n\n', nparams.toler); else fprintf('Success: %d steps taken\n\n', inform.iter); end fprintf('Ending value: '); fprintf('%8.4g\n',xnew.f); fprintf('No. function evaluations: %d\n',numf); fprintf('No. gradient evaluations %d\n',numg); fprintf('Norm of ending gradient: %8.4g\n', norm(xnew.g)); fprintf('No. Hessian evaluations %d\n\n',numH); fprintf('objg: DogLeg, Problem size: '); fprintf('%d\n',length(x.p)); % tic, [inform,xnewo] = DogLeg(@objg,x,nparams); toc, if inform.status == 0 fprintf('CONVERGENCE FAILURE: %d steps were taken without\n', inform.iter); fprintf('gradient size decreasing below %8.4g.\n\n', nparams.toler); else fprintf('Success: %d steps taken\n\n', inform.iter); end fprintf('Ending value: '); fprintf('%8.4g\n',xnew.f); fprintf('No. function evaluations: %d\n',numf); fprintf('No. gradient evaluations %d\n',numg); fprintf('Norm of ending gradient: %8.4g\n', norm(xnew.g)); fprintf('No. Hessian evaluations %d\n\n',numH); nparams.m = 3; fprintf('\n\nLBFGS memory parameter = %d\n',nparams.m); fprintf('objg: LBFGS, Problem size: '); fprintf('%d\n',length(x.p)); tic, [inform,xnew] = LBFGS(@objg,x,nparams); toc, if inform.status == 0 fprintf('CONVERGENCE FAILURE: %d steps were taken without\n', inform.iter); fprintf('gradient size decreasing below %8.4g.\n\n', nparams.toler); else fprintf('Success: %d steps taken\n\n', inform.iter); end fprintf('Ending value: %8.4g\n',xnew.f); fprintf('No. function evaluations: %d\n',numf); fprintf('No. gradient evaluations %d\n',numg); fprintf('Norm of ending gradient: %8.4g\n', norm(xnew.g)); fprintf('No. Hessian evaluations %d\n\n',numH); fprintf('objg: cgTrust, Problem size: '); fprintf('%d\n',length(x.p)); tic, [inform,xnew] = cgTrust(@objg,x,nparams); toc, if inform.status == 0 fprintf('CONVERGENCE FAILURE: %d steps were taken without\n', inform.iter); fprintf('gradient size decreasing below %8.4g.\n\n', nparams.toler); else fprintf('Success: %d steps taken\n\n', inform.iter); end fprintf('Ending value: '); fprintf('%8.4g\n',xnew.f); fprintf('No. function evaluations: %d\n',numf); fprintf('No. gradient evaluations %d\n',numg); fprintf('Norm of ending gradient: %8.4g\n', norm(xnew.g)); fprintf('No. Hessian evaluations %d\n',numH); fprintf('No. cg iterations %d\n\n',inform.cgits);