gusucode.com > symbolic工具箱matlab源码程序 > symbolic/@sym/disp.m
function disp(X,novars) %DISP Displays a sym as text. % DISP(S) displays the scalar or array sym, % without printing the sym name. % Copyright 1993-2015 The MathWorks, Inc. % get the correct number of digits to display for symfuns: numbers = regexp(X(1).s, '^_symans_(\d+)', 'tokens'); if ~isempty(numbers) oldDigits = digits(numbers{1}{1}); resetDigits = onCleanup(@() digits(oldDigits)); end Xsym = privResolveArgs(X); X = Xsym{1}; fX = formula(X); sz = size(fX); if prod(sz) == 0 return; end if feature('SuppressCommandLineOutput') && sympref('TypesetOutput') if ~ismatrix(fX) display(X, inputname(1)); return; end createMathML(X); matlab.internal.language.signalVariableDisplay(X,''); return; end if nargin == 1 novars = false; end loose = isequal(get(0,'FormatSpacing'),'loose'); if all(sz == 1) allstrs = mupadmex('symobj::allstrs',X.s,0); allstrs = allstrs(2:end-1); if ~isempty(strfind(allstrs,'_symans')) warning(message('symbolic:sym:disp:UndefinedVariable')); return; end disp(allstrs); else % Find maximum string length of the elements of X while numel(sz) < 2 sz = [sz 1]; %#ok<AGROW> end p = sz; d = length(p); allstrs = mupadmex('symobj::allstrs', X.s, 0); if ~isempty(strfind(allstrs,'_symans')) warning(message('symbolic:sym:disp:UndefinedVariable')); return; end allstrs = allstrs(2:end-3); % 3 covers the trailing #!" strs = regexp(allstrs,'#!','split'); strs = reshape(strs,sz); lengths = cellfun('length',strs); while ~ismatrix(lengths) lengths = max(lengths,[],ndims(lengths)); end len = max(lengths,[],1); for k = 1:prod(p(3:end)) if d > 2 if loose, disp(' '), end disp([inputname(1) '(:,:,' int2strnd(k,p(3:end)) ') = ']) if loose, disp(' '), end end % Pad each element with the appropriate number of blanks for i = 1:p(1) str = '['; for j = 1:p(2) s = strs{i,j,k}; s(s=='`') = []; str = [str blanks(len(j)-length(s)+1) s ','];%#ok end str(end) = ']'; if p(2) == 1; str = str(2:end-1); end disp(str) end end end if isa(X,'symfun') && ~novars vars = argnames(X); cvars = privToCell(vars); for k=1:length(vars) cvars{k} = char(cvars{k}); end vars = sprintf('%s, ',cvars{:}); vars(end-1:end)=[]; disp(getString(message('symbolic:sym:disp:SymVars', vars))) end if loose, disp(' '), end collectGarbage(symengine); end % ------------------------ function s = int2strnd(k,p) s = ''; k = k-1; for j = 1:length(p) d = mod(k,p(j)); s = [s int2str(d+1) ',']; %#ok k = (k - d)/p(j); end s(end) = []; end