Main Content

lsimplot

Plot simulated time response of dynamic system to arbitrary inputs

    Description

    The lsimplot function plots the simulated time response of a dynamic system model to arbitrary inputs. To customize the plot, you can return an LSimPlot object and modify it using dot notation. For more information, see Customize Linear Analysis Plots at Command Line.

    To obtain time response data, use the lsim function.

    lsimplot(sys,u,t) plots the simulated time response of the model sys for input signal u and corresponding time vector t.

    If sys is a multi-input, multi-output (MIMO) model, then the lsimplot function creates a grid of plots with each plot displaying the response of one input-output pair.

    If sys is a model with complex coefficients, then the plot shows both the real and imaginary components of the response on a single axes and indicates the imaginary component with a diamond marker. You can also view the response using magnitude-phase and complex-plane plots. (since R2025a)

    example

    lsimplot(sys1,sys2,...,sysN,u,t) plots the simulated response of multiple dynamic systems sys1,sys2,…,sysN using the input on the same plot.

    example

    lsimplot(sys1,LineSpec1,...,sysN,LineSpecN,u,t) sets the line style, marker type, and color for the simulated response of each specified system.

    example

    lsimplot(___,IC) further specifies the initial condition IC at t(1), when sys is a state-space model. You can use IC with any of the input argument combinations in previous syntaxes.

    example

    lsimplot(sys,u,t,IC,p) specifies the parameter trajectory p when sys is an LPV model. (since R2023a)

    lsimplot(___,method) specifies how lsimplot interpolates the input values between samples when sys is a continuous-time model.

    example

    lsimplot(___,plotoptions) plots the simulated response with the plotting options specified in plotoptions. Settings you specify in plotoptions override the plotting preferences for the current MATLAB® session. This syntax is useful when you want to write a script to generate multiple plots that look the same regardless of the local preferences.

    example

    lsimplot(___,Name=Value) specifies response properties using one or more name-value arguments. For example, lsimplot(sys,LineWidth=1) sets the plot line width to 1. (since R2026a)

    • When plotting responses for multiple systems, the specified name-value arguments apply to all responses.

    • The following name-value arguments override values specified in other input arguments.

      • InitialCondition — Overrides initial conditions specified using IC

      • InterpolationMethod — Overrides interpolation method specified using method

      • Parameter — Overrides parameter values specified using p

      • Color — Overrides colors specified using LineSpec

      • MarkerStyle — Overrides marker styles specified using LineSpec

      • LineStyle — Overrides line styles specified using LineSpec

    lsimplot(parent,___) plots the simulated response in the specified parent graphics container, such as a Figure or TiledChartLayout, and sets the Parent property. Use this syntax when you want to create a plot in a specified open figure or when creating apps in App Designer.

    lsimplot(sys) opens the Linear Simulation Tool for simulating sys.

    lsimplot(sys1,sys2,...,sysN) opens the Linear Simulation Tool for simulating multiple dynamic systems.

    lsimplot(sys1,LineSpec1,...,sysN,LineSpecN) opens the Linear Simulation Tool and sets the line style, marker type, and color for the response of each specified system.

    lp = lsimplot(___) plots the simulated response or opens the Linear Simulation Tool and returns the corresponding chart object. To customize the appearance and behavior of the response plot, modify the chart object properties using dot notation.

    Examples

    collapse all

    For this example, change time units to minutes and turn the grid on for the simulated response plot. Consider the following transfer function.

    sys = tf(3,[1 2 3]);

    To compute the response of this system to an arbitrary input signal, provide lsimplot with a vector of the times t at which you want to compute the response and a vector u containing the corresponding signal values. For instance, plot the system response to a ramping step signal that starts at 0 at time t = 0, ramps from 0 at t = 1 to 1 at t = 2, and then holds steady at 1. Define t and compute the values of u.

    t = 0:0.04:8;
    u = max(0,min(t-1,1));

    Use lsimplot plot the system response to the signal with chart object lp.

    lp = lsimplot(sys,u,t);
    grid on

    MATLAB figure

    The plot shows the applied input (u,t) in gray and the system response in blue.

    Modify the chart object to change the time units to minutes.

    lp.TimeUnit = "minutes";

    MATLAB figure

    The plot automatically updates when you modify the chart object.

    Alternatively, you can also use the timeoptions command to specify the required plot options. First, create an options set based on the toolbox preferences.

    plotoptions = timeoptions('cstprefs');

    Change properties of the options set by setting the time units to minutes and enabling the grid.

    plotoptions.TimeUnits = 'minutes';
    plotoptions.Grid = 'on';
    lsimplot(sys,u,t,plotoptions);

    MATLAB figure

    lsimplot allows you to plot the simulated responses of multiple dynamic systems on the same axis. For instance, compare the closed-loop response of a system with a PI controller and a PID controller. Then, customize the plot by enabling normalization and turning the grid on.

    First, create a transfer function of the system and tune the controllers.

    H = tf(4,[1 10 25]);
    C1 = pidtune(H,'PI');
    C2 = pidtune(H,'PID');

    Form the closed-loop systems.

    sys1 = feedback(H*C1,1);
    sys2 = feedback(H*C2,1);

    Plot the responses of both systems to a square wave with a period of 4 s.

    [u,t] = gensig("square",4,12);
    lp1 = lsimplot(sys1,sys2,u,t);
    legend("PI","PID");

    MATLAB figure

    Enable normalization and turn on the grid.

    lp1.Normalize = "on";
    grid on

    MATLAB figure

    The plot automatically updates when you modify the chart object properties.

    By default, lsimplot chooses distinct colors for each system that you plot. You can specify colors and line styles using the LineSpec input argument. The first LineSpec "r--" specifies a dashed red line for the response with the PI controller. The second LineSpec "b" specifies a solid blue line for the response with the PID controller. The legend reflects the specified colors and line styles.

    lp2 = lsimplot(sys1,"r--",sys2,"b",u,t);
    legend("PI","PID");
    lp2.Normalize = "on";
    grid on

    MATLAB figure

    By default, lsimplot simulates the model assuming all states are zero at the start of the simulation. When simulating the response of a state-space model, use the optional x0 input argument to specify nonzero initial state values. Consider the following two-state SISO state-space model.

    A = [-1.5 -3;
          3   -1];
    B = [1.3; 0];
    C = [1.15 2.3];
    D = 0;
    sys = ss(A,B,C,D);

    Suppose that you want to allow the system to evolve from a known set of initial states with no input for 2 s, and then apply a unit step change. Specify the vector x0 of initial state values, and create the input vector.

    x0 = [-0.2 0.3];
    t = 0:0.05:8;
    u = zeros(length(t),1);
    u(t>=2) = 1;

    First, create a default options set using timeoptions.

    plotoptions = timeoptions;

    Next change the required properties of the options set plotoptions and plot the simulated response with the zero order hold option.

    plotoptions.Title.FontSize = 15;
    plotoptions.Title.Color = [0 0 1];
    plotoptions.Grid = 'on';
    h = lsimplot(sys,u,t,x0,plotoptions,'zoh');
    hold on
    title('Simulated Time Response with Initial Conditions')

    MATLAB figure

    The first half of the plot shows the free evolution of the system from the initial state values [-0.2 0.3]. At t = 2 there is a step change to the input, and the plot shows the system response to this new signal beginning from the state values at that time. Because plotoptions begins with a fixed set of options, the plot result is independent of the toolbox preferences of the MATLAB session.

    Since R2025a

    Create a state-space model with complex coefficients.

    A = [-2-2i -2;1 0];
    B = [2;0];
    C = [0 0.5+2.5i];
    D = 0;
    sys = ss(A,B,C,D);

    Plot the response of the system to a square wave with a period of 4 s.

    [u,t] = gensig("square",4,12);
    lp = lsimplot(sys,u,t);

    MATLAB figure

    By default, the plot shows the real and imaginary components of the response on a single axes, indicating the imaginary component using a diamond marker.

    You can also view the complex response using either a magnitude-phase plot or a complex-plane plot. For example, to view the magnitude and phase of the response, right-click the plot area and select Complex View >Magnitude-Phase.

    Alternatively, you can set the ComplexViewType parameter of the corresponding chart object.

    lp.ComplexViewType = "magnitudephase";

    MATLAB figure

    The plot shows the magnitude and phase of the response on a single axes, indicating the phase plot using a diamond marker.

    You can view response characteristics in the plot. For example, to view the peak response, right-click the plot and select Characteristics > Peak Response.

    Alternatively, you can enable the Visible property of the corresponding characteristic parameter of the chart object.

    lp.Characteristics.PeakResponse.Visible = "on";

    MATLAB figure

    Input Arguments

    collapse all

    Dynamic system, specified as a SISO or MIMO dynamic system model or an array of dynamic system models. You can use these types of dynamic systems:

    • Continuous-time or discrete-time numeric LTI models, such as tf, zpk, or ss models.

    • Generalized or uncertain LTI models such as genss or uss models. (Using uncertain models requires Robust Control Toolbox™ software.)

      • For tunable control design blocks, the function evaluates the model at its current value for both plotting and returning response data.

      • For uncertain control design blocks, the function plots the nominal value and random samples of the model. When you use output arguments, the function returns response data for the nominal model only.

    • Sparse state-space models such as sparss and mechss models.

    • Identified LTI models, such as idtf, idss, or idproc models. For such models, the function can also plot confidence intervals and return standard deviations of the frequency response. See Step Responses of Identified Models with Confidence Regions. (Using identified models requires System Identification Toolbox™ software.)

    • Linear time-varying (ltvss) and linear parameter-varying (lpvss) models.

    This function does not support frequency-response data models such as frd, genfrd, or idfrd models.

    If sys is an array of models, the function plots the responses of all models in the array on the same axes. See Step Response of Systems in a Model Array.

    Input signal for simulation, specified as one of the following:

    • For single-input systems, u is a vector of the same length as t.

    • For multi-input systems, u is an array with as many rows as there are time samples (length(t)) and as many columns as there are inputs to sys. In other words, each row u(i,:) represents the values applied at the inputs of sys at time t(i). Each column u(:,j) is the signal applied to the jth input of sys.

    Time samples at which to compute the response, specified as a vector of the form T0:dT:Tf. The lsim command interprets t as having the units specified in the TimeUnit property of the model sys.

    For continuous-time sys, the lsim command uses the time step dT to discretize the model. If dT is too large relative to the system dynamics (undersampling), lsim issues a warning recommending a faster sampling time. For further discussion of the impact of sampling time on simulation, see Effect of Sample Time on Simulation.

    For discrete-time sys, the time step dT must equal the sample time of sys. Alternatively, you can omit t or set it to []. In that case, lsim sets t to a vector of the same length as u that begins at 0 with a time step equal to sys.Ts.

    Line style, marker, and color, specified as a string or character vector containing symbols. The symbols can appear in any order. You do not need to specify all three characteristics. For example, specify the marker and omit the line style, then the plot shows only the marker and no line.

    Example: '--or' is a red dashed line with circle markers.

    Line StyleDescription
    "-"Solid line
    "--"Dashed line
    ":"Dotted line
    "-."Dash-dotted line
    MarkerDescription
    "o"Circle
    "+"Plus sign
    "*"Asterisk
    "."Point
    "x"Cross
    "_"Horizontal line
    "|"Vertical line
    "s"Square
    "d"Diamond
    "^"Upward-pointing triangle
    "v"Downward-pointing triangle
    ">"Right-pointing triangle
    "<"Left-pointing triangle
    "p"Pentagram
    "h"Hexagram
    ColorDescription
    "r"red
    "g"green
    "b"blue
    "c"cyan
    "m"magenta
    "y"yellow
    "k"black
    "w"white

    Since R2024b

    Initial conditions for simulating a state-space model, specified as one of the following:

    • Initial state values, specified as a vector with length equal to the number of states in the model.

    • Response configuration, specified as a RespConfig object.

    • Operating condition, specified as an operating point object created using findop. An operating point object allows you to start the simulation from a steady-state operating condition with nonzero past u, w, and y values. For example, to start a simulation from nonzero y value, you can specify:

      op = findop(sys,y=3);
      y = lsim(sys,u,t,op)

    If you do not specify an initial condition, then the simulation starts from an all-zero initial condition.

    LPV model parameter trajectory, specified as a matrix or a function handle.

    • For exogenous or explicit trajectories, specify p as a matrix with dimensions N-by-Np, where N is the number of time samples and Np is the number of parameters.

      Thus, the row vector p(i,:) contains the parameter values at the ith time step.

    • For endogenous or implicit trajectories, specify p as a function handle of the form p = F(t,x,u) in continuous time and p = F(k,x,u) in discrete time that gives parameters as a function of time t or time sample k, state x, and input u.

      This option is useful when you want to simulate quasi-LPV models.

    Discretization interpolation method for sampling continuous-time models, specified as one of the following.

    • "zoh" — Zero-order hold

    • "foh" — First-order hold

    When sys is a continuous-time model, lsimplot computes the time response by discretizing the model using a sample time equal to the time step dT = t(2)-t(1) of t. If you do not specify a discretization method, then lsimplot selects the method automatically based on the smoothness of the signal u. For more information about these two discretization methods, see Continuous-Discrete Conversion Methods.

    For sparse models, the discretization method is always "foh".

    Time response plot options, specified as a timeoptions object. You can use these options to customize the plot appearance. Settings you specify in plotoptions override the preference settings for the current MATLAB session.

    Parent graphics container, specified as one of these objects:

    • Figure

    • TiledChartLayout

    • UIFigure

    • UIGridLayout

    • UIPanel

    • UITab

    Name-Value Arguments

    collapse all

    Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

    Example: lsimplot(sys,u,t,LegendDisplay="off") hides the response of sys from the plot legend.

    Initial conditions for simulating a state-space model, specified as one these values. Specifying initial conditions using a name-value argument overrides the initial conditions that you specify using IC.

    • Initial state values, specified as a vector with length equal to the number of states in the model.

    • Response configuration, specified as a RespConfig object.

    • Operating condition, specified as an operating point object created using findop. An operating point object allows you to start the simulation from a steady-state operating condition with nonzero past u, w, and y values. For example, to start a simulation from nonzero y value, you can specify:

      op = findop(sys,y=3);
      y = lsim(sys,u,t,op)

    If you do not specify an initial condition, then the simulation starts from an all-zero initial condition.

    Discretization interpolation method for sampling continuous-time models, specified as one of the following.

    • "zoh" — Zero-order hold

    • "foh" — First-order hold

    When sys is a continuous-time model, lsimplot computes the time response by discretizing the model using a sample time equal to the time step dT = t(2)-t(1) of t. If you do not specify a discretization method, then lsimplot selects the method automatically based on the smoothness of the signal u. For more information about these two discretization methods, see Continuous-Discrete Conversion Methods.

    LPV model parameter trajectory, specified as a matrix or a function handle. Specifying parameter values using a name-value argument overrides the parameter values that you specify using p.

    • For exogenous or explicit trajectories, specify Parameter as a matrix with dimensions N-by-Np, where N is the number of time samples and Np is the number of parameters.

      Thus, the row vector p(i,:) contains the parameter values at the ith time step.

    • For endogenous or implicit trajectories, specify Parameter as a function handle of the form p = F(t,x,u) in continuous time and p = F(k,x,u) in discrete time that gives parameters as a function of time t or time sample k, state x, and input u.

      This option is useful when you want to simulate quasi-LPV models.

    Response name, specified as a string or character vector and stored as a string.

    Response visibility, specified as one of these logical on/off values:

    • "on", 1, or true — Display the response in the plot.

    • "off", 0, or false — Do not display the response in the plot.

    The value is stored as an on/off logical value of type matlab.lang.OnOffSwitchState.

    Option to list the response in the legend, specified as one of these logical on/off values:

    • "on", 1, or true — List the response in the legend.

    • "off", 0, or false — Do not list the response in the legend.

    The value is stored as an on/off logical value of type matlab.lang.OnOffSwitchState.

    Marker style, specified as one of these values. Specifying a marker style using a name-value argument overrides any marker style that you specify using LineSpec.

    MarkerDescription
    "none"No marker
    "o"Circle
    "+"Plus sign
    "*"Asterisk
    "."Point
    "x"Cross
    "_"Horizontal line
    "|"Vertical line
    "s"Square
    "d"Diamond
    "^"Upward-pointing triangle
    "v"Downward-pointing triangle
    ">"Right-pointing triangle
    "<"Left-pointing triangle
    "p"Pentagram
    "h"Hexagram

    Plot color, specified as an RGB triplet or a hexadecimal color code and stored as an RGB triplet. Specifying a color using a name-value argument overrides any color that you specify using LineSpec.

    You can also specify some common colors by name. This table lists these colors and their corresponding RGB triplets and hexadecimal color codes.

    Color NameRGB TripletHexadecimal Color Code

    "red" or "r"

    [1 0 0]#FF0000

    "green" or "g"

    [0 1 0]#00FF00

    "blue" or "b"

    [0 0 1]#0000FF

    "cyan" or "c"

    [0 1 1]#00FFFF

    "magenta" or "m"

    [1 0 1]#FF00FF

    "yellow" or "y"

    [1 1 0]#FFFF00

    "black" or "k"

    [0 0 0]#000000

    "white" or "w"

    [1 1 1]#FFFFFF

    Line style, specified as one of these values. Specifying a line style using a name-value argument overrides any line style that you specify using LineSpec.

    Line StyleDescription
    "-"Solid line
    "--"Dashed line
    ":"Dotted line
    "-."Dash-dotted line
    "none"No line

    Marker size, specified as a positive scalar.

    Line width, specified as a positive scalar.

    Series index, specified as a positive integer or "none".

    By default, the SeriesIndex property is a number that corresponds to the order in which the response was added to the chart, starting at 1. MATLAB uses the number to calculate indices for automatically assigning color, line style, or markers for responses. Any responses in the chart that have the same SeriesIndex number also have the same color, line style, and markers.

    A SeriesIndex value of "none" indicates that a response does not participate in the indexing scheme.

    Output Arguments

    collapse all

    Chart object, returned as a LSimPlot object. To customize your plot appearance and behavior, modify the properties of this object using dot notation. For more information, see LSimPlot Properties.

    Version History

    Introduced before R2006a

    expand all