global numf numg numH nparams = struct('maxit',1000,'toler',1.0e-6,'feastol',1e-6); rand('state',0); x = struct('p',rand(50,1)); fprintf('Starting value: %8.4g\n',objg(x.p,1)); A = [ones(1,50); rand(1,50)]; b = A*x.p; tic, [inform,xnew] = TNewtonEq(@objg,x,A,b,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('No. Hessian evaluations %d\n\n',numH); [m,n] = size(A); [Q,R] = qr(A'); Z = Q(:,m+1:n); fprintf('Norm of KKT violation: %8.4g\n', norm(Z'*xnew.g)); fprintf('Norm of feasibility error: %8.4g\n', norm(A*xnew.p-b)); load hwk9 A b = ones(size(A,1),1); x.p = A\b; tic, [inform,xnew] = TNewtonEq(@objqp,x,A,b,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('No. Hessian evaluations %d\n\n',numH); [m,n] = size(A); [Q,R] = qr(A'); Z = Q(:,m+1:n); fprintf('Norm of KKT violation: %8.4g\n', norm(Z'*xnew.g)); fprintf('Norm of feasibility error: %8.4g\n', norm(A*xnew.p-b));