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 |