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

    %% Batch Linearize Model at Multiple Operating Points Derived from Parameter Variations
% If your application includes parameter variations that affect the
% operating point of the model, you must batch trim the model for the
% parameter variations before linearization. Use this batch linearization
% approach when computing linear models for linear parameter-varying
% systems.

%%
% For more information on batch trimming models for parameter variations,
% see <docid:slcontrol_ug.bvfkgey>.

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

%%
% Vary parameters |A| and |b| within 10% of their nominal values. Specify
% three values for |A| and four values for |b|, creating a 3-by-4 value grid
% for each parameter.
[A_grid,b_grid] = ndgrid(linspace(0.9*A,1.1*A,3),...
                         linspace(0.9*b,1.1*b,4));

%%
% Create a parameter structure array, specifying the name and grid points
% for each parameter.
params(1).Name = 'A';
params(1).Value = A_grid;
params(2).Name = 'b';
params(2).Value = b_grid;

%%
% Create a default operating point specification for the model, which
% specifies that both model states are unknown and must be at steady state
% in the trimmed operating point.
opspec = operspec(sys);

%%
% Trim the model using the specified operating point specification,
% parameter grid, and option set. Suppress the display of the operating
% point search report.
opt = findopOptions('DisplayReport','off');
[op,opreport] = findop(sys,opspec,params,opt);

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

%%
% To compute the closed-loop input/output transfer function for the model,
% define the linearization input and output points as the reference input
% and model output respectively.
io(1) = linio('watertank/Desired  Water Level',1,'input');
io(2) = linio('watertank/Water-Tank System',1,'output');

%%
% To extract multiple open-loop and closed-loop transfer functions from
% the same model, batch linearize the system using an |slLinearizer|
% interface. For more information, see <docid:slcontrol_ug.bt2uomc-1>.

%%
% Batch linearize the model at the trimmed operating points, using the
% specified I/O points and parameter variations.
G = linearize(sys,op,io,params);

%%
% |G| is a 3-by-4 array of linearized models. Each entry in the array
% contains a linearization for the corresponding parameter combination in
% |params|. For example, |G(:,:,2,3)| corresponds to the linearization
% obtained by setting the values of the |A| and |b| parameters to
% |A_grid(2,3)| and |b_grid(2,3)|, respectively. The set of parameter
% values corresponding to each entry in the model array |G| is stored in
% the |SamplingGrid| property of |G|. For example, examine the
% corresponding parameter values for linearization |G(:,:,2,3)|:
G(:,:,2,3).SamplingGrid

%%
% When batch linearizing for parameter variations, you can obtain the
% linearization offsets that correspond to the linearization operating
% points. To do so, set the |StoreOffsets| linearization option.
opt = linearizeOptions('StoreOffsets',true);

%%
% Linearize the model using the specified parameter grid, and return the
% linearization offsets in the |info| structure.
[G,~,info] = linearize('watertank',io,params,opt);

%%
% You can then use the offsets to configure an LPV System block. To do so,
% you must first convert the offsets to the required format. For an
% example, see <docid:slcontrol_ug.bukb2mm-1>.
offsets = getOffsetsForLPV(info);