Function Reference |

Simulate LTI model response to arbitrary inputs

**Syntax**

lsim(sys,u,t) lsim(sys,u,t,x0)

`lsim(sys,u,t,x0,'zoh')`

`lsim(sys,u,t,x0,'foh')`

lsim(sys1,sys2,...,sysN,u,t) lsim(sys1,sys2,...,sysN,u,t,x0) lsim(sys1,'PlotStyle1',...,sysN,'PlotStyleN',u,t) [y,t,x] = lsim(sys,u,t,x0)

**Description**

```
lsim
```

simulates the (time) response of continuous or discrete linear systems to arbitrary inputs. When invoked without left-hand arguments, `lsim`

plots the response on the screen.

```
lsim(sys,u,t)
```

produces a plot of the time response of the LTI model `sys`

to the input time history `t`

,`u`

. The vector `t`

specifies the time samples for the simulation and consists of regularly spaced time samples.

The matrix `u`

must have as many rows as time samples (`length(t)`

) and as many columns as system inputs. Each row `u(i,:)`

specifies the input value(s) at the time sample `t(i)`

.

The LTI model `sys`

can be continuous or discrete, SISO or MIMO. In discrete time, `u`

must be sampled at the same rate as the system (`t`

is then redundant and can be omitted or set to the empty matrix). In continuous time, the time sampling` dt=t(2)-t(1) `

is used to discretize the continuous model. If `dt`

is too large (undersampling), `lsim`

issues a warning suggesting that you use a more appropriate sample time, but will use the specified sample time. See Algorithm for a discussion of sample times.

```
lsim(sys,u,t,x0)
```

further specifies an initial condition `x0`

for the system states. This syntax applies only to state-space models.

`lsim(sys,u,t,x0,'zoh')`

or `lsim(sys,u,t,x0,'foh')`

explicitly specifies how the input values should be interpolated between samples (zero-order hold or linear interpolation). By default, `lsim`

selects the interpolation method automatically based on the smoothness of the signal U.

simulates the responses of several LTI models to the same input history `t`

,`u`

and plots these responses on a single figure. As with `bode`

or `plot`

, you can specify a particular color, linestyle, and/or marker for each system, for example,

The multisystem behavior is similar to that of `bode`

or `step`

.

When invoked with left-hand arguments,

[y,t] = lsim(sys,u,t) [y,t,x] = lsim(sys,u,t) % for state-space models only [y,t,x] = lsim(sys,u,t,x0) % with initial state

return the output response `y`

, the time vector `t`

used for simulation, and the state trajectories `x`

(for state-space models only). No plot is drawn on the screen. The matrix `y`

has as many rows as time samples (`length(t)`

) and as many columns as system outputs. The same holds for `x`

with "outputs" replaced by states. Note that the output `t`

may differ from the specified time vector when the input data is undersampled (see Algorithm).

**Example**

Simulate and plot the response of the system

to a square wave with period of four seconds. First generate the square wave with `gensig`

. Sample every 0.1 second during 10 seconds:

**Algorithm**

Discrete-time systems are simulated with `ltitr`

(state space) or `filter`

(transfer function and zero-pole-gain).

Continuous-time systems are discretized with `c2d`

using either the `'zoh'`

or `'foh'`

method (`'foh'`

is used for smooth input signals and `'zoh'`

for discontinuous signals such as pulses or square waves). The sampling period is set to the spacing `dt`

between the user-supplied time samples `t`

.

The choice of sampling period can drastically affect simulation results. To illustrate why, consider the second-order model

To simulate its response to a square wave with period 1 second, you can proceed as follows:

w2 = 62.83^2 h = tf(w2,[1 2 w2]) t = 0:0.1:5; % vector of time samples u = (rem(t,1)>=0.5); % square wave values lsim(h,u,t)

`lsim`

evaluates the specified sample time, gives this warning

To improve on this response, discretize using the recommended sampling period:

This response exhibits strong oscillatory behavior hidden from the undersampled version.

**See Also**

`gensig`

Generate test input signals for ` `

```
lsim
```

`impulse`

Impulse response
` `

`initial`

Free response to initial condition
` `

`ltiview`

` `

LTI system viewer

`step`

Step response
` `

lqry | ltimodels |