This function checks whether a SISO state space system is stabilizable or not.
A system is stabilizable for the continuous-time case if all of the uncontrollable eigenvalues have negative real part or for the discrete-time case if all of the uncontrollable eigenvalues are in the complex unit circle respectively. Hence, a controllable system is always stabilizable of course.
To check stabilizability, the system is transformed to upper controller Hessenberg form
| * * ... ... * | | * | | * * ... ... * | | 0 | Q*A*Q ' = H = | 0 * ... ... * |, Q*b = q = | . |, c*Q = ( *, ..., * ) | . . . . . | | . | | 0 ... 0 * * | | 0 |
The system can be partitioned to
H=[H11,H12; H21, H22], q=[q1;0],
where the pair (H11, q1) contains the controllable part of the system, that is, rank(H) = rank(H11). For stabilizability the H22 has to be stable.
encapsulated function isStabilizableSISO import Modelica; import Complex; import Modelica_LinearSystems2; import Modelica_LinearSystems2.StateSpace; input StateSpace ss "State space system"; output Boolean stabilizable; end isStabilizableSISO;