52 lines
1.1 KiB
Matlab
Executable File
52 lines
1.1 KiB
Matlab
Executable File
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
|
|
|