www.gusucode.com > mbcdata 工具箱 matlab 源码程序 > mbcdata/@cgrangeconstraint/cgrangeconstraint.m
function obj = cgrangeconstraint(varargin) %CGRANGECONSTRAINT Constructor for cgrangeconstraint class % % OBJ = CGRANGECONSTRAINT(NAME, LOWERBOUND, pEXPR, UPPERBOUND) constructs % a new cgrangeconstraint of the form % % LOWERBOUND <= pEXPR <= UPPERBOUND % % See also CGEXPRCONSTRAINT % Copyright 2006-2007 The MathWorks, Inc. % Create class structure if nargin && isstruct(varargin{1}) ISNEWOBJ = false; s = varargin{1}; prnt = s.cgoptimconstraint; s = rmfield(s, 'cgoptimconstraint'); else ISNEWOBJ = true; % Error if number of input arguments is 2, 3 or > 4 if nargin > 4 || ismember(nargin, 2:3) error(message('mbc:cgrangeconstraint:InvalidArgument')); end if nargin < 1 || isempty(varargin{1}) % This syntax is allowed only for use by the OOPS system. The % object will not be constructed with valid pointers and hence will % not work properly. CreateInternalPtrs = false; superargs = {'RangeConstraint'}; else CreateInternalPtrs = true; superargs = varargin(1); end if nargin < 4 || any(cellfun('isempty', varargin(2:3))) if CreateInternalPtrs pLowerBound = xregpointer(cgexprconstraint('RangeLowerBound', ... mbcpointer(1), 'ge', -inf)); pUpperBound = xregpointer(cgexprconstraint('RangeUpperBound', ... mbcpointer(1), 'le', inf)); else pLowerBound = xregpointer; pUpperBound = xregpointer; end else pLowerBound = xregpointer(cgexprconstraint('RangeLowerBound', varargin{3}, ... 'ge', varargin{2})); pUpperBound = xregpointer(cgexprconstraint('RangeUpperBound', varargin{3}, ... 'le', varargin{4})); end % Create internal pointers if this cannot be a system call to the % constructor if CreateInternalPtrs pMinVector = i_CreateInternalPtrs; pMaxVector = i_CreateInternalPtrs; else pMinVector = mbcpointer(1); pMaxVector = mbcpointer(1); end s = struct('LowerBound', pLowerBound, ... 'UpperBound', pUpperBound, ... 'pMinVector', pMinVector, ... 'pMaxVector', pMaxVector,... 'Version', 2); prnt = cgoptimconstraint(superargs{:}); end % Create the class obj = class(s, 'cgrangeconstraint', prnt); % Set the internal pointer names if this object has just been created. if ISNEWOBJ pSetInternalPtrsNames(obj); end %-------------------------------------------------------------------------- function pInternal = i_CreateInternalPtrs %-------------------------------------------------------------------------- wvar = cgvalue; wvar = setrange(wvar, [0 1]); wvar = setnomvalue(wvar, 1); pInternal = xregpointer(wvar);