Papers
Topics
Authors
Recent
Search
2000 character limit reached

dkpy: Robust Control for LTI Systems

Updated 5 July 2026
  • dkpy is an open-source Python package for robust control of LTI systems with structured uncertainties using μ-analysis and DK-iteration.
  • It integrates uncertainty characterization from frequency-response data and generalized-plant construction to support iterative robust controller synthesis.
  • The package leverages modular abstractions with interfaces like python-control and SLICOT, enabling scalable robust analysis and dynamic D-scale fitting.

Searching arXiv for the specified paper and closely related robust-control references. arxiv_search.query({"6search_query6 arxiv_search.query({"6search_query6 Robust Control with Structured Uncertainty in Python\"","6start6 dkpy is an open-source Python package for the analysis and synthesis of robust controllers for linear time-invariant (LTI) systems subject to structured uncertainty. Its core functionality is built around PRESERVED_PLACEHOLDER_6search_query6-analysis (structured singular-value analysis) and PRESERVED_PLACEHOLDER_6id:(Adams et al., 17 Nov 2025)6-synthesis (DK-iteration) to assess robust stability and performance, and to design controllers that guarantee stability and performance across all admissible perturbations. It also provides tools to characterize unstructured uncertainty from frequency-response data of perturbed plant models (multi-model uncertainty characterization). The package is presented in "dkpy: Robust Control with Structured Uncertainty in Python" (&&&6search_query6&&&).

Models used for control design are, to some degree, uncertain. Model uncertainty must be accounted for to ensure the robustness of the closed-loop system. In this setting, PRESERVED_PLACEHOLDER_6start6-analysis and PRESERVED_PLACEHOLDER_6max_results6-synthesis methods allow for the analysis and design of controllers subject to structured uncertainties. These tools can also be applied to robust performance problems, because such problems are fundamentally robust control problems with structured uncertainty (&&&6search_query6&&&).

The package addresses LTI systems with structured uncertainty and provides two main capabilities. First, it supports robust controller analysis and synthesis through PRESERVED_PLACEHOLDER_6search_query6-analysis and DK-iteration. Second, it offers tools for model uncertainty characterization using data from a set of perturbed systems. The open-source project is available at https://github.com/decargroup/dkpy.

A plausible implication is that dkpy is intended to support a workflow in which uncertainty characterization, generalized-plant construction, robust analysis, and robust synthesis are performed within a single Python environment. That implication follows from the coexistence of uncertainty-weight fitting, structured singular-value computation, and DK-iteration in the same package.

6start6. Mathematical framework for structured uncertainty

In many multi-input multi-output systems, uncertainties arise in specific subsystems, such as actuator dynamics or sensor gains, and can be modeled by a block-diagonal perturbation PRESERVED_PLACEHOLDER_6all:\6^ in which each block is either a repeated scalar uncertainty δiI\delta_i I or a full complex block Δj\Delta_j (&&&6search_query6&&&). The uncertainty structure is defined as

Δω={diag⁡({δiIri},{Δj})∣δi∈C,Δj∈Cmj×mj},\Delta_\omega = \{ \operatorname{diag}(\{\delta_i I_{r_i}\}, \{\Delta_j\}) \mid \delta_i\in\mathbb{C}, \Delta_j\in\mathbb{C}^{m_j\times m_j} \},

and the set of admissible perturbation systems is

Γ={Δ(s)∈RH∞∣∥Δ(s)∥∞≤1 and Δ(jω)∈Δω ∀ ω}.\Gamma = \{ \Delta(s)\in RH_\infty \mid \|\Delta(s)\|_\infty\le 1 \text{ and } \Delta(j\omega)\in\Delta_\omega \ \forall\ \omega \}.

Given a complex matrix PRESERVED_PLACEHOLDER_6id:(Adams et al., 17 Nov 2025)6search_query6^ and uncertainty structure PRESERVED_PLACEHOLDER_6id:(Adams et al., 17 Nov 2025)6id:(Adams et al., 17 Nov 2025)6, the structured singular value is

PRESERVED_PLACEHOLDER_6id:(Adams et al., 17 Nov 2025)6start6^

for which no closed form exists. In practice, one uses the upper bound

PRESERVED_PLACEHOLDER_6id:(Adams et al., 17 Nov 2025)6max_results6^

where

PRESERVED_PLACEHOLDER_6id:(Adams et al., 17 Nov 2025)6search_query6^

and PRESERVED_PLACEHOLDER_6id:(Adams et al., 17 Nov 2025)6all:\6^ denotes the maximum singular value.

For a feedback interconnection PRESERVED_PLACEHOLDER_6id:(Adams et al., 17 Nov 2025)66, robust stability holds if and only if

PRESERVED_PLACEHOLDER_6id:(Adams et al., 17 Nov 2025)67

This framework makes the package specifically aligned with structured uncertainty descriptions based on block-diagonal perturbations rather than generic unstructured robustness margins.

The package implements PRESERVED_PLACEHOLDER_6start6search_query6-analysis through computation of an upper bound on the structured singular value together with the associated scaling. This is the analysis step used to assess robust stability and robust performance over a frequency grid.

For controller design, the relevant optimization problem is the non-convex problem

PRESERVED_PLACEHOLDER_6start6id:(Adams et al., 17 Nov 2025)6^

dkpy approaches this through DK-iteration, which alternates between controller synthesis and scaling computation. The procedure is described as follows (&&&6search_query6&&&):

6id:(Adams et al., 17 Nov 2025)6. initialize PRESERVED_PLACEHOLDER_6start6start6^ 6start6. PRESERVED_PLACEHOLDER_6start6max_results6^ 6max_results6. compute PRESERVED_PLACEHOLDER_6start6search_query6^ and PRESERVED_PLACEHOLDER_6start6all:\6^ at grid PRESERVED_PLACEHOLDER_6start66^ 6search_query6. fit PRESERVED_PLACEHOLDER_6start67 to PRESERVED_PLACEHOLDER_6start68 6all:\6. repeat until PRESERVED_PLACEHOLDER_6start69 or max iterations reached

The significance of this organization is practical rather than purely formal. The synthesis step uses an PRESERVED_PLACEHOLDER_6max_results6search_query6^ controller design routine for fixed scaling, while the analysis step updates the frequency-dependent scale and the fitted dynamic PRESERVED_PLACEHOLDER_6max_results6id:(Adams et al., 17 Nov 2025)6. This suggests that dkpy is designed for iterative workflows in which analysis and synthesis are tightly coupled but implemented by separable software components.

6search_query6. Software architecture and implementation

dkpy is built on python-control and slycot. Its modular architecture is centered on abstract base classes (ABCs) and their implementations. The main abstractions cover controller synthesis, structured singular-value computation, dynamic PRESERVED_PLACEHOLDER_6max_results6start6-scale fitting, and DK-iteration composition (&&&6search_query6&&&).

ABC Role Implementations
ControllerSynthesis abstract synthesize method HinfSynSlicot, HinfSynLmi, HinfSynLmiBisection
StructuredSingularValue abstract compute_ssv method SsvLmiBisection
DScaleFit abstract fit method DScaleFitSlicot
DkIteration composes synthesis, SSV, and D-fit DkIterFixedOrder, DkIterListOrder, DkIterAutoOrder, DkIterInteractiveOrder

The concrete synthesis implementations are differentiated by algorithmic backend. HinfSynSlicot uses SLICOT SB^^^^6id:([2511.13927](/papers/2511.13927))6search_query6^^^^AD for PRESERVED_PLACEHOLDER_6max_results6max_results6^ synthesis; HinfSynLmi is an LMI-based PRESERVED_PLACEHOLDER_6max_results6search_query6^ synthesis method; and HinfSynLmiBisection uses an LMI formulation with bisection on PRESERVED_PLACEHOLDER_6max_results6all:\6. For structured singular-value computation, SsvLmiBisection uses an LMI formulation with bisection to compute PRESERVED_PLACEHOLDER_6max_results66^ and scaling PRESERVED_PLACEHOLDER_6max_results67. For scale fitting, DScaleFitSlicot uses SLICOT SB^^^^6id:([2511.13927](/papers/2511.13927))6search_query6^^^^YD to fit stable minimum-phase PRESERVED_PLACEHOLDER_6max_results68 to a given PRESERVED_PLACEHOLDER_6max_results69.

The DK-iteration layer is compositional: a DkIteration object contains one ControllerSynthesis, one StructuredSingularValue, and one DScaleFit. Its subclasses vary only in how they choose the order of the PRESERVED_PLACEHOLDER_6search_query6search_query6^ fit over iterations. This separation of concerns indicates a design in which synthesis, analysis, and rational fitting can be replaced independently within a common iteration structure.

6all:\6. Uncertainty characterization and usage patterns

In addition to structured robust analysis and synthesis, dkpy provides high-level functions for multi-model uncertainty characterization from frequency-response data of perturbed plant models. The three functions are:

  • compute_uncertainty_residual_response
  • compute_uncertainty_weight_response
  • fit_uncertainty_weight

The first function can, for example, solve PRESERVED_PLACEHOLDER_6search_query6id:(Adams et al., 17 Nov 2025)6. The second uses an LMI to get optimal PRESERVED_PLACEHOLDER_6search_query6start6. The third uses a log-Chebyshev method to fit stable, minimum-phase PRESERVED_PLACEHOLDER_6search_query6max_results6^ (&&&6search_query6&&&).

The installation paths are:

δiI\delta_i I6max_results6^

or

δiI\delta_i I6search_query6^

A basic PRESERVED_PLACEHOLDER_6search_query6search_query6-analysis example is given in the following form:

δiI\delta_i I6all:\6^

A basic DK-iteration example is given as:

δiI\delta_i I6

These examples show that the expected workflow is explicit: define the uncertainty structure, construct either the loop interconnection or the generalized plant, compute PRESERVED_PLACEHOLDER_6search_query6all:\6^ for analysis or invoke DK-iteration for synthesis, and inspect the peak upper bound.

6. Reported applications, domains, and current limitations

Two example applications are described in the package documentation associated with the paper. The first is multi-model uncertainty characterization for an actuator bundle. The sequence is: load nominal PRESERVED_PLACEHOLDER_6search_query66^ and off-nominal PRESERVED_PLACEHOLDER_6search_query67 data; compute PRESERVED_PLACEHOLDER_6search_query68 for each PRESERVED_PLACEHOLDER_6search_query69; compute PRESERVED_PLACEHOLDER_6all:\6search_query6; and fit PRESERVED_PLACEHOLDER_6all:\6id:(Adams et al., 17 Nov 2025)6. This yields multiplicative input weights PRESERVED_PLACEHOLDER_6all:\6start6^ and PRESERVED_PLACEHOLDER_6all:\6max_results6^ for the generalized plant (&&&6search_query6&&&).

The second example is robust controller synthesis for lateral aircraft dynamics. The steps are: build PRESERVED_PLACEHOLDER_6all:\6search_query6^ with aerodynamic model, actuator model PRESERVED_PLACEHOLDER_6all:\6all:\6, PRESERVED_PLACEHOLDER_6all:\66, and performance weights; use DkIterListOrder with 6max_results6^ iterations and 6search_query6th-order PRESERVED_PLACEHOLDER_6all:\67 fits; obtain a result in which PRESERVED_PLACEHOLDER_6all:\68 reduces below PRESERVED_PLACEHOLDER_6all:\69; and simulate step responses across 6search_query6search_query6^ sampled δiI\delta_i I6search_query6. The reported outcome is good tracking and limited performance degradation observed.

The domains listed for application are aerospace flight control, automotive chassis control, power electronics, process control, and robotics—anywhere structured uncertainty modeling reduces conservatism. This suggests that the package is intended for settings in which uncertainty has a meaningful subsystem structure and where preserving that structure is preferable to collapsing it into a single unstructured bound.

The paper also states current limitations. In version v^^^^6search_query6^^^^.^^^^6id:([2511.13927](/papers/2511.13927))6^^^^.9, dkpy supports only complex block-diagonal uncertainty and LTI perturbations, unstructured multi-model characterization for additive or multiplicative uncertainty, and uses a fixed set of solver algorithms (SLICOT, MOSEK). Planned enhancements include support for real-parametric uncertainty (real δiI\delta_i I6id:(Adams et al., 17 Nov 2025)6), mixed complex-real block structures, alternative scaling and δiI\delta_i I6start6-analysis methods such as DK-pole shifting, integration of time-delay uncertainty, improved auto-scheduling of fit orders and grid refinement, and expanded examples and tutorials in robotics and power systems. With its open architecture, dkpy invites the community to contribute new synthesis routines, structured uncertainty classes, and improved characterizations within a fully Pythonic, open-source ecosystem (&&&6search_query6&&&).

Definition Search Book Streamline Icon: https://streamlinehq.com
References (1)

Topic to Video (Beta)

No one has generated a video about this topic yet.

Whiteboard

No one has generated a whiteboard explanation for this topic yet.

Follow Topic

Get notified by email when new papers are published related to dkpy.