Reduced Order Modeling of a Nonlinear Dynamical System as an Identified Linear Parameter Varying Model
This example shows reduced order modeling (ROM) of a nonlinear system using a linear parameter varying (LPV) modeling technique. The nonlinear system used to describe the approach is a cascade of nonlinear mass-spring-damper systems. The development of the reduced order model is based on the idea of obtaining an array of linear models over the operating range of the nonlinear model by means of linearization or linear model identification. These local linear models are stitched together using interpolation techniques to produce a linear parameter-varying representation. Such representations are useful for generating faster-simulating proxies as well as for control design.
For the purpose of local model computation, the operating space is characterized by a set of scheduling parameters (p1, p2 in the diagram below). These parameters are varied over a grid of pre-chosen values. An equilibrium operating condition corresponding to each grid point is first determined by a model trimming exercise (see findop
in Simulink® Control Design™). At each operating point, local perturbation experiments are performed to obtain a linear approximation of the system dynamics. The local models thus obtained are used to create a grid-based LPV model. This example requires that all the local models have matching structures. In particular, they must all use same state definitions. This example uses a Proper Orthogonal Decomposition (POD) approach to project the measured local responses into a common lower-dimensional space. The projected state trajectories are used to create lower-order state-space models using Dynamic Mode Decomposition (DMD).
The example uses a nonlinear mass-spring-damper Simulink model as the reference high-fidelity system. This system exhibits nonlinear stiffness and damping forces; such forces are polynomial functions of the mass displacement. The development of the LPV model follows these steps:
The nonlinear model is trimmed over a range of displacement values.
At each trim point, local small-signal simulations are performed and the data recorded.
These datasets are then used to create an array of linear state-space models. One-degree-of-freedom linear parameter varying model is simulated along a specific trajectory of the force . Multi-degree-of-freedom reduced order model is then obtained. The
n4sid
command, which estimates a linear state space model from input-output data, is used to identify linear models for the equilibrium points of the cascade of mass-spring-damper systems.
Mass-Spring-Damper Model
Consider the single mass-spring-damper system (MSD) shown in the figure below, where is the mass, is the damping coefficient, is the stiffness coefficient of the spring, is the displacement of the mass from the equilibrium position, and and are input forces acting on the mass. represents a measurable disturbance and is a controllable input.
The MSD system can be modeled as in [1]:
where is the force due to spring stiffness and the damping force. Using the displacement and velocity as state variables, this equation can be put in the state-space form:
.
Defining and discretizing the above equation yields
.
Simplify the notation by using for leading to:
In this example, we consider the nonlinearity in the stiffness and the damping forces described by polynomials:
,
and the damping coefficient given by
,
where (stiffening spring). Let denote a time-varying operating condition that you use for scheduling the nonlinear dynamics. For this example, you schedule the behavior on different values of the disturbance force, that is, . If and the disturbance force is held constant at then the mass moves to an equilibrium position . This equilibrium position can be determined by solving the cubic equation for . Note that the damping force is zero at the equilibrium. Thus a parameterized collection of equilibrium conditions for the mass spring damper system is:
.
Linearizing this equation about the equilibrium conditions corresponding to a fixed value of yields:
where:
.
The linearized spring constant at the operating condition is . Similarly, (since zero velocity at equilibrium). For more details, see section 4.2 in [1].
The model considered for simulation in this example is a cascade of 100 masses connected with springs and dampers as shown in the figure above.
Local Analysis Using Perturbation Experiments
Set the values of the parameters required to simulate the MSD system. We consider , , , .
% System parameters M = 100; % Number of masses m = 1; % Mass of individual blocks, kg k1 = 0.5; % Linear spring constant, N/m k2 = 1; % Cubic spring constant, N/m^3 b1 = 1; % Linear damping constant, N/(m/s) b2 = 0.1; % Cubic damping constant, N/(m/s)^3 % Model parameters Tf = 20; % simulation time dt = 0.01; % simulation time step (fixed step)
Experimental Setup
A perturbation experiment is performed on the MSD system with 100 masses as described in [1]. First, a collection of operating points are defined for the MSD system. Then, data is collected by running the simulation for each operating point.
% Initial condition % (needed to update the size of x in mdl_NL) x0 = zeros(M*2,1); % Simulation times dt = 0.1; % Time step, sec Tf = 20; tin = 0:0.1:Tf; % Time vector for snapshots, sec % Select Parameter Grid F_vec = (0:0.2:2)'; dut = [0 0]; dFt = [0 0]; F = F_vec(1); U0 = 0; Ngrid = numel(F_vec); Nt = numel(tin); % Batch trimming params(1).Name = 'F'; params(1).Value = F_vec;
Create operating point specifications for the Simulink MSD_NL.slx
model.
opspec = operspec('MSD_NL'); opopt = findopOptions('DisplayReport','off'); op = findop('MSD_NL',opspec, params, opopt);
Collect data at each grid point.
% Collect data at each grid point xtrim = zeros(2*M,Ngrid); dXall = zeros(2*M,Nt,Ngrid); dUall = zeros(1,Nt,Ngrid); dYall = zeros(1,Nt,Ngrid); xOff = zeros(2*M,1,Ngrid); yOff = zeros(1,1,Ngrid); for i=1:Ngrid % Grab current grid point F = F_vec(i); U0 = 0; xtrim(:,i) = op(i).States.x; % Excite nonlinear system with chirp input, u w0 = 0.1; wf = 1+F; win = w0*(wf/w0).^(tin/Tf); uin = 1e-1*sin( win.*tin ); dut = [tin(:) uin(:)]; dFt = [0, 0; Tf, 0]; % Simulate using Simulink model x0 = op(i).States.x; simout_NL_perturb = sim('MSD_NL'); states = simout_NL_perturb.simout.Data; states = (squeeze(states))'; % Collect snapshots dXall(:,:,i) = states'-repmat(x0,[1 Nt]); dUall(:,:,i) = uin; % note that the 100th state is treated as model output dYall(:,:,i) = dXall(M,:,i); % Collect offset data (input offset is 0) xOff(:,:,i) = op(i).States.x; yOff(:,:,i) = op(i).States.x(M); end
Reduced-Order Linear Parameter Varying Modeling
Perform reduced-order modeling using linear parameter varying models, where the local models are obtained using Dynamic Mode Decomposition (DMD).
X = dXall; Y = dYall; U = dUall; Nx = size(X,1); Nu = size(U,1); Ny = size(Y,1); Ngrid = size(X,3);
Concatenate the state trajectories from individual grid points along time, for PCA-type projection of the states.
% Concatenate the Ngrid (=1) state trajectories % along the time (second) dimension. X0all = reshape(X(:,1:end-1,:),Nx,[]); % Plot a few for verification plot(X0all([100 200],:)')
% POD modes using all state snapshots
[UU,SS,~] = svd(X0all);
Analyze the singular values in SS
to determine a suitable projection dimension.
bar(diag(SS)) xlim([0 10]) ylabel('Singular values') xlabel('Order')
The plot suggests, roughly, a fifth order model. Project the state trajectories obtained over the grid into a 5-dimensional space.
% Select modes for subspace projection Q = UU(:,1:5); % Project all the state trajectories into the 5-dimensional space Xs = pagemtimes(Q',X);
The projected state data Xs
and the corresponding input and output trajectories at each grid point can be used in an identification algorithm to create the local linear models. In this example, we pose the identification problem as one of performing one-step prediction of the state and output trajectories:
Here, and are measured quantities. Hence the values of the unknowns can be obtained by linear regression. This scheme is a form of dynamic mode decomposition (DMD) that is often employed for the study of fluid dynamics - the DMD modes and eigenvalues describe the dynamics observed in the time series in terms of oscillatory components. The DMD technique is used to obtain separate linear models at each grid point.
% Generate values for Xs(t+1), and Xs(t) over a time span % Time is along the second dimension in the variables Xs, Y, U Xs_future = Xs(:,2:end,:); % Xs(t+1) Xs_current = Xs(:,1:end-1,:); % Xs(t) Y_current = Y(:,1:end-1,:); % Y(t) U_current = U(:,1:end-1,:); % U(t) H = cat(1,Xs_future,Y_current); % response to be predicted R = cat(1,Xs_current,U_current); % regressor data ("predictor") % Compute parameter estimates by linear regression ABCD = pagemrdivide(H,R); A = ABCD(1:5,1:5,:); B = ABCD(1:5,6:end,:); C = ABCD(6:end,1:5,:); D = ABCD(6:end,6:end,:); % Create a state space model array % to represent the dynamics over the entire grid Gred = ss(A,B,C,D,dt)
Gred(:,:,1,1) = A = x1 x2 x3 x4 x5 x1 0.9968 -0.1 0.01319 -0.009131 -0.004158 x2 0.0598 0.8173 0.2205 -0.1001 -0.3144 x3 0.003302 0.0785 0.7367 -0.04445 0.2369 x4 0.00134 -0.01687 0.09067 0.9168 -0.09428 x5 -0.0004078 -0.003254 0.04517 -0.08203 0.8705 B = u1 x1 -1.956e-05 x2 0.1129 x3 -0.03799 x4 0.009784 x5 0.004311 C = x1 x2 x3 x4 x5 y1 -0.9049 0.08258 0.03128 -0.3008 0.2373 D = u1 y1 -0.0006643 Gred(:,:,2,1) = A = x1 x2 x3 x4 x5 x1 0.9969 -0.1001 0.01301 -0.008776 -0.004979 x2 0.07983 0.8193 0.2194 -0.04261 -0.4338 x3 -0.004858 0.07868 0.7395 -0.07153 0.2777 x4 0.002761 -0.01683 0.08896 0.9178 -0.09539 x5 0.0007509 -0.003889 0.04217 -0.08096 0.8763 B = u1 x1 -5.993e-05 x2 0.1087 x3 -0.03629 x4 0.009364 x5 0.003973 C = x1 x2 x3 x4 x5 y1 -0.9046 0.08234 0.03654 -0.2987 0.2158 D = u1 y1 -0.0003161 Gred(:,:,3,1) = A = x1 x2 x3 x4 x5 x1 0.9972 -0.1003 0.01283 -0.008032 -0.00663 x2 0.121 0.8147 0.2297 0.009268 -0.6053 x3 -0.02094 0.08264 0.7379 -0.09681 0.3403 x4 0.005489 -0.01761 0.08895 0.9193 -0.1044 x5 0.002551 -0.005922 0.04063 -0.07858 0.8736 B = u1 x1 -6.534e-05 x2 0.1081 x3 -0.03621 x4 0.009317 x5 0.004041 C = x1 x2 x3 x4 x5 y1 -0.9035 0.08259 0.03938 -0.2953 0.2003 D = u1 y1 -0.0001989 Gred(:,:,4,1) = A = x1 x2 x3 x4 x5 x1 0.9974 -0.1006 0.01263 -0.006901 -0.008381 x2 0.1685 0.8085 0.2354 0.05807 -0.7645 x3 -0.03888 0.08726 0.7382 -0.1219 0.3977 x4 0.008794 -0.01842 0.08986 0.924 -0.1168 x5 0.004541 -0.00794 0.04038 -0.07137 0.8663 B = u1 x1 -7.154e-05 x2 0.1082 x3 -0.03629 x4 0.009334 x5 0.00413 C = x1 x2 x3 x4 x5 y1 -0.9023 0.08265 0.04014 -0.2957 0.1912 D = u1 y1 -0.0001015 Gred(:,:,5,1) = A = x1 x2 x3 x4 x5 x1 0.9975 -0.1008 0.01234 -0.00552 -0.009672 x2 0.2145 0.8042 0.2269 0.1153 -0.8794 x3 -0.05591 0.09101 0.7432 -0.1501 0.438 x4 0.01218 -0.0189 0.09013 0.9308 -0.1265 x5 0.006532 -0.009566 0.0403 -0.06192 0.8605 B = u1 x1 -9.825e-05 x2 0.1067 x3 -0.0358 x4 0.009218 x5 0.004116 C = x1 x2 x3 x4 x5 y1 -0.9014 0.08257 0.0395 -0.2971 0.1851 D = u1 y1 -5.823e-05 Gred(:,:,6,1) = A = x1 x2 x3 x4 x5 x1 0.9977 -0.1009 0.01201 -0.004158 -0.01051 x2 0.2563 0.8014 0.2105 0.1711 -0.9568 x3 -0.07114 0.09401 0.7507 -0.1777 0.4641 x4 0.01535 -0.01915 0.08987 0.9375 -0.1328 x5 0.008356 -0.01088 0.04022 -0.05266 0.8574 B = u1 x1 -0.000138 x2 0.1041 x3 -0.03488 x4 0.008992 x5 0.004029 C = x1 x2 x3 x4 x5 y1 -0.9006 0.0824 0.03833 -0.2983 0.1799 D = u1 y1 -3.959e-05 Gred(:,:,7,1) = A = x1 x2 x3 x4 x5 x1 0.9978 -0.1011 0.01177 -0.002849 -0.01165 x2 0.2972 0.7973 0.1986 0.2263 -1.06 x3 -0.08582 0.09732 0.7562 -0.2044 0.4979 x4 0.01854 -0.01948 0.09004 0.9438 -0.141 x5 0.01012 -0.0121 0.04049 -0.04419 0.8545 B = u1 x1 -0.0001682 x2 0.1021 x3 -0.03416 x4 0.008821 x5 0.00396 C = x1 x2 x3 x4 x5 y1 -0.9 0.08218 0.037 -0.2987 0.1747 D = u1 y1 -3.35e-05 Gred(:,:,8,1) = A = x1 x2 x3 x4 x5 x1 0.9979 -0.1013 0.01159 -0.001579 -0.01285 x2 0.3381 0.7918 0.189 0.283 -1.173 x3 -0.1003 0.101 0.7606 -0.2311 0.5342 x4 0.02178 -0.01991 0.09041 0.9497 -0.1496 x5 0.01183 -0.01327 0.04099 -0.03656 0.8523 B = u1 x1 -0.0001875 x2 0.1008 x3 -0.03371 x4 0.008723 x5 0.003927 C = x1 x2 x3 x4 x5 y1 -0.8994 0.08194 0.03562 -0.2985 0.1691 D = u1 y1 -3.29e-05 Gred(:,:,9,1) = A = x1 x2 x3 x4 x5 x1 0.9979 -0.1015 0.01134 -0.0004775 -0.01326 x2 0.3734 0.7878 0.1718 0.3315 -1.229 x3 -0.1126 0.1039 0.7674 -0.2543 0.5499 x4 0.02453 -0.02018 0.09004 0.9545 -0.1525 x5 0.01323 -0.01427 0.04122 -0.03023 0.8538 B = u1 x1 -0.0002154 x2 0.09881 x3 -0.03301 x4 0.008556 x5 0.003861 C = x1 x2 x3 x4 x5 y1 -0.8989 0.08168 0.03425 -0.2976 0.1633 D = u1 y1 -3.545e-05 Gred(:,:,10,1) = A = x1 x2 x3 x4 x5 x1 0.9978 -0.1016 0.01102 0.0004348 -0.01298 x2 0.4018 0.7859 0.1488 0.3704 -1.237 x3 -0.1225 0.1061 0.776 -0.2735 0.5484 x4 0.02665 -0.02024 0.08908 0.9579 -0.1503 x5 0.01423 -0.0151 0.04123 -0.02525 0.8588 B = u1 x1 -0.0002555 x2 0.09582 x3 -0.03197 x4 0.008294 x5 0.003747 C = x1 x2 x3 x4 x5 y1 -0.8983 0.08141 0.03287 -0.2963 0.1572 D = u1 y1 -4.082e-05 Gred(:,:,11,1) = A = x1 x2 x3 x4 x5 x1 0.9978 -0.1017 0.01076 0.001259 -0.01285 x2 0.4298 0.783 0.1292 0.4076 -1.264 x3 -0.132 0.1085 0.7832 -0.2914 0.5523 x4 0.02871 -0.02038 0.08841 0.9608 -0.1493 x5 0.01511 -0.0159 0.04148 -0.02121 0.8642 B = u1 x1 -0.0002888 x2 0.09334 x3 -0.03111 x4 0.008077 x5 0.003654 C = x1 x2 x3 x4 x5 y1 -0.8978 0.08113 0.03149 -0.2945 0.151 D = u1 y1 -4.865e-05 Sample time: 0.1 seconds 11x1 array of discrete-time state-space models.
% Collect offset information % (obtained earlier during operating point search) Gred.SamplingGrid.F = F_vec; % scheduling parameter grid Gred_offset_x = pagemtimes(Q',xOff); Gred_offset_y = yOff; bodemag(Gred) % frequency responses of the 11 models
The LTI array Gred
, along with the offset data can be used to create an LPV model. There are two ways of doing so:
In MATLAB® using the
ssInterpolant
function to create anlvpss
modelIn Simulink using the LPV System block
LPV Model Creation and Simulation
Simulate the nonlinear and the linear parameter varying models with a sinusoidal input force and compare the results. First, simulate the original nonlinear system to generate the reference data.
Tf = 50; tin = 0:dt:Tf; Nt = numel(tin); % Specify sinusoidal parameter (F) trajectory amp = -1; bias = 1; freq = 0.5; Ft = amp*cos(freq*tin)+bias; dFt = [tin(:) Ft(:)]; F = 0; % Specify input Force dut = [tin(:) zeros(Nt,1)]; dut(tin>=25,2) = 0.1; U0 = 0; % Simulate the high-fidelity nonlinear model simout_NL_MDOF = sim('MSD_NL'); tout = simout_NL_MDOF.tout; simout_NL_MDOF_data = squeeze(simout_NL_MDOF.simout.Data)';
Simulate LPV Model in Simulink
Use the LPV System block to represent the LPV system. The block uses linear interpolation by default to interpolate the linear model matrices and the offsets.
% Simulate ROM LPV open_system('MSD_MDOF_LPV')
simout_NL_MDOF_red = sim('MSD_MDOF_LPV');
simout_NL_MDOF_red_data = squeeze(simout_NL_MDOF_red.simout.Data)';
ybar = simout_NL_MDOF_red_data(:,7);
Compare the responses of the original (MSD_NL
) and the LPV approximation (MSD_MDOF_LPV
).
% Compare the system output (position of the last mass) plot(tout, simout_NL_MDOF_data(:,M),'b',... tout, simout_NL_MDOF_red_data(:,6),'r-.',... tout, ybar,'g:') ylabel('Block 100 Position [m]'); xlabel('Time [sec]'); legend('Nonlinear model',... 'LPV (Simulink)',... 'Output offset (Trim)'); grid on;
Simulate LPV Model in MATLAB
The LPV model is encapsulated by the lpvss
object in MATLAB. The lpvss
object supports simulations, and model operations such as c2d
, feedback
connection etc. When the LPV model is composed of an array of local linear models, the ssInterpolant
command can be used to create the LPV model.
xc = squeeze(mat2cell(pagemtimes(Q',xOff),5,1,ones(1,Ngrid))); yc = squeeze(mat2cell(yOff,1,1,ones(1,Ngrid))); Offset = struct('dx',xc,'x',xc,'y',yc,'u',[]); LPVModel = ssInterpolant(Gred, Offset)
Discrete-time state-space LPV model with 1 outputs, 1 inputs, 5 states, and 1 parameters.
Simulate LPVModel
using the same input and scheduling trajectories as used for original nonlinear system. The simulation is performed using the lsim
command.
Input = dut(:,2)+U0; Time = dut(:,1); Scheduling = dFt(:,2)+F; x0 = zeros(5,1); yLPV = lsim(LPVModel, Input, Time, x0, Scheduling); plot(tout, simout_NL_MDOF_data(:,M),'b',... Time, yLPV,'r-.') ylabel('Block 100 Position [m]'); xlabel('Time [sec]'); legend('Nonlinear model',... 'LPV (MATLAB)'); grid on;
The results show a good match between the original nonlinear system response, and that of its LPV approximation obtained by local linear modeling over a grid of scheduling values.
References
[1] Jennifer Annoni and Peter Seiler. "A method to construct reduced‐order parameter‐varying models." International Journal of Robust and Nonlinear Control 27.4 (2017): 582-597.