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