gusucode.com > symbolic工具箱matlab源码程序 > symbolic/@sym/subexpr.m

    function [Y,sigma] = subexpr(X,signame)
%SUBEXPR Rewrite in terms of common subexpressions.
%   [Y,SIGMA] = SUBEXPR(X) or [Y,SIGMA] = SUBEXPR(X,'SIGMA')
%   rewrites the symbolic expression X in terms of a common
%   subexpression.
%
%   Example:
%      syms a b c d x
%      t = solve(a*x^3+b*x^2+c*x == 0, x);
%      [r,s] = subexpr(t,'s');
%
%   See also SYM/PRETTY, SYM/SUBS.

%   Copyright 1993-2016 The MathWorks, Inc.

% Get name of subexpression matrix
if nargin == 1
    signame = 'sigma';
elseif isa(signame,'sym') && isvarname(char(signame))
    signame = char(signame);
elseif ~ischar(signame)
    signame = inputname(2);
    if isempty(signame)
        error(message('symbolic:subexpr:NoName'));
    end
end

X = privResolveArgs(X);
X = X{1};

if ismember(sym(signame),symvar(X))
  error(message('symbolic:subexpr:DuplicateName',signame));
end

[Y,sigma] = mupadmexnout('symobj::subexpr',X,signame);
if strcmp(char(sigma),'#NULL')
    sigma = sym([]);
end

if (nargout < 2) && ~isempty(sigma)
   assignin('caller',signame,sigma);
   loose = strcmp(get(0,'formatspacing'),'loose');
   if loose, disp(' '); end
   disp([signame,' = ']);
   if loose, disp(' '); end
   disp(sigma);
   if loose, disp(' '); end
end