- control-systems-ai999x — offline, verified control systems solver with step-by-step answers
control-systems-ai999x — offline, verified control systems solver with step-by-step answers
Desktop app & command line · Compute in your browser · Install (Python) · Guides · Evaluation · AI999X on Hugging Face · Website · Support: Buy Me a Coffee
License: Apache-2.0 · Author: Ibnul Jaif Farabi (creator and engineer) · Organization: AI999X · Version 1.0.0
Field: Engineering · Tasks: Question Answering, Sentence Similarity, Feature Extraction
control-systems-ai999x is an offline, deterministic Python solver that answers control systems questions with verified results from 97 certified capabilities, gives 686 documented answers identically on Windows and Linux, and refuses rather than guesses when an answer cannot be verified.
control-systems-ai999x is a compact, deterministic control systems engine for Python. It reads a question in plain English (or a typed call), picks a certified control systems capability, computes the answer exactly, checks it, and returns the result with its steps, units, LaTeX and assumptions — or an honest refusal that says what is missing. It runs fully offline on any CPU, needs no GPU, no API key and no internet, and is built to give zero wrong answers: when it is not sure, it refuses instead of guessing.
Run it your way. control-systems-ai999x comes as the AI999X desktop app and as the command-line program control-systems for Windows and Linux, runs in your browser as WebAssembly, and installs as a Python package. The desktop app, the command line and the browser run the same compiled Rust program on your own device: offline, no Python needed.
Get it
| Way to run it | For | Get it |
|---|---|---|
| AI999X Control Systems desktop app 1.2.0 | Windows, Linux — this model in its own app: search, ask in words, forms, live figures, explanations, offline | Windows (x86-64) · Linux (x86-64) |
| AI999X desktop app 1.2.0 | Windows, Linux — every AI999X model in one app: search, ask in words, forms, live figures, explanations, offline | Windows (x86-64) · Linux (x86-64) |
Command line (control-systems) |
Windows, Linux — one program per model, offline, no Python | Windows (x86-64) · Linux (x86-64) |
| In your browser | any device — nothing to install | Compute on the model page |
| Python | Python 3.10+ | pip install control-systems-ai999x |
Checksums: SHA256SUMS · every version: https://www.ai999x.com/downloads/desktop/latest/ · install guide: desktop & command line
Rust versions
Control Systems also comes as native programs compiled from Rust, version 1.2.0 of the AI999X desktop app and command line: they run offline on your computer and need no Python. Each file is in this repository's rust/ folder, on the GitHub release v1.0.0 and on the website.
| Program | System | File | Size | Download | Use |
|---|---|---|---|---|---|
| Desktop app (Control Systems) | Windows x86-64 | ai999x-control-systems-1.2.0-windows-x86_64.zip |
7.4 MB | Hub · GitHub · website | unzip, then double-click ai999x-control-systems.exe (no installer) |
| Desktop app (Control Systems) | Linux x86-64 | ai999x-control-systems-1.2.0-linux-x86_64.tar.gz |
8.4 MB | Hub · GitHub · website | extract, then run ./ai999x-control-systems (X11 or Wayland desktop) |
Command line (control-systems) |
Windows x86-64 | ai999x-control-systems-cli-1.2.0-windows-x86_64.zip |
3.2 MB | Hub · GitHub · website (all models) | unzip, then control-systems.exe ask "<question>" or control-systems.exe solve <capability> name=value |
Command line (control-systems) |
Linux x86-64 | ai999x-control-systems-cli-1.2.0-linux-x86_64.tar.gz |
3.1 MB | Hub · GitHub · website (all models) | extract, then ./control-systems ask "<question>" or ./control-systems solve <capability> name=value |
The command-line archive holds control-systems with a README of its commands and examples, the licence and the notice. Checksums: rust/SHA256SUMS (sha256sum -c SHA256SUMS).
Quick start
Desktop app
Download AI999X Control Systems for your system (above), unpack it and start it; type a question in words or pick a capability, fill in the form and press Compute. Figures and an explanation of the answer appear beside it. The AI999X desktop app has the same, with Control Systems among all AI999X models.
Linux, from a terminal:
curl -LO https://www.ai999x.com/downloads/desktop/1.2.0/ai999x-control-systems-1.2.0-linux-x86_64.tar.gz
curl -LO https://www.ai999x.com/downloads/desktop/1.2.0/SHA256SUMS
sha256sum -c --ignore-missing SHA256SUMS
tar xzf ai999x-control-systems-1.2.0-linux-x86_64.tar.gz
./ai999x-control-systems-1.2.0-linux-x86_64/ai999x-control-systems
Command line
Linux:
curl -LO https://www.ai999x.com/downloads/desktop/1.2.0/ai999x-cli-1.2.0-linux-x86_64.tar.gz
curl -LO https://www.ai999x.com/downloads/desktop/1.2.0/SHA256SUMS
sha256sum -c --ignore-missing SHA256SUMS
mkdir -p ~/.local/share && tar xzf ai999x-cli-1.2.0-linux-x86_64.tar.gz -C ~/.local/share
echo 'export PATH="$HOME/.local/share/ai999x-cli-1.2.0-linux-x86_64:$PATH"' >> ~/.bashrc && source ~/.bashrc
control-systems --version
Windows (PowerShell):
$F = "ai999x-cli-1.2.0-windows-x86_64.zip"
Invoke-WebRequest "https://www.ai999x.com/downloads/desktop/1.2.0/$F" -OutFile $F
Invoke-WebRequest "https://www.ai999x.com/downloads/desktop/1.2.0/SHA256SUMS" -OutFile SHA256SUMS
(Get-FileHash $F -Algorithm SHA256).Hash.ToLower() -eq ((Select-String -SimpleMatch $F SHA256SUMS).Line -split ' ')[0]
Expand-Archive $F -DestinationPath "$env:LOCALAPPDATA\AI999X" -Force
$D = "$env:LOCALAPPDATA\AI999X\ai999x-cli-1.2.0-windows-x86_64"; $env:Path += ";$D"
[Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path", "User") + ";$D", "User")
control-systems --version
Every command below was run as shown; the text under it is what the program printed.
Ask in words — Write the question as you would say it: the program reads the quantities and their units, picks the capability and answers.
$ control-systems ask "stability margins: num = [10], den = [1, 3, 2, 0]"
Read as: Gain and phase margins
gm = 0.6
gm_db = -4.436974992
w_pc = 1.414213562 rad/s
pm_deg = -12.99720802
w_gc = 1.802203305 rad/s
by: Gain and phase margins (crossovers as positive real roots of |N|^2 - |D|^2 and Im(N(jw) conj D(jw)), Newton-polished)
assumes: exactly one gain crossover and one phase crossover
What a capability needs — The equation or method, every input and output with its SI unit. Read this before solve: it tells you the input names.
$ control-systems info ctrl_stability_margins
Gain and phase margins
crossovers as positive real roots of |N|^2 - |D|^2 and Im(N(jw) conj D(jw)), Newton-polished
in num numerator of the open loop L(s) (vector) []
in den denominator of L(s) (vector) []
out gm gain margin (ratio) []
out gm_db gain margin in dB []
out w_pc phase-crossover frequency [rad/s]
out pm_deg phase margin in degrees []
out w_gc gain-crossover frequency [rad/s]
Solve — Inputs as name=value, each with any unit of the right kind. The answer lists every output, the method used, each input converted to SI, and the conditions the answer assumes.
$ control-systems solve ctrl_stability_margins "num=[10]" "den=[1, 3, 2, 0]"
gm = 0.6
gm_db = -4.436974992
w_pc = 1.414213562 rad/s
pm_deg = -12.99720802
w_gc = 1.802203305 rad/s
by: Gain and phase margins (crossovers as positive real roots of |N|^2 - |D|^2 and Im(N(jw) conj D(jw)), Newton-polished)
assumes: exactly one gain crossover and one phase crossover
Many questions at once — One JSON request per line in, one JSON answer per line out, in order: for scripts, notebooks and agents (the program starts once). In PowerShell: Get-Content cases.jsonl | control-systems batch
cases.jsonl:
{"key": "ctrl_stability_margins", "inputs": {"num": "[10]", "den": "[1, 3, 2, 0]"}}
{"key": "ctrl_routh_hurwitz", "inputs": {"coefficients": "[1, 2, 3, 4, 5]"}}
$ control-systems batch < cases.jsonl
{"outcome":"SOLVED","message":"","value":-12.9972080155,"unit":"","solved_for":"pm_deg","values":[["gm",0.6,""],["gm_db",-4.43697499233,""],["w_pc",1.41421356237,"rad/s"],["pm_deg",-12.9972080155,""],["w_gc",1.80220330461,"rad/s"]],"target":"pm_deg","phrase":"gain margin (ratio)","assumptions":["exactly one gain crossover and one phase crossover"],"name":"Gain and phase margins","equation":"crossovers as positive real roots of |N|^2 - |D|^2 and Im(N(jw) conj D(jw)), Newton-polished"}
{"outcome":"SOLVED","message":"","value":2.0,"unit":"","solved_for":"rhp_roots","values":[["first_column",[1.0,2.0,1.0,-6.0,5.0],""],["rhp_roots",2,""],["stable",false,""]],"target":"rhp_roots","phrase":"first column of the Routh array","assumptions":["no zero in the first column (special cases are refused)"],"name":"Routh-Hurwitz stability test","equation":"Routh array in exact fractions; sign changes of the first column"}
In your browser
Open Control Systems on ai999x.com, choose a capability and press Compute: the model runs on your own device as WebAssembly; nothing is sent anywhere. Change any input (any unit of the right kind) and the answer, its explanation and the figures follow.
In your own page: control_systems_ai999x.wasm and the loader ax-wasm.js (https://www.ai999x.com/compute/rust/ax-wasm.js).
Python
pip install control-systems-ai999x
Worked examples in every form
The same worked example from the command line, from Python and in the browser. Each command-line output is what the program printed.
Lag compensator placement
C(s) = (s + z)/(s + p) with z = w_c/ratio (default a decade below the crossover) and p = z/beta: zero, pole, DC gain beta, and the phase lag and gain it adds at w_c.
Command line:
$ control-systems solve ctrl_lag_design beta=10 w_c=1
zero = 0.1
pole = 0.01
dc_gain = 10
phase_deg = -5.13765444
magnitude_db = 0.04277946506
by: Lag compensator placement (zero a decade below crossover, pole beta times lower)
beta = 10
w_c = 1
assumes: beta > 1; ratio >= 2
Python:
import control_systems_ai999x as m
a = m.solve("ctrl_lag_design", beta="10", w_c="1")
print(a.values or (a.value, a.unit))
Browser: open this capability on the model page and press Compute in your browser.
Lead compensator design for a required phase lead
alpha = (1 - sin phi)/(1 + sin phi) and T = 1/(w_m sqrt(alpha)) so that C(s) = (T s + 1)/(alpha T s + 1) adds the phase lead phi at w_m; its zero, pole and gain at w_m.
Command line:
$ control-systems solve ctrl_lead_design phi_max_deg=30 w_m=1
alpha = 0.3333333333
T = 1.732050808 s
zero = 0.5773502692
pole = 1.732050808
gain_db = 4.771212547
by: Lead compensator design for a required phase lead (sin phi_max = (1 - alpha)/(1 + alpha), w_m = 1/(T sqrt(alpha)))
phi_max_deg = 30
w_m = 1
assumes: 0 < phi < 90 degrees; w_m > 0
Python:
import control_systems_ai999x as m
a = m.solve("ctrl_lead_design", phi_max_deg="30", w_m="1")
print(a.values or (a.value, a.unit))
Browser: open this capability on the model page and press Compute in your browser.
Maximum phase lead of a lead compensator
For C(s) = (s + z)/(s + p) with z < p: the maximum phase lead asin((p - z)/(p + z)), the frequency sqrt(z p) where it occurs, alpha = z/p and the gain there, 10 log10(z/p) dB.
Command line:
$ control-systems solve ctrl_lead_max_phase z=1 p=9
phi_max_deg = 53.13010235
w_max = 3 rad/s
alpha = 0.1111111111
magnitude_db = -9.542425094
by: Maximum phase lead of a lead compensator (stationary point of the phase)
z = 1
p = 9
assumes: 0 < z < p
Python:
import control_systems_ai999x as m
a = m.solve("ctrl_lead_max_phase", z="1", p="9")
print(a.values or (a.value, a.unit))
Browser: open this capability on the model page and press Compute in your browser.
Desired closed-loop poles from overshoot and settling time
zeta from the overshoot, sigma = 4/Ts from the 2 % settling time, wn = sigma/zeta, the poles -sigma +/- j wd and the desired characteristic polynomial.
Command line:
$ control-systems solve ctrl_specs_to_poles OS=0.1630335348 Ts=2
zeta = 0.5
wn = 4 rad/s
sigma = 2
wd = 3.464101615 rad/s
char_poly = [1.0,4.0,15.9999999982]
by: Desired closed-loop poles from overshoot and settling time (zeta from the overshoot formula; sigma = 4/Ts)
OS = 0.1630335348
Ts = 2
assumes: 0 < OS < 100 %; Ts > 0
Python:
import control_systems_ai999x as m
a = m.solve("ctrl_specs_to_poles", OS="0.1630335348", Ts="2")
print(a.values or (a.value, a.unit))
Browser: open this capability on the model page and press Compute in your browser.
Documentation
- Rust user guide — the command line, every capability with a command and what it printed: PDF · Markdown
- Python guide — every capability with a Python example: PDF · Markdown
- Desktop app & command line — downloads, install, ask and search, figures, offline use, checksums: https://www.ai999x.com/desktop-cli/
- Model page — compute in your browser, every capability explained: https://www.ai999x.com/models/control-systems-ai999x/
Highlights
- Verified, not generated. Every answer is computed by a certified control systems capability and checked (substituted back, dimension-checked or compared with an independent computation) before it is returned.
- Zero wrong answers by design. Seven explicit outcomes — SOLVED, NEEDS_INPUT, AMBIGUOUS, INVALID_INPUT, OUT_OF_SCOPE, UNRECOGNIZED_FORMAT, INTERNAL_ERROR — never a silent guess. Every one of its 686 documented answers is reproduced exactly on every tested platform.
- Plain-English questions and a guaranteed typed interface.
ask()reads documented question forms;solve(capability_id, **inputs)always solves a supported task with valid inputs. - Explains itself. Steps, formulas in LaTeX, units, assumptions and the model used, ready for notebooks, tutoring apps and homework checkers.
- Native and in the browser. Every capability also computes natively in Rust: the desktop app and the
control-systemscommand line for Windows and Linux, and WebAssembly on the model page — no Python, no network. - Small and portable. Pure Python (sympy, mpmath); identical answers on Windows and Linux (Python 3.10, 3.11, 3.12, 3.13, 3.14).
- Coverage: transfer functions, time and frequency response, stability margins, root locus, state space, LQR, Kalman filters, discretization and PID tuning.
Model overview
| Property | Value |
|---|---|
| Package | control-systems-ai999x 1.0.0 (import control_systems_ai999x) |
| Type | Deterministic neuro-symbolic control systems engine (rule-based reading + certified symbolic capabilities) |
| Capabilities | 97 certified procedures |
| Knowledge pack | version 1.0.0 |
| Golden answers | 686 documented answers, identical on every tested platform |
| Platforms tested | Windows (Python 3.13), Linux x86-64 (Python 3.10, 3.11, 3.12, 3.13, 3.14) |
| Runtime | CPU only, offline; no GPU, no network, no API key |
| License | Apache-2.0 |
| Creator / engineer | Ibnul Jaif Farabi |
| Organization | AI999X |
Python quick start
pip install control-systems-ai999x
# or straight from this repository:
pip install https://huggingface.co/AI999X/control-systems-ai999x/resolve/main/dist/control_systems_ai999x-1.0.0-py3-none-any.whl
import control_systems_ai999x as control_systems
control_systems.ask("stability margins: num = [10], den = [1, 3, 2, 0]").show()
# -> SOLVED — gm = 0.6, gm_db = -4.43697, w_pc = 1.41421, pm_deg = -12.9972 (ctrl_stability_margins)
control_systems.ask("Routh-Hurwitz: coefficients = [1, 2, 3, 4, 5]").show()
# -> SOLVED — first_column = [1.0, 2.0, 1.0, -6.0, 5.0], rhp_roots = 2, stable = 0 (ctrl_routh_hurwitz)
control_systems.solve("ctrl_percent_overshoot", zeta=0.5).show()
# -> SOLVED — PO = 16.3034, Mp = 0.163034, pole_angle_deg = 60 (ctrl_percent_overshoot)
control_systems.solve("ctrl_lqr", A=[[0, 1], [0, 0]], B=[0, 1], Q=[[1, 0], [0, 1]], R=1).show()
# -> SOLVED — K = [1.0, 1.73205080757], P = [[1.73205080757, 1.0], [1.0, 1.73205080757]], poles = [(-0.866025403784-0.5j), (-0.866025403784+0.5j)] (ctrl_lqr)
control_systems.ask("Tustin discretization: num = [1], den = [1, 1], T = 0.1").show()
# -> SOLVED — numz = [0.047619047619, 0.047619047619], denz = [1.0, -0.904761904762] (ctrl_tustin)
control_systems.ask("Who created you?").message
# -> control-systems-ai999x was created and engineered by Ibnul Jaif Farabi at AI999X.
The Python package also installs a Python command, control-systems-ai999x "<question>"; for the native program use control-systems (above). The outputs above were produced by running this exact code on control-systems-ai999x 1.0.0.
How every answer is verified
- Reading — the question is turned into typed quantities (value, unit, kind, role) and one asked quantity; every stated number must be used or the question is refused.
- Planning — only certified capabilities may answer; a capability applies only under the conditions the wording states (for example a pendulum, a liquid at rest, boiling).
- Computing — exact symbolic or high-precision numeric evaluation.
- Checking — dimensions, substitution back into the defining equation, and agreement between independent readings; any disagreement becomes a refusal, never a number.
Capabilities are certified before they ship: each must reproduce hand-worked reference cases, reject a deliberately wrong variant (a control), and leave every benchmark answer unchanged.
Python worked examples, with their steps
Each question was put to control-systems-ai999x; the answer is the one it returned, with the steps it took.
Gain and phase margins · Stability
stability margins: num = [10], den = [1, 3, 2, 0]
→ gm = 0.6, gm_db = -4.436974992, w_pc = 1.414213562 rad/s, pm_deg = -12.99720802, w_gc = 1.802203305 rad/s
Steps
- Gain and phase margins: num = [10], den = [1, 3, 2, 0] → gm = 0.6, gm_db = -4.436974992, w_pc = 1.414213562 rad/s, pm_deg = -12.99720802, w_gc = 1.802203305 rad/s
Routh-Hurwitz stability test · Stability
Routh-Hurwitz: coefficients = [1, 2, 3, 4, 5]
→ first_column = [1, 2, 1, -6, 5], rhp_roots = 2, stable = False
Steps
- Routh-Hurwitz stability test: coefficients = [1, 2, 3, 4, 5] → first_column = [1, 2, 1, -6, 5], rhp_roots = 2, stable = False
Percent overshoot from the damping ratio · Time response
m.solve("ctrl_percent_overshoot", zeta=0.5)
→ PO = 16.30335348, Mp = 0.1630335348, pole_angle_deg = 60
Steps
- Percent overshoot from the damping ratio: zeta = 0.5 → PO = 16.30335348, Mp = 0.1630335348, pole_angle_deg = 60
Continuous-time LQR gain (Riccati equation) · Optimal control
m.solve("ctrl_lqr", A=[[0, 1], [0, 0]], B=[0, 1], Q=[[1, 0], [0, 1]], R=1)
→ K = [1, 1.732050808], P = [[1.732050808, 1], [1, 1.732050808]], poles = [-0.8660254038-0.5i, -0.8660254038+0.5i]
Steps
- Continuous-time LQR gain (Riccati equation): A = [0 1; 0 0], B = [0, 1], Q = [1 0; 0 1], R = 1 → K = [1, 1.732050808], P = [[1.732050808, 1], [1, 1.732050808]], poles = [-0.8660254038-0.5i, -0.8660254038+0.5i]
Tustin (bilinear) discretization · Discretization
Tustin discretization: num = [1], den = [1, 1], T = 0.1
→ numz = [0.04761904762, 0.04761904762], denz = [1, -0.9047619048]
Steps
- Tustin (bilinear) discretization: num = [1], den = [1, 1], T = 0.1 → numz = [0.04761904762, 0.04761904762], denz = [1, -0.9047619048]
Lag compensator placement · Compensators
lag compensator design: beta = 10, w_c = 1
→ zero = 0.1, pole = 0.01, dc_gain = 10, phase_deg = -5.13765444, magnitude_db = 0.04277946506
Steps
- Lag compensator placement: beta = 10, w_c = 1 → zero = 0.1, pole = 0.01, dc_gain = 10, phase_deg = -5.13765444, magnitude_db = 0.04277946506
Figures
Every point was computed by control-systems-ai999x.
Lag compensator placement
phase_deg (phase added at w_c in degrees (negative)) against beta (required low-frequency gain increase (> 1)), with w_c = 1. 31 points computed by control-systems-ai999x; marked: beta = 10, phase_deg = -5.13765.
Desired closed-loop poles from overshoot and settling time
wn (natural frequency) against OS (maximum overshoot (write 10% or 0.1)), with Ts = 2. 31 points computed by control-systems-ai999x; marked: OS = 0.163034, wn = 4 rad/s.
Percent overshoot from the damping ratio
PO (percent overshoot (%)) against zeta (damping ratio (0 <= zeta < 1)). 31 points computed by control-systems-ai999x; marked: zeta = 0.5, PO = 16.3034.
Mapping an s-plane pole to the z-plane (z = e^{sT})
z_mag (|z| = e^{s_re T}) against s_re (real part of the s-plane pole (1/s)), with T = 0.1, s_im = 0. 31 points computed by control-systems-ai999x; marked: s_re = -2, z_mag = 0.818731.
Capabilities
97 certified procedures. A few of them:
- Procedures: -3 dB bandwidth of a transfer function; Backward Euler (backward difference) discretization; Bandwidth of a standard second-order system; Bode magnitude and phase at one frequency; Closed-loop poles of a PID loop; Closed-loop poles under state feedback u = -K x; Closed-loop transfer function of a feedback loop; Cohen-Coon tuning of a first-order-plus-dead-time process; Continuous Lyapunov equation; Continuous equivalent of a discrete pole (s = ln z / T); Continuous-time LQR gain (Riccati equation); Controllability Gramian; Controllability matrix and rank; Controllable canonical form of a transfer function; DC gain and final value of a discrete transfer function; DC gain and final value of a step response; DC gain of a state-space model; Damping ratio from percent overshoot; Damping ratio from the logarithmic decrement; Deadbeat state feedback (discrete time); Desired closed-loop poles from overshoot and settling time; Discrete Lyapunov equation; Discrete PID in velocity (incremental) form; Discrete-time LQR gain (discrete Riccati equation) …
control_systems_ai999x.templates() lists every question form ask() reads; the capability guide (PDF, every example executed) is included in this repository.
All 97 formulas
Show every formula, by topic
PID tuning / Cohen-Coon
Cohen-Coon tuning of a first-order-plus-dead-time process
PID tuning / SIMC
SIMC (Skogestad) PI tuning
PID tuning / Ziegler-Nichols
Ziegler-Nichols tuning from a plant model
Ziegler-Nichols tuning from the process reaction curve
Ziegler-Nichols tuning from the ultimate gain and period
PID tuning / closed loop
Closed-loop poles of a PID loop
PID tuning / forms
PID: parallel gains to standard form
PID: standard form to parallel gains
PID tuning / pole placement
PI gains placing the closed-loop poles of a first-order plant
Compensators / lag
Lag compensator placement
Compensators / lead
Lead compensator design for a required phase lead
Maximum phase lead of a lead compensator
Design / specifications
Desired closed-loop poles from overshoot and settling time
Discretization / Euler
Backward Euler (backward difference) discretization
Forward Euler (forward difference) discretization
Discretization / FOH
First-order-hold (triangle-hold) discretization
Discretization / Tustin
Tustin (bilinear) discretization
Tustin discretization with frequency prewarping
Discretization / ZOH
Zero-order-hold discretization of a first-order system
Zero-order-hold discretization of a transfer function
Discretization / digital PID
Discrete PID in velocity (incremental) form
Discretization / discrete systems
DC gain and final value of a discrete transfer function
Step response of a discrete transfer function at sample k
Discretization / pole mapping
Continuous equivalent of a discrete pole (s = ln z / T)
Mapping an s-plane pole to the z-plane (z = e^{sT})
Estimation / Kalman filter
One step of a scalar Kalman filter
Steady-state Kalman-Bucy filter gain
Steady-state discrete Kalman filter gain
Steady-state gain of a scalar Kalman filter
Frequency response / Bode
Bode magnitude and phase at one frequency
Frequency response of a first-order lag
Frequency response of a standard second-order system
Frequency response / bandwidth
-3 dB bandwidth of a transfer function
Bandwidth of a standard second-order system
Frequency response / norms
H-infinity norm (peak gain) of a stable transfer function
H2 norm of a stable transfer function
Frequency response / resonance
Resonant peak and resonant frequency
Identification / FOPDT
First-order-plus-dead-time fit by Smith's two-point method
Identification / second order
Damping ratio from the logarithmic decrement
Second-order model from a step response
Modelling / DC motor
Speed transfer function of a DC motor
Optimal control / LQR
Continuous-time LQR gain (Riccati equation)
Discrete-time LQR gain (discrete Riccati equation)
LQR for a first-order system
Root locus / asymptotes
Root-locus asymptotes (centroid and angles)
Root locus / breakaway points
Root-locus breakaway and break-in points
Root locus / departure and arrival angles
Root-locus angle of arrival at a complex zero
Root-locus angle of departure from a complex pole
Root locus / magnitude and angle criteria
Root-locus gain and angle at a test point
Stability / Lyapunov
Continuous Lyapunov equation
Discrete Lyapunov equation
Stability / Nyquist
Nyquist criterion: encirclements of -1
Stability / Routh-Hurwitz
Range of gain for closed-loop stability (Routh, j-omega crossing)
Routh-Hurwitz stability test
Stability / discrete
Jury (Schur-Cohn) stability test for a discrete polynomial
Stability / margins
Gain and phase margins
Stability / poles
Poles and stability of a characteristic polynomial
Stability / robustness
Peak sensitivity Ms and modulus margin
State space / DC gain
DC gain of a state-space model
State space / Gramians
Controllability Gramian
Observability Gramian
State space / controllability
Controllability matrix and rank
State space / conversions
Controllable canonical form of a transfer function
Transfer function of a state-space model
State space / observability
Observability matrix and rank
State space / observers
Observer (estimator) gain by pole placement
State space / pole placement
Deadbeat state feedback (discrete time)
Pole placement by Ackermann's formula
State space / stability
Eigenvalues (poles) of a state matrix
State space / state feedback
Closed-loop poles under state feedback u = -K x
State space / time response
State response to an initial state and a constant input
State-transition matrix e^{At}
Steady-state error
System type, static error constant and steady-state error
Time delay / Pade
Pade approximation of a time delay
Time response / closed loop
Proportional control of a first-order plant
Time response / dead time
Step response of a first-order-plus-dead-time process
Time response / final and initial values
Final value theorem
Initial value theorem (value and slope at t = 0+)
Time response / first order
Step response of a first-order system
Time and frequency specifications of a first-order system
Time response / general
Step response of a transfer function at a given time
Time response / second order
Damping ratio from percent overshoot
Exact settling time of a second-order step response
Mass-spring-damper natural frequency and damping ratio
Natural frequency and damping ratio of a second-order denominator
Peak time of a second-order step response
Percent overshoot from the damping ratio
Rise time of an underdamped second-order system
Second-order specifications from the pole location
Settling time of a second-order system (rule and envelope)
Step response of a standard second-order system
Transfer functions / DC gain
DC gain and final value of a step response
Transfer functions / block diagrams
Closed-loop transfer function of a feedback loop
Parallel connection of two transfer functions
Series (cascade) connection of two transfer functions
Transfer functions / evaluation
Value of a transfer function at a complex point
Transfer functions / poles and zeros
Poles, zeros and gain of a transfer function
Out of scope
- Open-ended explanation, essay writing or tutoring dialogue: it is a solver, not a chatbot.
- Questions outside its certified control systems capabilities, and any question whose stated numbers it cannot all use — it refuses with the reason instead.
- High-stakes engineering, medical or legal decisions without independent review.
Limitations
- It answers what its certified capabilities cover (transfer functions, time and frequency response, stability margins, root locus, state space, LQR, Kalman filters, discretization and PID tuning); anything else is refused with a reason.
ask()reads documented question forms and common phrasings; unusual wording may be refused — usesolve()for guaranteed results.- Results are as correct as the certified relations and their stated conditions; a certified relation is a checked model, not a claim about every physical situation.
Citation
@software{control_systems_ai999x_1_0_0,
title = {control-systems-ai999x: an offline, verified control systems solver},
author = {Farabi, Ibnul Jaif}, organization = {AI999X},
year = {2026}, version = {1.0.0},
url = {https://huggingface.co/AI999X/control-systems-ai999x}
}
Contact
Questions, bug reports and requests: open a discussion on https://huggingface.co/AI999X/control-systems-ai999x/discussions or visit https://ai999x.com.
Support the project
control-systems-ai999x is free and open source. If it helps you, you can support further development on Buy Me a Coffee.
Created and engineered by Ibnul Jaif Farabi · AI999X · ai999x.com
- Downloads last month
- -
Evaluation results
- identical on every platform on Golden answers (686 documented questions, Windows + Linux Python 3.10-3.14)self-reported1.000