function varargout = objd(x,mode) global numf numg numH argout = 0; r = norm(x); rm1 = r-1; sqrm1 = rm1^2; phi = atan(x(1)/x(2)); if bitand(mode,1) numf = numf + 1; argout = argout + 1; if (abs(rm1) <1e-32) varargout(argout) = {0}; else varargout(argout) = {sqrm1 - 0.5*sqrm1*cos(1/rm1-phi)}; end end if bitand(mode,2) numg = numg + 1; argout = argout + 1; dfdr = 2*rm1 - 0.5*(sin(1/rm1-phi) + 2*rm1*cos(1/rm1-phi)); dfdphi = -0.5*sqrm1*sin(1/rm1-phi); rsq = r^2; if (abs(rm1) < 1e-32) varargout(argout) = {[0; 0]}; else varargout(argout) = {[x(1)*dfdr/r + dfdphi*x(2)/rsq; x(2)*dfdr/r - dfdphi*x(1)/rsq]}; end end if bitand(mode,4) numH = numH + 1; argout = argout + 1; error('Hessian not coded'); varargout(argout) = {[2 -4; -4 200]}; end return;