controllable = StateSpace.Analysis.isControllable(ss, method)
Function StateSpace.Analysis.isControllable checks the controllability of a state space system. Therefore, the system is transformed into staircase form, i.e. the system matrix H of the transformed system has block upper Hessenberg form:
| H11 H12 H13 ⋯ H1k | | H21 H22 H23 ⋯ H2k | | 0 H32 H33 ⋯ H3k | H = | ⋮ ⋱ ⋱ ⋱ ⋮ | | 0 ⋯ 0 Hk,k-1 Hkk |
where, if Hk,k-1 has full rank, indicating whether the system is controllable or not.
For single input systems the staircase form is a usual upper Hessenberg form, i.e. the blocks are of dimension one.
The boolean input method defines for multi output systems the method to generate the staircase form of the system, whereas Types.StaircaseMethod.QR and Types.StaircaseMethod.SVD denotes QR-factorization and singular value decomposition respectively. Since staircase algorithm contains rank decisions QR-factorization should be restricted to well conditioned systems of lower order (<5). Default is SVD.
Since controllability is dual to observability of the dual system (A', C', B', D'), proof of observability is referred to proof of controllability of the dual system.
Modelica_LinearSystems2.StateSpace ss=Modelica_LinearSystems2.StateSpace( A=[-1, 1, 1;0, -1, 1;0,0,-1], B=[0;0;1], C=[0,1,0], D=[0]); Types.Method method=Modelica_LinearSystems2.Utilities.Types.StaircaseMethod.SVD; Boolean controllable; algorithm controllable := Modelica_LinearSystems2.StateSpace.Analysis.isControllable(ss, method); // controllable = true
encapsulated function isControllable import Modelica_LinearSystems2; import Modelica_LinearSystems2.StateSpace; input StateSpace ss "State space system"; input Modelica_LinearSystems2.Utilities.Types.StaircaseMethod method = Modelica_LinearSystems2.Utilities.Types.StaircaseMethod.SVD "Staircase algorithm method"; output Boolean controllable "= true, if system is controllable"; end isControllable;
Date | Author | Comment |
---|---|---|
2010-05-31 | Marcus Baur, DLR-RM | Realization |