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

    function D = divergence(V,X)
%DIVERGENCE of a vector field.
%   D = DIVERGENCE(V,X) computes the divergence of the vector field v with
%   respect to the vector x, i.e., the scalar quantity dv(1)/dx(1) +
%   dv(2)/dx(2) + ... + dv(n)/dx(n).
%
%   Example:
%       syms x y z; divergence([x^2 2*y z], [x y z])
%       returns  2*x + 3
%
%   See also SYM/CURL, SYM/DIFF, SYM/GRADIENT, SYM/HESSIAN, SYM/JACOBIAN,
%   SYM/POTENTIAL, CURL, DIVERGENCE, GRADIENT, HESSIAN, JACOBIAN,
%   LAPLACIAN, VECTORPOTENTIAL

%   Copyright 2011-2015 The MathWorks, Inc.

args = privResolveArgs(sym(V));
Vsym = formula(args{1});

if ~isvector(Vsym)
    error(message('symbolic:sym:divergence:ArgumentsMustBeScalarsOrVectors'));
end
if any(~isfinite(Vsym))
    error(message('symbolic:sym:InputMustNotContainNaNOrInf'));
end

if nargin == 1
    if isa(V,'symfun')
        X = argnames(V);
    else
        X = symvar(Vsym);
    end
end

if ~isvector(X) || ~isAllVars(X)
     error(message('symbolic:sym:divergence:SecondArgumentMustBeVectorOfVariables'));
end
if numel(Vsym) ~= numel(X)
   if nargin == 1
     error(message('symbolic:sym:divergence:VectorMismatch'));
   else
     error(message('symbolic:sym:divergence:VectorMustHaveSameDimension'));
   end
end
res = mupadmex('symobj::divergence', Vsym.s, X.s);

if isa(V,'symfun')
    D = symfun(res, argnames(V));
else
    D = res;
end