Rev | Line | |
---|
[37] | 1 | function X = plus(X,Y) |
---|
| 2 | %PLUS Merges two LMI objects to one LMI |
---|
| 3 | |
---|
| 4 | % Author Johan Löfberg |
---|
| 5 | % $Id: plus.m,v 1.10 2006/08/10 13:15:45 joloef Exp $ |
---|
| 6 | |
---|
| 7 | if isa(X,'constraint') |
---|
| 8 | X = set(X); |
---|
| 9 | elseif isa(X,'sdpvar') |
---|
| 10 | X = set(X); |
---|
| 11 | end |
---|
| 12 | |
---|
| 13 | if isa(Y,'constraint') |
---|
| 14 | Y = set(Y); |
---|
| 15 | elseif isa(Y,'sdpvar') |
---|
| 16 | Y = set(Y); |
---|
| 17 | end |
---|
| 18 | |
---|
| 19 | % Support set+ [] |
---|
| 20 | if isempty(X) |
---|
| 21 | X = Y; |
---|
| 22 | return |
---|
| 23 | elseif isempty(Y) |
---|
| 24 | X = X; |
---|
| 25 | return |
---|
| 26 | end |
---|
| 27 | |
---|
| 28 | if ~((isa(X,'lmi')) & (isa(Y,'lmi'))) |
---|
| 29 | error('Both arguments must be SET objects') |
---|
| 30 | end |
---|
| 31 | |
---|
| 32 | nX = length(X.clauses); |
---|
| 33 | nY = length(Y.clauses); |
---|
| 34 | |
---|
| 35 | if nX+nY == 0 |
---|
| 36 | return |
---|
| 37 | end |
---|
| 38 | |
---|
| 39 | X.clauses = {X.clauses{:},Y.clauses{:}}; |
---|
| 40 | X.LMIid = [X.LMIid Y.LMIid]; |
---|
| 41 | |
---|
| 42 | % VERY FAST UNIQUE BECAUSE THIS IS CALLED A LOT OF TIMES.... |
---|
| 43 | i = sort(X.LMIid); |
---|
| 44 | i = i(diff([i NaN])~=0); |
---|
| 45 | if length(i)<nX+nY |
---|
| 46 | [i,j] = unique(X.LMIid); |
---|
| 47 | X = subsref(X,struct('type','()','subs',{{j}})); |
---|
| 48 | end |
---|
Note: See
TracBrowser
for help on using the repository browser.