Controlz.jl is a pure-Julia package to analyze and simulate process dynamics and control systems using transfer function representations.

e.g., the code below simulates the unit step response of a second-order, underdamped system:


  • transfer function $g(s) = \dfrac{4}{4s^2 + 0.8s +1}$
  • input $U(s)=\mathcal{L}[u(t)]$
  • output $Y(s)=\mathcal{L}[y(t)]=g(s)U(s)$

where $\mathcal{L}[\cdot]$ is the Laplace transform that maps a function in the time domain $t\in\mathbb{R}$ to the frequency domain $s\in\mathbb{C}$.

using Controlz

g = 4 / (4 * s ^ 2 + 0.8 * s + 1) # construct transfer function
U = 1 / s                         # unit step input, U(s)
Y = g * U                         # system output, Y(s)

data = simulate(Y, 50.0)          # simulate until t = 50

viz_response(data, title="SO underdamped step response")

install the Controlz.jl package in Julia

Controlz.jl is an officially registered Julia package. install in the Julia REPL by typing ] to enter package mode, then add Controlz.

to write Controlz.jl code interactively and display the outputs, use the interactive Pluto notebook. Its automatic package manager installs Controlz.jl upon running using Controlz in a code cell.