harold.staircase¶
-
harold.
staircase
(A, B, C, compute_T=False, form='c', invert=False, block_indices=False)¶ Given a state model data A, B, C, Returns the so-called staircase form State realization to assess the controllability/observability properties.
If observer-form is requested, internally the system is pertransposed and same controllable-form machinery is applied.
Parameters: - A ((n, n) array_like) – State array
- B ((n, m) array_like) – Input array
- C ((p, n) array_like) – Output array
- form (str, optional) – Determines whether the controller- or observer-staircase form will be computed via “c” or “o” values.
- invert (bool, optional) – If True, the full rank part of B/C matrix will be compressed to lower/right part of the array. Naturally, this also effects the A matrix blocks to appear as lower/upper triangular block matrix.
Returns: Ah ((n, n) ndarray) – Resulting State array
Bh ((n, m) ndarray) – Resulting Input array
Ch ((p, n) ndarray) – Resulting Output array
T ((n, n) ndarray) –
The transformation matrix such that
[ T⁻¹AT | T⁻¹B ] [ Ah | Bh ] [-------|------] = [----|----] [ CT | ] [ Ch | ]
Notes
For controllability and observability, the existence of zero subdiagonal blocks can be checked in a numerically stable fashion, as opposed to forming the Kalman matrices and checking the rank. For certain matrices, A^n computations can introduce large errors (for some A that have entries with varying order of magnitudes). But it is also prone to numerical rank identification.