This function is to calculate whether a SISO state space system is observable or not. Therefore, the dual System (A', c', b', d') it is transformed to upper observer Hessenberg form
| * * ... ... * | | * | | * * ... ... * | | . | Q*A'*Q' = H = | 0 * ... ... * |, Q*c' = | . |, b'*Q = q = ( 0, ..., 0, * ) | . . . . . | | * | | 0 ... 0 * * | | * |
Note, that
rank(c'; c'*A'; ...; c'*A'(n-1)) = rank(q; q*H; ...; q*H(n-1))
and that
(q; H*q; ...; q*H(n-1))
is a lower triangular matrix and has full rank if and only if none of the elements in the diagonal is zero. That is, that neither qn or hi,i-1, i = 2,..., n may be zero.
encapsulated function isObservableSISO import Modelica_LinearSystems2; import Modelica_LinearSystems2.StateSpace; input StateSpace ss "State space system"; output Boolean observable; end isObservableSISO;