www.gusucode.com > mbcdata 工具箱 matlab 源码程序 > mbcdata/@cgtabgradconstraint/staticRHSEvaluate.m

    function [out, grad] = staticRHSEvaluate(obj, InputValues, ExprVals, GradVals, GradVars)
%STATICRHSEVALUATE Evaluate the item at a set of inputs and expression values.
%
%   OUT = STATICRHSEVALUATE(OBJ, INPUTVALUES, EXPRVALS) evaluates the right
%   hand side of the constraint item at a set of input values given the set
%   of expression output values EXPRVALS and returns outputs for each input
%   set. INPUTVALUES must be a cell array with the same number of elements
%   as the item has inputs.  Each cell contains a matrix of data for that
%   input.  EXPRVALS must be a cell array with the same number of elements
%   as there are expressions in the expression/function list provided by
%   the GETSTATICEXPRESSIONS method.  The output is a matrix of evaluation
%   values.
%
%   [OUT, GRAD] = STATICRHSEVALUATE(OBJ, INPUTS, EXPRVALS, GRADVALS, GRADVARS)
%   also calculates the gradient of the value, given the gradients of
%   the expression values.  GRAVALS is a cell array the same size as
%   EXPRVALS that contains a 3D matrix for each 2D matrix of expression
%   evaluations in EXPRVALS.  The 3rd dimension contains the gradients with
%   respect to each free variable value.  GRADVARS is a vector of input
%   indices that indicates which inputs the expression gradients have been
%   calculated for.  GRAD should be a 3D matrix with the first two
%   dimensions the same size as OUT, and the 3rd dimension the same size as
%   the 3rd dimension of the expression gradients, i.e. a gradient should
%   be produced for each variable value GRADVARS specifies.

%   Copyright 2006-2009 The MathWorks, Inc.

if nargout>1 && nargin<4
    error(message('mbc:cgsumconstraint:InvalidArgument'));
end

% Determine number of runs and variables
Sc = cellfun('size', InputValues, 2);
Sr = cellfun('size', InputValues, 1);
NRUN = max(Sr);

% Dimension of grid for table gradierts
NAXES = length(obj.pAxisVariables);

% Do the evaluation
grad = [];
if isempty(InputValues) || ~NAXES
    out = zeros(max(Sr), 0);
    if nargin > 3
        grad = zeros(NRUN, 0, sum(Sc(GradVars)));
    end
else
    TabGradInputs = getTabGradInputs(obj,InputValues,ExprVals);

    % Do the evaluation
    if nargout > 1
        [out, grad] = pEvaluate(obj, TabGradInputs, 'RHS');
    else
        out = pEvaluate(obj, TabGradInputs, 'RHS');
    end
   
end