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

52 lines
1.1 KiB
Mathematica
Raw Normal View History

2019-12-18 11:25:45 +00:00
function p = mergeNumericalModels(p0,p1)
if ~isempty(p1.F_struc)
if size(p1.F_struc,2) < size(p0.F_struc,2)
p1.F_struc(end,size(p0.F_struc,2))=0;
end
else
p = p0;
return;
end
if isempty(p0.F_struc) & isempty(p1.F_struc)
p = p1;
return
end
if (size(p0.F_struc,2) < size(p1.F_struc,2)) & (size(p0.F_struc,1)>0)
p0.F_struc(end,size(p1.F_struc,2))=0;
end
p1.F_struc = sparse(p1.F_struc);
p0.F_struc = sparse(p0.F_struc);
% It is assumed p0 is the master model, i.e. p1 only contains constraints
p = p0;
if p1.K.f > 0
p.F_struc = [p1.F_struc(1:p1.K.f,:);p.F_struc];
p.K.f = p.K.f + p1.K.f;
end
if p1.K.l > 0
p.F_struc = [p.F_struc(1:p.K.f,:);
p1.F_struc(1+p1.K.f:p1.K.f+p1.K.l,:)
p.F_struc(1+p.K.f:end,:)];
p.K.l = p.K.l + p1.K.l;
end
if isfield(p1.K,'q')
if p1.K.q > 0
error('FIXME')
end
end
if isfield(p1.K,'s')
if p1.K.s > 0
error('FIXME')
% p.F_struc = [p.F_struc;p1.F_struc(1+p1.K.f+p1.K.l+sum(p1.K.q):end,:)];
% p.K.s = [p.K.s p1.K.s];p.K.s(p1.K.s==0)=[];
end
end