function [x_opt,lambda,grad] = matlab_fmincon_h73
f = @(x) 24.55*x(1) + 26.75*x(2) + 39*x(3) + 40.5*x(4);
options = optimoptions('fmincon','GradConstr','on','Display','Iter','Algorithm','sqp','TolFun',1e-12,'TolCon',1e-12);
[x_opt,~,~,~,lambda,grad,~] = fmincon(f,ones(1,4),[],[],[],[],zeros(1,4),[],@constraints,options);

[~,~,gradc,gradceq] = constraints(x_opt);

grad_Lag = grad+gradc*lambda.ineqnonlin-gradceq*lambda.eqnonlin;

display(grad_Lag);
display(norm(grad_Lag));

end

function [c,ceq,gradc,gradceq] = constraints(x)
c = [-2.3*x(1)-5.6*x(2)-11.1*x(3)-1.3*x(4)+5,...
    -12*x(1)-11.9*x(2)-41.8*x(3)-52.1*x(4)+...
    21+1.645*sqrt(0.28*x(1).^2+0.19*x(2).^2+20.5*x(3).^2+0.62*x(4).^2)];
ceq = x(1) + x(2) + x(3) + x(4) -1;

gradc = [-2.3, -5.6, -11.1, -1.3;...
    x(1).*1.0./sqrt(x(1).^2.*2.8e1+x(2).^2.*1.9e1+x(3).^2.*...
    2.05e3+x(4).^2.*6.2e1).*4.606-1.2e1,...
    x(2).*1.0./sqrt(x(1).^2.*2.8e1+x(2).^2.*1.9e1+x(3).^2.*...
    2.05e3+x(4).^2.*6.2e1).*3.1255-1.19e2./1.0e1,...
    x(3).*1.0./sqrt(x(1).^2.*2.8e1+x(2).^2.*1.9e1+x(3).^2.*...
    2.05e3+x(4).^2.*6.2e1).*3.37225e2-2.09e2./5.0,...
    x(4).*1.0./sqrt(x(1).^2.*2.8e1+x(2).^2.*1.9e1+x(3).^2.*...
    2.05e3+x(4).^2.*6.2e1).*1.0199e1-5.21e2./1.0e1]';
gradceq = [1,1,1,1]';
end