types.control_classical.ControllabilityInfo

types.control_classical.ControllabilityInfo()

Controllability analysis result.

A system (A, B) is controllable if all states can be driven to any desired value in finite time using appropriate control inputs.

Controllability Test: - Rank of controllability matrix C = [B AB A²B … Aⁿ⁻¹B] equals nx

Fields

controllability_matrix : ControllabilityMatrix C = [B, AB, A²B, …, Aⁿ⁻¹B] of shape (nx, nx*nu) rank : int Rank of controllability matrix is_controllable : bool True if rank == nx (full rank) uncontrollable_modes : Optional[np.ndarray] Eigenvalues of uncontrollable subsystem (if any)

Examples

>>> A = np.array([[0, 1], [-2, -3]])
>>> B = np.array([[0], [1]])
>>>
>>> info: ControllabilityInfo = analyze_controllability(A, B)
>>> print(info['is_controllable'])  # True
>>> print(info['rank'])  # 2
>>> print(info['controllability_matrix'].shape)  # (2, 2)
>>>
>>> # Uncontrollable system
>>> B_bad = np.array([[1], [1]])  # Both states affected equally
>>> A_diag = np.array([[1, 0], [0, 2]])
>>> info: ControllabilityInfo = analyze_controllability(A_diag, B_bad)
>>> print(info['is_controllable'])  # False
>>> print(info['uncontrollable_modes'])  # Some eigenvalues