Dynamic-Calibration/utils/YALMIP-master/@sdpvar/display.m

207 lines
7.4 KiB
Matlab
Executable File

function display(X)
%DISPLAY (overloaded)
switch(X.typeflag)
case {0,9,40}
n = X.dim(1);
m = X.dim(2);
if (n*m==1)
vars = depends(X);
if any(ismember(vars,yalmip('extvariables')))
classification = 'Nonlinear scalar ';
else
linearbilinearquadraticsigmonial = is(X,'LBQS');
if linearbilinearquadraticsigmonial(1)
classification = 'Linear scalar ';
elseif linearbilinearquadraticsigmonial(4)
classification = 'Signomial scalar ';
elseif linearbilinearquadraticsigmonial(2)
classification = 'Bilinear scalar ';
elseif linearbilinearquadraticsigmonial(3)
classification = 'Quadratic scalar ';
else
classification = 'Polynomial scalar ';
end
end
if ~isreal(X.basis)
classification = [classification '(complex'];
else
classification = [classification '(real'];
end
if is(X,'compound')
if ~isequal(X.extra.opname,'')
classification = [classification ', models ''' X.extra.opname ''''];
end
end
if ~islinear(X)
variables = getvariables(X);
monomtable = yalmip('monomtable');
s = sum((monomtable(variables,:)),2);
% s = sum(full(monomtable(variables,:)),2);
if ((nnz(getbasematrix(X,0))==0) ) && all(s==s(1))
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'];
else
if any(ismember(depends(X),yalmip('semicontvariables')))
classification = [classification ', semi-continuous'];
end
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(value(X))
classification = [classification '\nCurrent value: ' num2str(value(X))];
end
B = getbase(X);
[ii,jj,ss1] = find(real(getbase(B)));
[ii,jj,ss2] = find(imag(getbase(B)));
ss = [ss1;ss2];
DynamicalRange = [num2str( min(abs(ss))) ' to ' num2str( max(abs(ss)))];
classification = [classification '\nCoeffiecient range: ' DynamicalRange];
fprintf([classification '\n']);
else
vars = depends(X);
if any(ismember(vars,yalmip('extvariables')))
classification = 'Nonlinear matrix variable ';
else
if islinear(X)
classification = 'Linear matrix variable ';
elseif is(X,'sigmonial')
classification = 'Signomial matrix variable ';
elseif is(X,'bilinear')
classification = 'Bilinear matrix variable ';
elseif is(X,'quadratic')
classification = 'Quadratic matrix variable ';
else
classification = 'Polynomial matrix variable ';
end
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 X.typeflag==9
info = [info ', KYP'];
end
if X.typeflag==40
info = [info ', Generalized 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(value(x))))
doubleX = double(X);
try
eigX = eig(doubleX);
info = [info '\nEigenvalues between [' num2str(min(eigX)) ',' num2str(max(eigX)) ']'];
catch
end
end
elseif n~=m
x = recover(xvars);
if ~any(any(isnan(value(x))))
doubleX = value(X);
try
info = [info '\nValues in range [' num2str(min(min(doubleX))) ',' num2str(max(max(doubleX))) ']'];
catch
end
end
end
B = getbase(X);
[ii,jj,ss1] = find(real(getbase(B)));
[ii,jj,ss2] = find(imag(getbase(B)));
ss = [ss1;ss2];
DynamicalRange = [num2str( min(abs(ss))) ' to ' num2str( max(abs(ss)))];
info = [info '\nCoeffiecient range: ' DynamicalRange];
fprintf([classification num2str(n) 'x' num2str(m) info '\n']);
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');
case 20
disp('Power cone object');
otherwise
end