Function reference

The Python Control Systems Library control provides common functions for analyzing and designing feedback control systems.

System creation

ss(A, B, C, D[, dt])

Create a state space system.

tf(num, den[, dt])

Create a transfer function system.

frd(d, w)

Construct a frequency response data model

rss([states, outputs, inputs])

Create a stable continuous random state space object.

drss([states, outputs, inputs])

Create a stable discrete random state space object.

System interconnections

append(sys1, sys2, …, sysn)

Group models by appending their inputs and outputs

connect(sys, Q, inputv, outputv)

Index-based interconnection of an LTI system.

feedback(sys1[, sys2, sign])

Feedback interconnection between two I/O systems.


Return the negative of a system.

parallel(sys1, *sysn)

Return the parallel connection sys1 + sys2 (+ .

series(sys1, *sysn)

Return the series connection (sysn * .

See also the Input/output systems module, which can be used to create and interconnect nonlinear input/output systems.

Frequency domain plotting

bode_plot(syslist[, omega, plot, …])

Bode plot for a system

nyquist_plot(syslist[, omega, plot, …])

Nyquist plot for a system

gangof4_plot(P, C[, omega])

Plot the “Gang of 4” transfer functions for a system

nichols_plot(sys_list[, omega, grid])

Nichols plot for a system

nichols_grid([cl_mags, cl_phases, line_style])

Nichols chart grid

Note: For plotting commands that create multiple axes on the same plot, the individual axes can be retrieved using the axes label (retrieved using the get_label method for the matplotliib axes object). The following labels are currently defined:

  • Bode plots: control-bode-magnitude, control-bode-phase

  • Gang of 4 plots: control-gangof4-s, control-gangof4-cs, control-gangof4-ps, control-gangof4-t

Time domain simulation

forced_response(sys[, T, U, X0, transpose, …])

Simulate the output of a linear system.

impulse_response(sys[, T, X0, input, …])

Impulse response of a linear system

initial_response(sys[, T, X0, input, …])

Initial condition response of a linear system

input_output_response(sys, T[, U, X0, …])

Compute the output response of a system to a given input.

step_response(sys[, T, X0, input, output, …])

Step response of a linear system

phase_plot(odefun[, X, Y, scale, X0, T, …])

Phase plot for 2D dynamical systems

Block diagram algebra

series(sys1, *sysn)

Return the series connection (sysn * .

parallel(sys1, *sysn)

Return the parallel connection sys1 + sys2 (+ .

feedback(sys1[, sys2, sign])

Feedback interconnection between two I/O systems.


Return the negative of a system.

Control system analysis


Return the zero-frequency (or DC) gain of the given system

evalfr(sys, x)

Evaluate the transfer function of an LTI system for a single complex number x.

freqresp(sys, omega)

Frequency response of an LTI system at multiple angular frequencies.


Calculate gain and phase margins and associated crossover frequencies

stability_margins(sysdata[, returnall, epsw])

Calculate stability margins and associated crossover frequencies.


Compute frequencies and gains at intersections with real axis in Nyquist plot.


Compute system poles.


Compute system zeros.

pzmap(sys[, plot, grid, title])

Plot a pole/zero map for a linear system.

root_locus(sys[, kvect, xlim, ylim, …])

Root locus plot

sisotool(sys[, kvect, xlim_rlocus, …])

Sisotool style collection of plots inspired by MATLAB’s sisotool.

Matrix computations

care(A, B, Q[, R, S, E, stabilizing])

(X, L, G) = care(A, B, Q, R=None) solves the continuous-time algebraic Riccati equation

dare(A, B, Q, R[, S, E, stabilizing])

(X, L, G) = dare(A, B, Q, R) solves the discrete-time algebraic Riccati equation

lyap(A, Q[, C, E])

X = lyap(A, Q) solves the continuous-time Lyapunov equation

dlyap(A, Q[, C, E])

dlyap(A,Q) solves the discrete-time Lyapunov equation

ctrb(A, B)

Controllabilty matrix

obsv(A, C)

Observability matrix

gram(sys, type)

Gramian (controllability or observability)

Control system synthesis

acker(A, B, poles)

Pole placement using Ackermann method

h2syn(P, nmeas, ncon)

H_2 control synthesis for plant P.

hinfsyn(P, nmeas, ncon)

H_{inf} control synthesis for plant P.

lqr(A, B, Q, R[, N])

Linear quadratic regulator design

lqe(A, G, C, QN, RN, [, N])

Linear quadratic estimator design (Kalman filter) for continuous-time systems.

mixsyn(g[, w1, w2, w3])

Mixed-sensitivity H-infinity synthesis.

place(A, B, p)

Place closed loop eigenvalues

Model simplification tools

minreal(sys[, tol, verbose])

Eliminates uncontrollable or unobservable states in state-space models or cancelling pole-zero pairs in transfer functions.

balred(sys, orders[, method, alpha])

Balanced reduced order model of sys of a given order.


Calculate the Hankel singular values.

modred(sys, ELIM[, method])

Model reduction of sys by eliminating the states in ELIM using a given method.

era(YY, m, n, nin, nout, r)

Calculate an ERA model of order r based on the impulse-response data YY.

markov(Y, U[, m, transpose])

Calculate the first m Markov parameters [D CB CAB …] from input U, output Y.

Nonlinear system support

find_eqpt(sys, x0[, u0, y0, t, params, iu, …])

Find the equilibrium point for an input/output system.

linearize(sys, xeq[, ueq, t, params])

Linearize an input/output system at a given state and input.

input_output_response(sys, T[, U, X0, …])

Compute the output response of a system to a given input.

ss2io(*args, **kw)

Create an I/O system from a state space linear system.

tf2io(*args, **kw)

Convert a transfer function into an I/O system

flatsys.point_to_point(sys, x0, u0, xf, uf, Tf)

Compute trajectory between an initial and final conditions.

Utility functions and conversions

augw(g[, w1, w2, w3])

Augment plant for mixed sensitivity problem.

canonical_form(xsys[, form])

Convert a system into canonical form

damp(sys[, doprint])

Compute natural frequency, damping ratio, and poles of a system


Convert a gain in decibels (dB) to a magnitude

isctime(sys[, strict])

Check to see if a system is a continuous-time system

isdtime(sys[, strict])

Check to see if a system is a discrete time system

issiso(sys[, strict])

Check to see if a system is single input, single output


Return True if an object is a system, otherwise False


Convert a magnitude to decibels (dB)


Convert a system into observable canonical form

pade(T[, n, numdeg])

Create a linear system that approximates a delay.


Convert a system into reachable canonical form


Reset configuration values to their default (initial) values.

sample_system(sysc, Ts[, method, alpha, …])

Convert a continuous time system to discrete time


Transform a state space system to a transfer function.


Return state space data objects for a system


Transform a transfer function to a state space system.


Return transfer function data objects for a system

timebase(sys[, strict])

Return the timebase for an LTI system

timebaseEqual(sys1, sys2)

Check to see if two systems have the same timebase

unwrap(angle[, period])

Unwrap a phase angle to give a continuous curve


Use Feedback Systems (FBS) compatible settings.


Use MATLAB compatible configuration settings.

use_numpy_matrix([flag, warn])

Turn on/off use of Numpy matrix class for state space operations.