Fork me on GitHub

Control systems and DAE solvers, in pure Go.
Planned: nothing is released yet.

go-control is the organisation the go-scikit plan names for what MATLAB's Control System Toolbox, Simulink's solvers, Mathematica's control systems and Maple's MapleSim offer: LTI models and their responses, Riccati and LQR design, a DAE solver, and later symbolic acausal modelling. It is wave 3 of the plan; no library and no code exist yet.

planned wave 34 packages in the plan0 releases
status
state    planned (wave 3)
library  none yet
plan     github.com/go-scikit/roadmap
         PLAN.md, STATUS.md
4 planned packages โ€” no library released: see the plan's status
What it will cover

Control, validated against the reference tools.

Every item starts from the roadmap's bibliography, is validated against the tool that is the reference in its domain, and lands with tests at 100% coverage and a performance table: no slower than the reference on one core.

โ‡„

LTI models

Transfer-function, zero-pole-gain, state-space and frequency-response models, with series, parallel and feedback, poles and zeros.

๐Ÿ“ˆ

Responses and margins

Time and frequency responses, and stability margins.

โš™๏ธ

Design

Riccati and Lyapunov equations, LQR and LQG, Kalman gain, pole placement and discretisation.

โˆ‚

DAE solver

An IDA-type variable-order BDF solver with consistent initial conditions and events.

๐Ÿงฉ

Acausal modelling

MapleSim-style equation assembly with Pantelides index reduction, after the DAE solver and go-symbolic (wave 4).

๐Ÿ”—

Needs linear algebra

Real Schur form with reordering, QZ and expm, which go-ndarray's linalg does not have yet.

๐Ÿ“ฆ

Pure Go, CGO=0

On every architecture the fleet's CI tests. GPL oracles such as Octave's control package are compared against, never ported.

โš–๏ธ

BSD-3-Clause

Every repository of the organization.

What will be checked

3 kinds of check, each against a reference.

These are the measures the plan holds the work to. None has been run: there is no code yet.

Riccati and Lyapunov

Relative residual below 1e3ยทnยทeps, a symmetric solution to one ulp and closed-loop poles in the left half-plane, over the SLICOT benchmark collections.

Frequency response and `expm`

Complex relative error per point against python-control, and norm-wise error of expm and c2d against a high-precision reference.

DAE

Final-time error against the Bari test set at a stated tolerance, constraint drift, steps, Newton iterations and event times to 1e-10.

Planned packages

What will be here.

The names are provisional. None of these repositories exists yet.

lti

planned (wave 3)

Transfer-function, zero-pole-gain, state-space and frequency-response models; series, parallel and feedback; poles, zeros, time and frequency responses and stability margins. Validated against python-control and SciPy.

design

planned (wave 3)

Riccati and Lyapunov equations, LQR and LQG, Kalman gain, pole placement and discretisation (c2d). Validated against SLICOT's routines and benchmark collections.

dae

planned (wave 3)

An IDA-type variable-order BDF solver for differential-algebraic equations, with consistent initial conditions and events. Validated against the Bari IVP test set and SUNDIALS IDA. Its placement relative to go-numerics/integrate is still open.

model

planned (wave 4)

MapleSim-style symbolic acausal modelling: equation assembly, Pantelides index reduction, block ordering and emission of Go through go-symbolic's codegen. Validated on Modelica Standard Library examples.

Repositories

What is here.

docs

site

The documentation (Hugo + Hextra): the scope of the organisation, the plan and one page per planned package. Source โ†’

brand

assets

Logos and icons for the organization, in SVG / PNG / JPG / ICO / ICNS across colour, white and black variants.

Control for Go.

go-control is planned, wave 3 of the go-scikit roadmap. The plan says what it will cover and in what order, and its status says where each item stands. The documentation repeats the scope and the references.

Read the source on GitHub โ†’