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, strictly_proper])

Create a stable random state space object.

drss(*args, **kwargs)

Create a stable, discrete-time, random state space system

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, sys2, [..., sysn])

Return the parallel connection sys1 + sys2 (+ ... + sysn).

series(sys1, sys2, [..., sysn])

Return the series connection (sysn * ... *) sys2 * sys1.

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

describing_function_plot(H, F, A[, omega, ...])

Plot a Nyquist plot with a describing function for a nonlinear 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, ...])

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, ...])

Compute the impulse response for 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, ...])

Compute the step response for a linear system.

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

Phase plot for 2D dynamical systems

Control system analysis


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

describing_function(F, A[, num_points, ...])

Numerical compute the describing function of a nonlinear function

evalfr(sys, x[, squeeze])

Evaluate the transfer function of an LTI system for complex frequency x.

freqresp(sys, omega[, squeeze])

Frequency response of an LTI system at multiple angular frequencies.


Calculate gain and phase margins and associated crossover frequencies

stability_margins(sysdata[, returnall, ...])

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, method])

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

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

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

create_statefbk_iosystem(sys, K[, ...])

Create an I/O system using a (full) state feedback controller

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

Discrete-time linear quadratic regulator design

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

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

Mixed-sensitivity H-infinity synthesis.

place(A, B, p)

Place closed loop eigenvalues

rootlocus_pid_designer(plant[, gain, sign, ...])

Manual PID controller design based on root locus using Sisotool

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

describing_function(F, A[, num_points, ...])

Numerical compute the describing function of a nonlinear function

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

Find the equilibrium point for an input/output system.

interconnect(syslist[, connections, ...])

Interconnect a set of input/output systems.

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, **kwargs)

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

summing_junction([inputs, output, ...])

Create a summing junction as an input/output system.


Convert a transfer function into an I/O system

flatsys.point_to_point(sys, timepts[, x0, ...])

Compute trajectory between an initial and final conditions.

Stochastic system support

correlation(T, X[, Y, squeeze])

Compute the correlation of time signals.

create_estimator_iosystem(sys, QN, RN[, P0, ...])

Create an I/O system implementing a linqear quadratic estimator

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

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

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

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

white_noise(T, Q[, dt])

Generate a white noise signal with specified intensity.

Utility functions and conversions

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

Augment plant for mixed sensitivity problem.

bdschur(a[, condmax, sort])

Block-diagonal Schur decomposition

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)

modal_form(xsys[, condmax, sort])

Convert a system into modal canonical form


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 by sampling


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 a 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.