Создание локальных проектов

В этом примере показано, как использовать функциональность командной строки для создания локальных проектов в каждой глобальной рабочей точке. Этот конкретный пример показывает, как можно создать локальные карты для калибровки дизельного двигателя.

Создайте проект и План тестирования

Скорость (N) и топливо (F) являются глобальными входами. Инжекция (soi), давление топлива (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- точки дизайн Latin Hypercube Sampling (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, и сгенерируйте проект LHS на 30 точек.

% 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

Похожие темы