32 lines
645 B
Mathematica
32 lines
645 B
Mathematica
|
|
function G = ipopt_callback_dg(x,model)%returnStructOnly,model)
|
||
|
|
|
||
|
|
global latest_x_g
|
||
|
|
global latest_G
|
||
|
|
global latest_g
|
||
|
|
|
||
|
|
x = x(:);
|
||
|
|
if isequal(x,latest_x_g)
|
||
|
|
% Jacobian was computed already in the call for constraints
|
||
|
|
G = latest_G;
|
||
|
|
else
|
||
|
|
% Compute the nonlinear terms in the constraints
|
||
|
|
[g,geq,dg,dgeq] = fmincon_con_liftlayer(x,model);
|
||
|
|
|
||
|
|
% Append with linear terms
|
||
|
|
if isempty(dg)
|
||
|
|
G = dgeq';
|
||
|
|
else
|
||
|
|
G = [dg';dgeq'];
|
||
|
|
end
|
||
|
|
|
||
|
|
if ~isempty(model.A)
|
||
|
|
G = [G;model.A];
|
||
|
|
end
|
||
|
|
if ~isempty(model.Aeq)
|
||
|
|
G = [G;model.Aeq];
|
||
|
|
end
|
||
|
|
G = sparse(G);
|
||
|
|
end
|
||
|
|
if model.dense
|
||
|
|
G = full(G);
|
||
|
|
end
|