www.gusucode.com > mbcdemos 工具箱 matlab 源码程序 > mbcdemos/mbcDoeCmdLine.m
%% Gasoline Case Study Design of Experiment % This example shows how to design an experiment for the gasoline case study problem using the % command-line interface to Model-Based Calibration Toolbox(TM). The gasoline case study describes % how to systematically develop a set of optimal steady-state engine calibration tables using % Model-Based Calibration Toolbox(TM) software. % Copyright 2007-2012 The MathWorks, Inc. %% Create Project and Test Plan % project = mbcmodel.CreateProject('GasolineCaseStudy'); % Define Inputs for test plan localInputs = mbcmodel.modelinput(... 'Symbol', 'S',... 'Name', 'SPARK',... 'Range', [0 50]); globalInputs = mbcmodel.modelinput(... 'Symbol', {'N','L','ICP','ECP'},... 'Name', {'SPEED','LOAD','INT_ADV','EXH_RET'},... 'Range', {[500 6000],[0.0679 0.9502],[-5 50],[-5 50]}); % Create test plan TP = CreateTestplan( project, {localInputs,globalInputs} ); %% Create Space-Filling Design % |CreateDesign| defaults to creating a design for the outer (global) % level. sfDesign = CreateDesign(TP, ... 'Type', 'Latin Hypercube Sampling',... 'Name', 'Space Filling'); %% Add Boundary Constraints % Load boundary constraints from another project file and add to design. otherProject = mbcmodel.LoadProject( [matlabroot,'\toolbox\mbc\mbctraining\Gasoline_project.mat']); boundaryConstraints = otherProject.Testplans(1).BoundaryModel('global'); % Design constraints are specified as an array of % mbcdoe.designconstraint objects. sfDesign.Constraints = boundaryConstraints; %% Change Selection Criteria of LHS Design % Get the design properties and change the SelectionCriteria to 'minimax'. % Putting the changed properties back into the design causes the design to % update. designGenerator = sfDesign.Generator; % Use "minimax" designGenerator.SelectionCriteria = 'minimax' sfDesign.Generator = designGenerator; %% Get Required Number of Points for a Constrained Design. % As in the Design Editor, when a design has constraints it is hard to % achieve the number of points you require. In the design editor you try % different numbers of points and regenerate. At the command line you can % use the |ConstrainedGenerate| method to do this. %% Generate Design % Use |ConstrainedGenerate| to make a 200 point design. sfDesign = ConstrainedGenerate( sfDesign, 200, 'UnconstrainedSize', 800, 'MaxIter',10 ); % How did we do? finalNumberOfPoints = sfDesign.NumberOfPoints % How many points did we need in total? totalNumberOfPoints = sfDesign.Generator.NumberOfPoints %% Generate Design for Parked Cam Phasers % Make another design for some points with parked cam phasers. These points % are important because you need an accurate model when cams are parked. parkedCamsDesign = sfDesign.CreateDesign( 'Name', 'Parked' ); parkedCamsDesign = ConstrainedGenerate( parkedCamsDesign, 10, 'UnconstrainedSize', 40, 'MaxIter',10 ); % Explicitly set ECP and ICP to 0 - this changes the 'Type' to 'Custom' designTypeBefore = parkedCamsDesign.Type parkedCamsDesign.Points(:,3:4) = 0; designTypeAfter = parkedCamsDesign.Type % Merge with first design to create a new design mainDesign = Merge( sfDesign, parkedCamsDesign ); mainDesign.Name = 'Main Design'; %% Plot Design Points % Scatter2D is a method of mbcdoe.design. designPoints = mainDesign.Points; inputs = mainDesign.Inputs; subplot(2,1,1) Scatter2D( mainDesign, 1, 2 ); subplot(2,1,2) Scatter2D( mainDesign, 3, 4 ); %% Add the Designs to the Test Plan % Testplans have a Design property that is a cell array (one cell for each % stage). Here you add the designs to the 2nd stage. TP.Design{2} = [sfDesign parkedCamsDesign mainDesign]; get(TP) %% Set the BestDesign % Testplans also have a BestDesign property (also a cell array). Set % the Best Design for the 2nd stage. TP.BestDesign{2} = mainDesign %% Create Validation Design % Make another space-filling design for collecting validation data. validationDesign = sfDesign.CreateDesign( 'Name', 'Validation' ); validationDesign = ConstrainedGenerate( validationDesign, 25, 'UnconstrainedSize', 100, 'MaxIter',10 ); % Add the parked cams point. validationDesign.Points(end+1,:) = [3500 0.5 0 0]; % Add this to testplan as well - when you add one design only, using % AddDesign is more convenient. By default this adds the design to 2nd % stage. % Note: alternatively, you could add the design to TP.Design{2} directly. TP.AddDesign(validationDesign); % The list of designs for the 2nd stage allDesigns = TP.Design{2} displayEndOfDemoMessage(mfilename)