Dynamic-Calibration/utils/YALMIP-master/extras/extract_bounds_from_abs_ope...

22 lines
941 B
Matlab
Executable File

function LU = extract_bounds_from_abs_operator(LU,extstruct,extvariables,i);
arg = extstruct(i).arg{1};
if is(arg,'lpcone') & isreal(arg)
vars = getvariables(arg);
% Absolute value larger than 0
LU(extvariables(i),1) = max([0 LU(extvariables(i),1)]);
% Upper bound on linear smaller than abs upper bound
LU(vars,2) = min([LU(vars,2) LU(extvariables(i),2)]);
% Lower bound larger than -abs upper
LU(vars,1) = max([LU(vars,1) -LU(extvariables(i),2)]);
% Absolute upper bound smaller than max(abs(linear bounds))
LU(extvariables(i),2) = max(abs(LU(vars,:)));
elseif isreal(arg) & size(arg,1)==1
absmax = abs(getbase(arg))*[1;max(abs(LU(getvariables(arg),:)),[],2)];
LU(extvariables(i),1) = max([0 LU(extvariables(i),1)]);
LU(extvariables(i),2) = min([absmax LU(extvariables(i),2)]);
else
% At least fix lower bound on absolute
LU(extvariables(i),1) = max([0 LU(extvariables(i),1)]);
end