types.control_classical.ObservabilityInfo

types.control_classical.ObservabilityInfo()

Observability analysis result.

A system (A, C) is observable if the initial state can be determined from output measurements over a finite time interval.

Observability Test: - Rank of observability matrix O = [C; CA; CA²; …; CAⁿ⁻¹] equals nx

Fields

observability_matrix : ObservabilityMatrix O = [C; CA; CA²; …; CAⁿ⁻¹] of shape (nx*ny, nx) rank : int Rank of observability matrix is_observable : bool True if rank == nx (full rank) unobservable_modes : Optional[np.ndarray] Eigenvalues of unobservable subsystem (if any)

Examples

>>> A = np.array([[0, 1], [-2, -3]])
>>> C = np.array([[1, 0]])  # Measure position only
>>>
>>> info: ObservabilityInfo = analyze_observability(A, C)
>>> print(info['is_observable'])  # True
>>> print(info['rank'])  # 2
>>> print(info['observability_matrix'].shape)  # (2, 2)
>>>
>>> # Unobservable system
>>> C_bad = np.array([[1, 1]])  # Can't distinguish states
>>> A_diag = np.array([[1, 0], [0, 2]])
>>> info: ObservabilityInfo = analyze_observability(A_diag, C_bad)
>>> print(info['is_observable'])  # False