www.gusucode.com > mbctools 工具箱 matlab 源码程序 > mbctools/xregbdrydata.m
classdef (Sealed) xregbdrydata < handle %xregbdrydata Interface to the data used in the boundary editor. % Copyright 2012 The MathWorks, Inc. and Ford Global Technologies, Inc. properties (Access=private) TestplanPointer = xregpointer; end properties(Dependent, SetAccess=private) ResponseData GlobalData ResponseValidationData GlobalValidationData end methods function obj = xregbdrydata(TestplanPointer) if nargin && isa(TestplanPointer, 'xregpointer') obj.TestplanPointer = TestplanPointer; end end function localValData = LocalValidationData(obj, testInd) valData = obj.getValidationData; fitData = obj.ResponseData; % find the number of global factors (numGlobal) inputs = obj.TestplanPointer.getInputs; numLocal = length(inputs{1}); localValData = zeros(0, numLocal); if ~isempty(valData) && ~isempty(fitData) % similar to algorithm used in mdev_local\getLocalValidationData % get hold of the global values of the fit data for the specified testInd fitDataForTestInd = fitData{testInd}; fitDataForTestGlobal = mean(fitDataForTestInd(:, numLocal+1:end)); % avoid divide by 0 fitDataForTestGlobal(fitDataForTestGlobal==0) = 1; % get hold of all the validation data global values meanValData = mean(valData); valDataGlobal = meanValData(:, numLocal+1:end); numValSS = size(valDataGlobal, 1); % find validation tests that have similar values as the selected fit data normErr = valDataGlobal./repmat(fitDataForTestGlobal, numValSS, 1) - 1; validTests = sum(normErr.^2, 2) < 1e-4; if any(validTests) inds = find(validTests); for i=inds data = valData{i}; localValData = [localValData; data(:,1:numLocal)]; %#ok<AGROW> end end end end function localValData = findLocalValidationDataIndexes(obj) valData = obj.getValidationData; fitData = obj.ResponseData; localValData = zeros(length(fitData),1); if ~isempty(valData) && ~isempty(fitData) % similar to algorithm used in mdev_local\getLocalValidationData % find the number of global factors (numGlobal) inputs = obj.TestplanPointer.getInputs; numLocal = length(inputs{1}); for testInd=1:length(fitData) % get hold of the global values of the fit data for the specified testInd fitDataForTestInd = fitData{testInd}; fitDataForTestGlobal = mean(fitDataForTestInd(:, numLocal+1:end)); % avoid divide by 0 fitDataForTestGlobal(fitDataForTestGlobal==0) = 1; % get hold of all the validation data global values meanValData = mean(valData); valDataGlobal = meanValData(:, numLocal+1:end); numValSS = size(valDataGlobal, 1); % find validation tests that have similar values as the selected fit data normErr = valDataGlobal./repmat(fitDataForTestGlobal, numValSS, 1) - 1; validTests = sum(normErr.^2, 2) < 1e-4; if any(validTests) localValData(testInd) = find(validTests, 1, '-first'); end end end end function valData = get.ResponseValidationData(obj) if ~isnull(obj.TestplanPointer) valData = obj.TestplanPointer.getValidationData; else valData = []; end if isempty(valData) valData = zeros(0,obj.numLocalInputs+obj.numGlobalInputs); end end function valData = get.GlobalValidationData(obj) if ~isnull(obj.TestplanPointer) valData = obj.TestplanPointer.getValidationData; if ~isempty(valData) % find the number of global factors (numGlobal) inputs = obj.TestplanPointer.getInputs; numGlobal = length(inputs{2}); % then return the last numGlobal columns of the data valData = mean(valData(:,(end-numGlobal+1):end)); end else valData = []; end if isempty(valData) valData = zeros(0,obj.numGlobalInputs); end end function inputData = get.ResponseData(obj) if ~isnull(obj.TestplanPointer) [~,Y] = obj.TestplanPointer.getdata('FIT'); inputData = Y(:,factors(obj.TestplanPointer.info)); else inputData = []; end if isempty(inputData) inputData = zeros(0,obj.numLocalInputs+obj.numGlobalInputs); end end function inputData = LocalData(obj, testInd) %LocalData Request local data % if ~isnull(obj.TestplanPointer) TP=obj.TestplanPointer.info; inputData = getdata(TP,'FIT'); inputData = inputData{1}; if strcmpi(testInd, 'all') % want all of the local data else % select the test index from the data inputData = inputData{testInd}; end else inputData = []; end if isempty(inputData) inputData = zeros(0,obj.numLocalInputs); end end function inputData = get.GlobalData(obj) if ~isnull(obj.TestplanPointer) inputData = obj.TestplanPointer.getdata('FIT'); inputData = inputData{2}; else inputData = []; end if isempty(inputData) inputData = zeros(0,obj.numGlobalInputs); end end function obj = mapptr(obj,RefMap) obj.TestplanPointer = mapptr(obj.TestplanPointer,RefMap); end end methods (Access=private) function valData = getValidationData(obj) if ~isnull(obj.TestplanPointer) valData = obj.TestplanPointer.getValidationData; else valData = []; end end function numLocal = numLocalInputs(obj) numLocal = 0; if ~isnull(obj.TestplanPointer) inputs = obj.TestplanPointer.getInputs; numLocal = length(inputs{1}); end end function numGlobal = numGlobalInputs(obj) numGlobal = 0; if ~isnull(obj.TestplanPointer) inputs = obj.TestplanPointer.getInputs; if numel(inputs)>1 numGlobal = length(inputs{2}); else numGlobal = 0; end end end end end