Dynamic-Calibration/utils/YALMIP-master/extras/createobjective.m

50 lines
1.5 KiB
Matlab
Executable File

function [c,Q,f,onlyfeasible] = createobjective(h,G,options,quad_info)
%CREATEOBJECTIVE Internal function to extract data related to objective function
onlyfeasible = 0;
nvars = yalmip('nvars');
if isempty(h)
c=zeros(nvars,1);
Q = spalloc(nvars,nvars,0);
f = 0;
if isempty(G)
onlyfeasible = 1;
end
else
[n,m]=size(h);
if n*m>1
error('Scalar expression to minimize please.');
else
% Should check quadratic!!
if ~(options.relax == 1 | options.relax == 3) & ~isempty(quad_info)
Qh = quad_info.Q;
ch = quad_info.c;
f = quad_info.f;
xvar = quad_info.x;
lmi_variables = getvariables(xvar);
c = zeros(nvars,1);
Q = spalloc(nvars,nvars,0);
c(lmi_variables)=ch;
% for i=1:length(lmi_variables)
% c(lmi_variables(i))=ch(i);
% end
if nnz(Qh)>0
[i,j,k] = find(Qh);
i = lmi_variables(i);
j = lmi_variables(j);
Q = sparse(i,j,k,nvars,nvars);
end
else
% A relaxed problem should not calculate quadratic
% decomposistion, fix!
lmi_variables = getvariables(h);
base = getbase(h);base = base(2:end);
OKindex = find(~isinf(base));
c=full(base(OKindex(1))*zeros(nvars,1));
c(lmi_variables) = base;
Q = spalloc(nvars,nvars,0);
f = full(getbasematrix(h,0));
end
end
end