📄 pretty.m
字号:
function sys = pretty(F)
% PRETTY Pretty print an SET object
% PRETTY(F) tries to print the SET F in a format that
% resembles type-set mathematics.
%
% Requires the Symbolic Math Toolbox
% Author Johan L鰂berg
% $Id: pretty.m,v 1.3 2005/02/04 10:10:27 johanl Exp $
error('Pretty is obsolte and no longer supported')
nlmi = size(F.clauses,2);
spaces = [' '];
if (nlmi == 0) & (neq == 0)
disp('empty LMI')
return
end
lmiinfo{1} = 'Matrix inequality';
lmiinfo{2} = 'Element-wise inequality';
lmiinfo{3} = 'Equality constraint';
lmiinfo{4} = 'Second order cone constraint';
% Needed for formating
infolen = max(cellfun('length',lmiinfo));
% Check if there are any handles, sizes of strings
max_ns = 0;
max_nh = 0;
for i = 1:nlmi
max_ns = max(max_ns,length(F.clauses{i}.symbolic));
max_nh = max(max_nh,length(F.clauses{i}.handle));
end
ns = min(40,max_ns);
nh = min(40,max_nh);
nt = infolen+3;
nh = 40;
if nlmi>0
nn = ceil(log10(nlmi+1)+1);
disp('*************************');
disp('Inequality constraints');
disp('*************************');
for i = 1:nlmi
type = lmiinfo{F.clauses{i}.type};
handle = truncstring(F.clauses{i}.handle,nh);
number = strjust(fillstring(['#' num2str(i)],nn),'right');
if isempty(handle)
infostr = sprintf('%s %s',number,type);
else
infostr = sprintf('%s %s (%s)',number,type,handle);
end
disp(infostr);
prettyhack(F.clauses{i}.symbolic);
disp(' ' );
end
disp(' ');
else
disp('*************************');
disp('No inequality constraints');
disp('*************************');
end
function x= truncstring(x,n)
if length(x) > n
x = [x(1:n-3) '...'];
end
function x = fillstring(x,n)
x = [x blanks(n-length(x))];
% Works for some type of problems
function prettyhack(F)
% Some hacks to make it work
Y = F;
F = strrep(F,'''','^T');
F = strrep(F,'diag','Diag');
F = strrep(F,'min','Min');
F = strrep(F,'max','Max');
try
TypeofConstraint = 0;
delimiters = {'.<','.>','<.','>.','<','>','=',''};
delindex = 0;indtodel = [];
while isempty(indtodel) & (delindex<=7)
delindex = delindex+1;
indtodel = findstr(F,delimiters{delindex});
end
switch delindex
case 5 %<
TypeofConstraint = 1;
ind_start = indtodel-1;
ind_end = indtodel+1;
REVERSE = 1;
dell = '<';
case 6 %>
TypeofConstraint = 1;
ind_start = indtodel-1;
ind_end = indtodel+1;
REVERSE = 0;
dell = '>';
case 1 %.<
TypeofConstraint = 2;
ind_start = indtodel-1;
ind_end = indtodel+2;
REVERSE = 1;
dell = '<';
case 2 %.>
TypeofConstraint = 2;
ind_start = indtodel-1;
ind_end = indtodel+2;
REVERSE = 0;
dell = '>';
case 7%=
TypeofConstraint = 3;
ind_start = indtodel-1;
ind_end = indtodel+1;
REVERSE = 0;
dell = '=';
case {3,4}
error('Incorrect argument. Perhaps you mean .> or .<');
otherwise
error('Incorrect argument. Could not find <=>.>.<')
end
LeftHand = char(sym(F(1:ind_start)));
RightHand = char(sym(F(ind_end:end)));
maplemex('interface(prettyprint=true);');
disp(' ')
r = maplemex(['print(' LeftHand ' ' dell ' ' RightHand ');']);
if ~isempty(r)
disp(' ')
disp([strjust(fillstring(Y,79),'center') ' (cannot be displayed in Maple)'])
end
catch
disp(' ');
disp([strjust(fillstring(Y,79),'center') ' (cannot be displayed in Maple)'])
end
maplemex('interface(prettyprint=false);');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -