www.gusucode.com > mbcdata 工具箱 matlab 源码程序 > mbcdata/@cgoptimoutput/private/pCollectData.m
function [Data, ColNames] = pCollectData(obj, FreeData, RunIdx, opts) %PCOLLECTDATA Calculate data and concatenate. % % [DATA, COLNAMES] = PCOLLECTDATA(OBJ, FREEDATA, RUNIDX, OPTS) calculates % the output values specified in OPTS for the free values in the cell % array FREEDATA, using fixed data from the runs RUNIDX. % Copyright 2005-2010 The MathWorks, Inc. % Put together requested information Data = {}; for n =1:length(opts.OutputContents) if opts.OutputContents(n) == opts.OutputFreeVars Data = [Data, FreeData]; end if opts.OutputContents(n) == opts.OutputFixedVars Data = [Data, getFixedValues(obj.optimRunner, RunIdx)]; end if opts.OutputContents(n) == opts.OutputObjectives Data = [Data, evaluateObjective(obj.optimRunner, FreeData, [], ... 'FixedValueSource', {'runs', RunIdx})]; end if opts.OutputContents(n) == opts.OutputConstraints Data = [Data, evaluateConstraint(obj.optimRunner, FreeData, [], ... 'FixedValueSource', {'runs', RunIdx})]; end if opts.OutputContents(n) == opts.OutputConstraintLHS Data = [Data, evaluateConstraint(obj.optimRunner, FreeData, [], ... 'FixedValueSource', {'runs', RunIdx}, ... 'EvaluationType', 'LHSEvaluate')]; end if opts.OutputContents(n) == opts.OutputConstraintRHS Data = [Data, evaluateConstraint(obj.optimRunner, FreeData, [], ... 'FixedValueSource', {'runs', RunIdx}, ... 'EvaluationType', 'RHSEvaluate')]; end if opts.OutputContents(n) == opts.OutputConstraintFeas % Output a logical that indicates whether each constraint is greater % than the constraint tolerance ConDist = evaluateConstraint(obj.optimRunner, FreeData, [], ... 'FixedValueSource', {'runs', RunIdx}); [~,EqConIdx] = getConstraintNames(obj.optimRunner, 'equality'); ConDist = iBelowTol(ConDist, EqConIdx,getConstraintTol(obj)); Data = [Data, ConDist]; end end if opts.ConcatenateOutput Data = [Data{:}]; end if nargout>1 % Generate column header names ColNames = pGenerateOutputNames(obj, opts); end function ConTol = iBelowTol(ConDist, EqConIdx,Tol) ConTol = cell(size(ConDist)); % equality constraints ConTol(EqConIdx) = cellfun(@(x) abs(x)<=Tol, ConDist(EqConIdx), 'UniformOutput', false); % inequality constraints ConTol(~EqConIdx) = cellfun(@(x) x<=Tol, ConDist(~EqConIdx), 'UniformOutput', false);