Line | |
---|
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.