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

    function [data, pVal] = getinitialvaluedata(optim, pVal, RunIdx)
%GETINITIALVALUEDATA A short description of the function
%
%  [DATA, PVAL] = GETINITIALVALUEDATA(OPTIM) returns a matrix containing
%  the initial free values and the fixed values for all of the variables
%  that are used in the optimization.
%
%  [DATA, PVAL] = GETINITIALVALUEDATA(OPTIM, PVAL) specifies the inports
%  that initial data is required for.
%
%  [DATA, PVAL] = GETINITIALVALUEDATA(OPTIM, PVAL, RUNIDX) specifies the
%  runs that the initial data is required for.

%  Copyright 2005-2006 The MathWorks, Inc. and Ford Global Technologies, Inc.


if nargin<2
    % Get data for all values
    ObjInputs = mbccellarrayeval(getObjectiveFunc(optim), @getInputs);
    ConInputs = mbccellarrayeval(getEnabledConstraints(optim), @getInputs);

    pVal = unique([optim.values, ObjInputs{:}, ConInputs{:}]);
end

if nargin<3
    RunIdx = 1:optim.NumberOfRuns;
end

data = cell(size(pVal));

% Get all inports that data is saved for
pAvailDataVal = [getfreevalues(optim), getfixedvalues(optim)];

isStored = ismember(pVal, pAvailDataVal);
if ~all(isStored)
    % Also go direct to store for variables that do not depend on the known
    % stored data
    [indep, pLinks] = cgisindependentvars(pVal(~isStored), pAvailDataVal);
    isStored(~isStored) = indep;
    
    if ~all(isStored)
        % Take other values by setting known data into variables and
        % getting the values
        for n = find(~indep)
            linkdata = pGetInputData(optim, pLinks(n), RunIdx);
            pLinks(n).info = pLinks(n).setvalue(linkdata(:));
            data{n} = reshape(pVal(n).getdata, size(linkdata));
        end
    end
end

% Take available values directly from the stores
data(isStored) = pGetInputData(optim, pVal(isStored), RunIdx);