174 lines
5.9 KiB
Matlab
Executable File
174 lines
5.9 KiB
Matlab
Executable File
function display(X)
|
|
%DISPLAY (overloaded)
|
|
|
|
switch(X.typeflag)
|
|
case {0,9}
|
|
n = X.dim(1);
|
|
m = X.dim(2);
|
|
if (n*m==1)
|
|
|
|
linearbilinearquadraticsigmonial = is(X,'LBQS');
|
|
if linearbilinearquadraticsigmonial(1)
|
|
classification = 'Noncommuting linear scalar ';
|
|
elseif linearbilinearquadraticsigmonial(4)
|
|
classification = 'Noncommuting sigmonial scalar ';
|
|
elseif linearbilinearquadraticsigmonial(2)
|
|
classification = 'Noncommuting bilinear scalar ';
|
|
elseif linearbilinearquadraticsigmonial(3)
|
|
classification = 'Noncommuting quadratic scalar ';
|
|
else
|
|
classification = 'Noncommuting polynomial scalar ';
|
|
end
|
|
|
|
if ~isreal(X.basis)
|
|
classification = [classification '(complex'];
|
|
else
|
|
classification = [classification '(real'];
|
|
end
|
|
|
|
if is(X,'compound')
|
|
classification = [classification ', derived'];
|
|
end
|
|
|
|
if ~islinear(X)
|
|
variables = getvariables(X);
|
|
monomtable = yalmip('monomtable');
|
|
if ((nnz(getbasematrix(X,0))==0) ) & (sum(diff(sum(monomtable(variables,:),2)))==0)
|
|
classification = [classification ', homogeneous'];
|
|
end
|
|
end
|
|
if any(ismember(depends(X),yalmip('intvariables')))
|
|
classification = [classification ', integer'];
|
|
else
|
|
if any(ismember(depends(X),yalmip('binvariables')))
|
|
classification = [classification ', binary'];
|
|
else
|
|
if any(ismember(depends(X),yalmip('uncvariables')))
|
|
classification = [classification ', uncertain'];
|
|
end
|
|
end
|
|
end
|
|
|
|
nvars = length(depends(X));
|
|
if nvars == 1
|
|
classification = [classification ', ' num2str(nvars) ' variable'];
|
|
else
|
|
classification = [classification ', ' num2str(nvars) ' variables'];
|
|
end
|
|
|
|
if any(ismember(depends(X),yalmip('parvariables')))
|
|
classification = [classification ', parametric'];
|
|
end
|
|
if ~isnan(double(X))
|
|
classification = [classification ', current value : ' num2str(double(X))];
|
|
end
|
|
classification = [classification ')'];
|
|
|
|
disp([classification]);
|
|
else
|
|
|
|
if islinear(X)
|
|
classification = 'Noncommuting linear matrix variable ';
|
|
elseif is(X,'sigmonial')
|
|
classification = 'Noncommuting sigmonial matrix variable ';
|
|
elseif is(X,'bilinear')
|
|
classification = 'Noncommuting bilinear matrix variable ';
|
|
elseif is(X,'quadratic')
|
|
classification = 'Noncommuting quadratic matrix variable ';
|
|
else
|
|
classification = 'Noncommuting polynomial matrix variable ';
|
|
end
|
|
|
|
if isreal(X.basis)
|
|
if issymmetric(X)
|
|
info = ' (symmetric, ';
|
|
else
|
|
info = ' (full, ';
|
|
end;
|
|
info = [info 'real'];
|
|
else
|
|
if issymmetric(X)
|
|
info = ' (symmetric, ';
|
|
elseif ishermitian(X)
|
|
info = ' (hermitian, ';
|
|
else
|
|
info = ' (full, ';
|
|
end;
|
|
info = [info 'complex'];
|
|
end;
|
|
|
|
if is(X,'compound')
|
|
info = [info ', derived'];
|
|
end
|
|
|
|
if X.typeflag==9
|
|
info = [info ', KYP'];
|
|
end
|
|
if any(ismember(depends(X),yalmip('intvariables')))
|
|
info = [info ', integer'];
|
|
else
|
|
if any(ismember(depends(X),yalmip('binvariables')))
|
|
info = [info ', binary'];
|
|
else
|
|
if any(ismember(depends(X),yalmip('uncvariables')))
|
|
info = [info ', uncertain'];
|
|
end
|
|
end
|
|
end
|
|
if any(ismember(depends(X),yalmip('parvariables')))
|
|
info = [info ', parametric'];
|
|
end
|
|
|
|
xvars = depends(X);
|
|
nvars = length(xvars);
|
|
if nvars == 1
|
|
info = [info ', ' num2str(nvars) ' variable'];
|
|
else
|
|
info = [info ', ' num2str(nvars) ' variables'];
|
|
end
|
|
|
|
n = X.dim(1);
|
|
m = X.dim(2);
|
|
|
|
if (n<100) & (n==m)
|
|
x = recover(xvars);
|
|
if ~any(any(isnan(double(x))))
|
|
doubleX = double(X);
|
|
try
|
|
eigX = eig(doubleX);
|
|
info = [info ', eigenvalues between [' num2str(min(eigX)) ',' num2str(max(eigX)) ']'];
|
|
catch
|
|
end
|
|
end
|
|
elseif n~=m
|
|
x = recover(xvars);
|
|
if ~any(any(isnan(double(x))))
|
|
doubleX = double(X);
|
|
try
|
|
info = [info ', values in range [' num2str(min(min(doubleX))) ',' num2str(max(max(doubleX))) ']'];
|
|
catch
|
|
end
|
|
end
|
|
end
|
|
|
|
info = [info ')'];
|
|
disp([classification num2str(n) 'x' num2str(m) info]);
|
|
end;
|
|
case 1
|
|
disp('Relational object');
|
|
case 3
|
|
disp('Relational object');
|
|
case 4
|
|
disp('Relational object');
|
|
case 5
|
|
disp('Cone object');
|
|
case 6
|
|
disp('logdet object');
|
|
case 7
|
|
disp('Integrality constraint');
|
|
case 10
|
|
disp('Eigenvalue object');
|
|
case 11
|
|
disp('SOS object');
|
|
otherwise
|
|
end |