AgentSkillsCN

slicot-control

当用户咨询 Slicot 程序、控制理论函数、LQR 设计、Riccati 求解器、卡尔曼滤波、系统辨识等技术细节,或需要为控制系统任务寻找合适的 Slicot 程序时,应优先使用此技能。

SKILL.md
--- frontmatter
name: slicot-control
description: This skill should be used when the user asks about SLICOT routines, control theory functions, LQR design, Riccati solvers, Kalman filtering, system identification, or needs to find the right SLICOT routine for a control systems task.

SLICOT Control Theory Library

C11 translation of SLICOT (Subroutine Library In COntrol Theory) with Python bindings.

Naming Convention

Routines follow XX##YY pattern:

  • XX - 2-letter category prefix (AB, SB, MB, etc.)
  • ## - 2-digit subcategory number
  • YY - variant suffix (MD=real, MZ=complex, ND=multi-input, etc.)

Looking Up Routine Details

To get detailed documentation for any SLICOT routine, use Python's help function:

python
import slicot
help(slicot.sb02md)  # Full docstring with params, returns, examples

Category Quick Reference

PrefixDomainKey Functions
ABAnalysisControllability, observability, zeros, model reduction
AGAnalysis (Generalized)Descriptor system analysis
SBSynthesisRiccati, Lyapunov, pole placement, H-inf, LQR/LQG
SGSynthesis (Generalized)Descriptor Riccati, Lyapunov
MBMatrixQR, SVD, eigenvalues, Hessenberg, Schur
MCMatrix ConstructionPolynomial operations
MAMatrix AuxiliaryHelper matrix operations
MDMatrix DecompositionAdvanced decompositions
TBTransform (State-space)Similarity, minimal realization, balancing
TCTransform (Polynomial)Coprime factorization, TF↔SS
TDTransform (Data)Transfer function manipulation
TFTransform (Frequency)Frequency response
TGTransform (Descriptor)Descriptor systems, staircase forms
IBIdentificationMOESP, N4SID subspace methods
NFNonlinear FilterNonlinear estimation
FBFilterKalman filtering
FDFilter DesignIIR/digital filter design
DEData ExchangeFFT, data conversion
BB, BD, DF, DG, DKUtilityBasic ops, block diagonal, validation
UD, UEUtilityTriangular, update/extract

Task-to-Routine Lookup

Controller Design

TaskRoutineDescription
LQR (continuous)sb02mdSolve continuous ARE for optimal gain
LQR (discrete)sb02mdSolve discrete ARE (DICO='D')
LQGsb02md + fb01qdARE + Kalman filter
Pole placementsb01bdMulti-input eigenvalue assignment
Eigenstructuresb01ddEigenvector assignment
H-infinitysb10adContinuous H-inf controller
H-infinity (discrete)sb10ddDiscrete H-inf controller
Deadbeatsb06ndFinite settling time

System Analysis

TaskRoutineDescription
Controllabilityab01ndMulti-input controllable realization
Observabilityab01odStaircase form reduction
System zerosab08ndTransmission zeros
Stability checkab09jxStable/antistable decomposition
H-infinity normab13mdCompute ‖G‖∞
H2 normab13bdCompute ‖G‖₂
Hankel normab13adCompute Hankel singular values

Model Reduction

TaskRoutineDescription
Balanced truncationab09adHankel-norm approximation
Balanced stochasticab09bdStochastic balancing
Frequency-weightedab09cdWeighted balanced reduction
Singular perturbationab09mdFrequency-weighted SPA
Coprime factorizationab09fdNormalized coprime factors
Hankel MDAab09hdHankel minimum degree

Matrix Equations

EquationRoutineDescription
Riccati (ARE)sb02mdA'X + XA - XGX + Q = 0
Lyapunovsb03mdA'X + XA + Q = 0
Sylvestersb04mdAX + XB = C
Generalized Lyapunovsg03adA'XE + E'XA + Q = 0

System Transformation

TaskRoutineDescription
Continuous ↔ Discreteab04mdBilinear transformation
State-space ↔ Transfertb04adSS to transfer function
Minimal realizationtb01pdRemove uncontrollable/unobservable

System Identification

TaskRoutineDescription
Order estimationib01adMOESP/N4SID preprocessing
Matrix estimationib01bdA, B, C, D from data
Kalman gainib01bdWith JOBCK='K'

Common Patterns

Array Order

All arrays use Fortran column-major order:

python
import numpy as np
A = np.array([[1, 2], [3, 4]], dtype=float, order='F')

In-Place Array Modification Warning

IMPORTANT: SLICOT functions may modify input arrays in-place. Always pass copies if you need to preserve originals:

python
# BAD - A, B, C, D may be corrupted after call
A_d, B_d, C_d, D_d, info = ab04md('C', A, B, C, D, alpha=1.0, beta=2.0/dt)

# GOOD - originals preserved
A_d, B_d, C_d, D_d, info = ab04md('C', A.copy(), B.copy(), C.copy(), D.copy(), alpha=1.0, beta=2.0/dt)

This applies to most SLICOT routines including ab04md, sb02md, tb05ad, etc.

Info Codes

  • info = 0 → Success
  • info < 0 → Parameter -info is invalid
  • info > 0 → Algorithm-specific warning/error

DICO Parameter

  • 'C' → Continuous-time system
  • 'D' → Discrete-time system

JOB Parameter

  • 'A' → All computations
  • 'B' → B-related only
  • 'C' → C-related only
  • 'N' → None/minimal

UPLO Parameter (Symmetric Matrices)

  • 'U' → Upper triangle stored
  • 'L' → Lower triangle stored

Type Aliases

TypeSizeFortran Equivalent
i3232-bit intINTEGER
i6464-bit intINTEGER*8
f6464-bit floatDOUBLE PRECISION
c128128-bit complexCOMPLEX*16

Subcategory Numbers

Common patterns in the 2-digit number:

  • 01-03 → Realization, reduction, canonical forms
  • 04-05 → Transformation, interconnection
  • 06-07 → Feedback, inverse
  • 08 → Zeros, poles analysis
  • 09 → Model reduction
  • 10 → H-infinity, robust control
  • 13 → Norms (H2, H-inf, Hankel)

Example: Finding the Right Routine

Task: Design LQR for continuous system with state Q and input R weights

  1. Need Riccati solver → SB prefix (synthesis)
  2. Algebraic equation → sb02 subcategory
  3. Real matrices → MD suffix
  4. Answer: sb02md with DICO='C'

Task: Identify system from I/O data

  1. System identification → IB prefix
  2. Subspace method → ib01 subcategory
  3. First call ib01ad (preprocessing + order)
  4. Then call ib01bd (matrix estimation)

Resources

  • Routine Details: Use help(slicot.routine_name) in Python to get full docstring with parameters, return values, and examples
  • Tests: tests/python/test_*.py (usage examples)

See references/ for detailed category info, workflows, and quick reference tables.