1 | function sys = display(X) |
---|
2 | %display Displays a SET object. |
---|
3 | |
---|
4 | % Author Johan Löfberg |
---|
5 | % $Id: display.m,v 1.9 2006/09/27 13:52:09 joloef Exp $ |
---|
6 | |
---|
7 | nlmi = size(X.clauses,2); |
---|
8 | |
---|
9 | if (nlmi == 0) |
---|
10 | disp('empty SET') |
---|
11 | return |
---|
12 | end |
---|
13 | |
---|
14 | lmiinfo{1} = 'Matrix inequality'; |
---|
15 | lmiinfo{2} = 'Element-wise'; |
---|
16 | lmiinfo{3} = 'Equality constraint'; |
---|
17 | lmiinfo{4} = 'Second order cone constraint'; |
---|
18 | lmiinfo{5} = 'Rotated Lorentz constraint'; |
---|
19 | lmiinfo{7} = 'Integrality constraint'; |
---|
20 | lmiinfo{8} = 'Binary constraint'; |
---|
21 | lmiinfo{9} = 'KYP constraint'; |
---|
22 | lmiinfo{10}= 'Eigenvalue constraint'; |
---|
23 | lmiinfo{11}= 'Sum-of-square constraint'; |
---|
24 | lmiinfo{12}= 'Logic constraint'; |
---|
25 | lmiinfo{13}= 'Parametric declaration'; |
---|
26 | lmiinfo{14}= 'Low-rank data declaration'; |
---|
27 | lmiinfo{15}= 'Uncertain declaration'; |
---|
28 | |
---|
29 | headers = {'ID','Constraint','Type','Tag'}; |
---|
30 | rankVariables = yalmip('rankvariables'); |
---|
31 | extVariables = yalmip('extvariables'); |
---|
32 | if nlmi>0 |
---|
33 | for i = 1:nlmi |
---|
34 | |
---|
35 | data{i,1} = ['#' num2str(i)]; |
---|
36 | data{i,2} = X.clauses{i}.symbolic; |
---|
37 | data{i,3} = lmiinfo{X.clauses{i}.type}; |
---|
38 | if length(getvariables(X.clauses{i}.data)) == 1 |
---|
39 | if any(ismember(getvariables(X.clauses{i}.data),rankVariables)) |
---|
40 | data{i,3} = 'Rank constraint'; |
---|
41 | end |
---|
42 | end |
---|
43 | |
---|
44 | if X.clauses{i}.type == 14 |
---|
45 | else |
---|
46 | classification = ''; |
---|
47 | if any(ismembc(getvariables(X.clauses{i}.data),yalmip('intvariables'))) |
---|
48 | classification = [classification ',integer']; |
---|
49 | end |
---|
50 | |
---|
51 | if size(X.clauses{i},2)>1 |
---|
52 | classification = [classification ',logic']; |
---|
53 | end |
---|
54 | |
---|
55 | linearbilinearquadraticsigmonial = is(X.clauses{i}.data,'LBQS'); |
---|
56 | if ~linearbilinearquadraticsigmonial(1) |
---|
57 | if linearbilinearquadraticsigmonial(4) |
---|
58 | classification = [classification ',sigmonial']; |
---|
59 | elseif linearbilinearquadraticsigmonial(2) |
---|
60 | classification = [classification ',bilinear']; |
---|
61 | elseif linearbilinearquadraticsigmonial(3) |
---|
62 | classification = [classification ',quadratic']; |
---|
63 | else |
---|
64 | classification = [classification ',polynomial']; |
---|
65 | end |
---|
66 | end |
---|
67 | |
---|
68 | data{i,4} = X.clauses{i}.handle; |
---|
69 | if ~isreal(X.clauses{i}.data) |
---|
70 | classification = [classification ',complex']; |
---|
71 | end |
---|
72 | %if ~isempty(intersect(getvariables(X.clauses{i}.data),extVariables)) |
---|
73 | if any(ismembc(getvariables(X.clauses{i}.data),extVariables)) |
---|
74 | classification = [classification ',derived']; |
---|
75 | end |
---|
76 | |
---|
77 | if length(classification)==0 |
---|
78 | else |
---|
79 | data{i,3} = [data{i,3} ' (' classification(2:end) ')']; |
---|
80 | end |
---|
81 | |
---|
82 | if ismembc(X.clauses{i}.type,[1 2 3 4 5 9]) |
---|
83 | data{i,3} = [data{i,3} ' ' num2str(size(X.clauses{i}.data,1)) 'x' num2str(size(X.clauses{i}.data,2))]; |
---|
84 | end |
---|
85 | end |
---|
86 | |
---|
87 | end |
---|
88 | end |
---|
89 | |
---|
90 | % If no tags, don't show... |
---|
91 | if length([data{:,4}])==0 |
---|
92 | headers = {headers{:,1:3}}; |
---|
93 | data = reshape({data{:,1:3}},length({data{:,1:3}})/3,3); |
---|
94 | end |
---|
95 | |
---|
96 | |
---|
97 | table('',headers,data) |
---|
98 | |
---|
99 | function x= truncstring(x,n) |
---|
100 | if length(x) > n |
---|
101 | x = [x(1:n-3) '...']; |
---|
102 | end |
---|
103 | |
---|
104 | function x = fillstring(x,n) |
---|
105 | x = [x blanks(n-length(x))]; |
---|
106 | |
---|