www.gusucode.com > slcontrol 案例源码程序 matlab代码 > slcontrol/BatchTrimModelAtKnownStatesDerivedFromParameterValuesExample.m

    %% Batch Trim Model at Known States Derived from Parameter Values
%% 
% This example shows how to batch trim a model when the specified parameter
% variations affect the known states for trimming.

%%
% In the <docid:slcontrol_ug.bvfqv1l> example, the model is trimmed to meet
% a single operating point specification that contains unknown states. In
% other cases, the model states are known for trimming, but depend on the
% values of the varying parameters. In this case, you cannot batch trim the
% model using a single operating point specification. You must create a
% separate specification for each parameter value grid point.

%%
% Open the Simulink model.
sys = 'scdairframeTRIM';
open_system(sys)

%%
% In this model, the aerodynamic forces and moments depend on the speed,
% $V$, and incidence, $\alpha$.

%%
% Vary the $V$ and $\alpha$ parameters, and create a 6-by-4 parameter grid.
nA = 6;    % number of alpha values
nV = 4;    % number of V values
alphaRange = linspace(-20,20,nA)*pi/180;
vRange = linspace(700,1400,nV);
[alphaGrid,vGrid] = ndgrid(alphaRange,vRange);

%%
% Since some known state values for trimming depend on the values of
% $V$ and $\alpha$, you must create a separate operating point
% specification object for each parameter combination.
for i = 1:nA
    for j = 1:nV
        % Set parameter values in model.
        alpha_ini = alphaGrid(i,j);     
        v_ini = vGrid(i,j);

        % Create default specifications based on the specified parameters.
        opspec(i,j) = operspec(sys);

        % Specify which states are known and which states are at steady state.
        opspec(i,j).States(1).Known = [1;1];
        opspec(i,j).States(1).SteadyState = [0;0];

        opspec(i,j).States(3).Known = [1;1];
        opspec(i,j).States(3).SteadyState = [0;1];

        opspec(i,j).States(2).Known = 1;
        opspec(i,j).States(2).SteadyState = 0;

        opspec(i,j).States(4).Known = 0;
        opspec(i,j).States(4).SteadyState = 1;
    end
end

%%
% Create a parameter structure for batch trimming. Specify a name and value
% grid for each parameter.
params(1).Name = 'alpha_ini';
params(1).Value = alphaGrid;
params(2).Name = 'v_ini';
params(2).Value = vGrid;

%%
% Trim the model using the specified parameter grid and operating point
% specifications. When you specify an array of operating point
% specifications and varying parameter values, the dimensions of the
% specification array must match the parameter grid dimensions.
opt = findopOptions('DisplayReport','off');
op = findop(sys,opspec,params,opt);

%%
% |findop| trims the model for each parameter combination. |op| is a 6-by-4
% array of operating point objects that correspond to the specified
% parameter grid points.