## Using LTV and LPV Models in MATLAB and Simulink

### Model Objects

Use `lpvss` and `ltvss` to represent linear parameter-varying (LPV) and linear time-varying (LTV) systems, respectively. For more information about these models, see LTV and LPV Modeling.

The following table illustrates the types of varying models that you can represent:

Model TypeMathematical RepresentationModel Object
Continuous-time LPV model
`$\begin{array}{c}E\left(t,p\right)\stackrel{˙}{x}={\delta }_{0}\left(t,p\right)+A\left(t,p\right)\left(x-{x}_{0}\left(t,p\right)\right)+B\left(t,p\right)\left(u-{u}_{0}\left(t,p\right)\right)\\ y\left(t\right)={y}_{0}\left(t,p\right)+C\left(t,p\right)\left(x-{x}_{0}\left(t,p\right)\right)+D\left(t,p\right)\left(u-{u}_{0}\left(t,p\right)\right)\end{array}$`
`lpvss`
Discrete-time LPV model
`$\begin{array}{c}E\left(k,{p}_{k}\right){x}_{k+1}={\delta }_{0}\left(k,{p}_{k}\right)+A\left(k,{p}_{k}\right)\left({x}_{k}-{x}_{0}\left(k,{p}_{k}\right)\right)+B\left(k,{p}_{k}\right)\left({u}_{k}-{u}_{0}\left(k,{p}_{k}\right)\right)\\ {y}_{k}={y}_{0}\left(k,{p}_{k}\right)+C\left(k,{p}_{k}\right)\left({x}_{k}-{x}_{0}\left(k,{p}_{k}\right)\right)+D\left(k,{p}_{k}\right)\left({u}_{k}-{u}_{0}\left(k,{p}_{k}\right)\right)\end{array}$`
`lpvss`
Continuous-time LTV model
`$\begin{array}{c}E\left(t\right)\stackrel{˙}{x}={\delta }_{0}\left(t\right)+A\left(t\right)\left(x-{x}_{0}\left(t\right)\right)+B\left(t\right)\left(u-{u}_{0}\left(t\right)\right)\\ y\left(t\right)={y}_{0}\left(t\right)+C\left(t\right)\left(x-{x}_{0}\left(t\right)\right)+D\left(t\right)\left(u-{u}_{0}\left(t\right)\right)\end{array}$`
`ltvss`
Discrete-time LTV model
`$\begin{array}{c}{E}_{k}{x}_{k+1}={\delta }_{0k}+{A}_{k}\left({x}_{k}-{x}_{0}{}_{k}\right)+{B}_{k}\left({u}_{k}-{u}_{0}{}_{k}\right)\\ {y}_{k}={y}_{0k}+{C}_{k}\left({x}_{k}-{x}_{0}{}_{k}\right)+{D}_{k}\left({u}_{k}-{u}_{0}{}_{k}\right)\end{array}$`
`ltvss`

#### Data Function

The `ltvss` and `lpvss` objects require you to specify a user-defined MATLAB® function for calculating matrices and offsets. This is called the data function and must be of the following form.

Model TypeData Function
Continuous-time `ltvss`
`$\left[A,B,C,D,E,{\delta }_{0},{x}_{0},{u}_{0},{y}_{0},Delays\right]=f\left(t\right)$`
Discrete-time `ltvss`
`$\left[A,B,C,D,E,{\delta }_{0},{x}_{0},{u}_{0},{y}_{0},Delays\right]=f\left(k\right)$`
Continuous-time `lpvss`
`$\left[A,B,C,D,E,{\delta }_{0},{x}_{0},{u}_{0},{y}_{0},Delays\right]=f\left(t,p\right)$`
Discrete-time `lpvss`
`$\left[A,B,C,D,E,{\delta }_{0},{x}_{0},{u}_{0},{y}_{0},Delays\right]=f\left(k,p\right)$`

To understand the anatomy of a data function, consider `dataFcnMaglev.m` which is provided with the LPV Model of Magnetic Levitation System example.

```function [A,B,C,D,E,dx0,x0,u0,y0,Delays] = dataFcnMaglev(~,p) % MAGLEV example: % x = [h ; dh/dt] % p=hbar (equilibrium height) mb = 0.02; % kg g = 9.81; alpha = 2.4832e-5; A = [0 1;2*g/p 0]; B = [0 ; -2*sqrt(g*alpha/mb)/p]; C = [1 0]; % h D = 0; E = []; dx0 = []; x0 = [p;0]; u0 = sqrt(mb*g/alpha)*p; % ibar y0 = p; % y = h = hbar + (h-hbar) Delays = [];```

This data function performs the following tasks:

1. Specifies the inputs of the data function.

A data function must have time and parameter values as inputs. If your parameters do not explicitly depend on time, you can omit the time input as shown in `dataFcnMaglev.m`. In discrete time, the time input k is the integer index that counts the number of sampling periods Ts , where the absolute time is given by t = kTs. And, p is the parameter value at the time t or sample k, that is, p(t) or p[k].

You can specify additional inputs to the data function by using anonymous functions. For more information , see Anonymous Functions. This helps reduce code redundancy and computation cost. For example, if you wrote a function that also requires parameters `m` and `n` and an `options` structure, you can write the data function as follows.

`DF = @(t,p) myFunction(t,p(1),..,p(n),m,n,options)`
2. Defines the matrices and offsets.

The time or parameter matrices and offsets of the LTV or LPV models. You typically obtain these from linearizing nonlinear models around operating conditions.

3. Specifies the values of matrices and offsets as outputs of the data function.

The data function must return valid values for the outputs `A`, `B`, `C`, `D`, `E`, `dx0`, `x0`, `u0`, `y0`, and `Delays`. You can set all output arguments except `A`, `B`, `C`, `D` to `[]` when absent for (`t`,`p`) values.

Note

Set Delays to `[]`. In future releases, this argument will allow you to specify model delays.

### Gridded LPV Models

A common way of representing LPV models is as an interpolated array of linear state-space models. A certain number of points in the scheduling space are selected. An LTI system is assigned to each point, representing the dynamics in the local vicinity of that point. You obtain the dynamics at scheduling locations in between the grid points by interpolating LTI systems at neighboring points. For meaningful interpolations of system matrices, all the local models must use the same state basis.

This form is called the grid-based LPV representation. For more information, see Gridded Models and Choice of Sampling Grid.

### Sampling and Interpolation

Use `sample` to sample the LTV or LPV dynamics over a grid of t or (t,p) values (k or (k,p) in discrete time). This gives the local linear (affine) dynamics for a given time or parameter value. The result consists of an array of `ss` objects and a `struct` array of offsets.

Conversely, `ssInterpolant` takes an `ss` array and a `struct` array of offsets and creates an LTV or LPV model that interpolates these values between grid points (the grid is defined by the `SamplingGrid` property of the `ss` array). The resulting model is called a gridded LTV or LPV model.

### Model Interconnection

All standard signal-based connections listed under Model Interconnection are supported for LTV and LPV models. These operations automatically manage offsets and do not involve any approximation. Interconnecting models using signals allow you to construct models for control systems. You can conceptualize your control system as a block diagram containing multiple interconnected components, such as a plant and a controller connected in a feedback configuration. For instance, you can build and LPV model of a plant, design a gain-scheduled controller on a t or (t,p) grid, and simulate the closed-loop control system. See Analysis of Gain-Scheduled PI Controller and Control Design for Spinning Disks for examples.

• Combining two `ltvss` models yields an `ltvss` model.

• Combining two `lpvss` models yields an `lpvss` model, depending on the union of parameters.

• Combining an `ltvss` model and an `lpvss` model yields an `lpvss` model.

• Combining an LTI model with an `ltvss` or `lpvss` model yields an `ltvss` or `lpvss` model, respectively.

Before you combine models with shared parameters that each use a different test value `p0` for validation, you must first reconcile these values using `setTestValue`. For `p0` = 0, the interconnection functions ignore the test values.

If each model has different parameters, the combined model depends on the union of the parameters.

### Continuous and Discrete Conversions

You can convert between continuous-time and discrete-time and resample `ltvss` and `lpvss` models using `c2d`, `d2c`, and `d2d`.

• For analytic `ltvss` and `lpvss` models, the software only supports conversion using the `'tustin'` method.

• For gridded LTV and LPV models (see `ssInterpolant`), the functions convert or resample the LTI model at each grid point and interpolate the resulting data. The software only supports conversion for gridded models using `'zoh'`, `'impulse'`, and `'tustin'` methods.

### Time Response Simulation

The time-response functions such as `step`, `impulse`, `lsim`, and `initial` support LTV and LPV model simulation along with LTI models for easy comparison. You must specify an equisampled time vector to set the integration step size of the fixed-step LTV and LPV solvers. There are two key differences with LTI simulation:

• For LPV models, you must specify an additional input/output `p` depending on the syntax. As input, you can specify the parameter trajectory p(t) as a vector or matrix or implicitly as a function p = h(t,x,u). As output, p is the actual parameter trajectory.

For examples that compare the two approaches, see LPV Model of Magnetic Levitation System and Hidden Couplings in Gain-Scheduled Control.

• Input offsets and initial conditions matter for LTV and LPV model. You can use the `RespConfig` object to manage these settings. The software now supports the input offsets and initial states for LTI models for uniformity. This allows for side-by-side comparisons with LTV and LPV models. You must specify correct model offsets along with proper initial conditions for accurate time-response simulation.

### Gain-Scheduled Controller Design

You can use functions such as `pidtune` and `systune` to tune gain-scheduled controllers. A gain-scheduled controller is an LPV model parameterized by the scheduling variables. For examples that implement a gain-scheduled controller as an analytic LPV model, see Gain-Scheduled LQG Controller and Analysis of Gain-Scheduled PI Controller. For examples that implement a gain-scheduled controller as a gridded LPV model, see LPV Model of Magnetic Levitation Model from Batch Linearization Results, Control Design for Wind Turbine, and Design and Validate Gain-Scheduled Controller for Nonlinear Aircraft Pitch Dynamics.

### LPV System Block

You can use the LPV System block to represent and simulate gridded LPV models in Simulink®. You can use this block to represent an array of state-space models and its associated offsets as an LPV model. For an example, see Using LTI Arrays for Simulating Multi-Mode Dynamics.

You can also use this block to implement a controller designed on a grid of trim points, and then test the closed-loop response of the controller with the nonlinear Simulink model. For examples, see LPV Model of Magnetic Levitation Model from Batch Linearization Results and Design and Validate Gain-Scheduled Controller for Nonlinear Aircraft Pitch Dynamics.

### Other Supported Functionality

Additionally, the following functionality is currently supported.

### Applications of Linear Parameter-Varying Models

#### Modeling Multimode Dynamics

You can use LPV models to represent systems that exhibit multiple modes (regimes) of operation. Examples of such systems include colliding bodies, systems controlled by operator switches, and approximations of systems affected by dry friction and hysteresis effects. For an example, see LPV Model of Bouncing Ball.

#### Proxy Modeling for Faster Simulations

This approach is useful for generating surrogate models that you can use in place of the original system, which enable faster simulations as well as hardware-in-loop (HIL) simulations and reduce the memory footprint of target hardware code. You can also use surrogate models of this type for designing gain-scheduled controllers and for initializing parameter estimation tasks in Simulink. For an example of approximating a general nonlinear system behavior by an LPV model, see Design and Validate Gain-Scheduled Controller for Nonlinear Aircraft Pitch Dynamics.

LPV models can help speed up the simulation of physical component based systems, such as those built using Simscape™ Multibody™ and Simscape Electrical™ Power Systems software. For an example of this approach, see LPV Approximation of Boost Converter Model.