В этом примере показано, как использовать функциональность командной строки, чтобы создать локальные проекты в каждой глобальной рабочей точке. Этот конкретный пример показывает, как можно произвести локальные карты для калибровки дизельного двигателя.
Скорость (N) и топливо (F) является глобальными входными параметрами. Инжекция (специальная инструкция), топливное давление (fuelpress), турбо положение стойки изменяемой геометрии (grackmea) и рециркуляция выхлопного газа (EGR) является локальными входными параметрами.
project = mbcmodel.CreateProject('DieselMulti'); % Define Inputs for test plan LocalInputs = mbcmodel.modelinput('Symbol',{'S','P','G','E'},... 'Name',{'soi','fuelpress','grackmea','egrlift'},... 'Units',{'deg','MPa','ratio','mm'},... 'Range',{[-9 3],[60 160],[0.2 0.9],[0.5 5]}); GlobalInputs = mbcmodel.modelinput('Symbol',{'N','F'},... 'Name',{'measrpm','basefuelmass'},... 'Units',{'rpm','mg/stroke'},... 'Range',{[1600 2200],[20 200]}); % create test plan TP = CreateTestplan( project, {LocalInputs,GlobalInputs} );
Сгенерируйте 15 проектов Латинской выборки гиперкуба (LHS) точки для глобальных входных параметров.
globalDesign = TP.CreateDesign(2, 'Type', 'Latin Hypercube Sampling'); % Fuel constraint: Maximum 200 at 1600 rpm, 175 at 2200 rpm C = globalDesign.CreateConstraint('Type','1D Table'); % set up the 1D Table constraint C.InputFactor = 'N'; C.Breakpoints = [1600 2000]; C.TableFactor = 'F'; C.Table = [200 175]; % assign constraint to design globalDesign.Constraints = C; % generate a 15 point design globalDesign = Generate(globalDesign, 15); % set as best design in test plan TP.BestDesign{2} = globalDesign;
Для каждой глобальной точки настройте пределы при топливном давлении и grackmea, и сгенерируйте 30 точек проект LHS.
% create a local design localDesign = TP.CreateDesign(1,'Type','Latin Hypercube Sampling'); localDesignGenerator = localDesign.Generator; localDesignGenerator.NumberOfPoints = 30; DList = mbcdoe.design.empty( 0, 1); for i = 1:globalDesign.NumberOfPoints; GlobalPoint = globalDesign.Points(i,:); speed = GlobalPoint(1); % fuel pressure limits dependent on speed f = (speed-1600)/(2200-1600); % note because you use the Limits property to specify the input range % you get LHS designs with exactly 30 points. localDesignGenerator.Limits(2,:) = (1-f)*[90 120] + f*[110 160]; % grackmea limits dependent on speed localDesignGenerator.Limits(3,:) = (1-f)*[0.2 0.4] + f*[0.6 0.9]; % set design properties and generate local design localDesign.Generator = localDesignGenerator; % Make design name which reflects the global point localDesign.Name = sprintf('Test %2d (%s=%4.0f,%s=%3.0f)', i,... GlobalInputs(1).Symbol,GlobalPoint(1),.... GlobalInputs(2).Symbol,GlobalPoint(2)); % Plot Design Scatter2D(localDesign); DList(i) = localDesign; end
% assign list of local designs to test plan TP.Designs{1} = DList; % List of local designs localDesigns = TP.Designs{1}
localDesigns=1×15 object
1×15 design array with properties:
Style
Type
NumPoints
NumInputs
Name
Points
PointTypes
Inputs
Generator
Constraints
Model