({{, (RefLink[ControllabilityMatrix, paclet:ref/ControllabilityMatrix])[ssm] 
gives the controllability matrix of the state-space model ssm.}})

OpenersNotesSection(Spacer1)Details

For a standard state-space model with state equations:

The controllability matrix is computed as (({{b, a.b, (a^2).b, …, (a^(n-1)).b}})), where n is the dimension of a.

For a descriptor state-space model with state equations:

The slow and fast subsystems can be decoupled as described in (RefLink[KroneckerModelDecomposition, paclet:ref/KroneckerModelDecomposition]):

(RefLink[ControllabilityMatrix, paclet:ref/ControllabilityMatrix]) returns a pair of matrices {(Subscript[q, 1]),(Subscript[q, 2])}, based on the decoupled slow and fast subsystems. The matrices (Subscript[q, 1]) and (Subscript[q, 2]) are defined as follows, where (Subscript[n, 1]) is the dimension of (Subscript[a, 1]), and h is the nilpotency index of (Subscript[e, 2]).

The controllability matrices only exist for descriptor systems in which (RefLink[Det, paclet:ref/Det])[λ e-a]≠0 for some λ.

OpenersPrimaryExamplesSection(Spacer1)Examples  (15)

OpenersExampleSection0(Spacer1)Basic Examples  (2)

The controllability matrix of a state-space model:

ControllabilityMatrix[(StateSpaceModelFull[(Subscript[a, 1]), 0, 0, (Subscript[b, 1]), 0, (Subscript[a, 2]), 0, (Subscript[b, 2]), 0, 0, (Subscript[a, 3]), (Subscript[b, 3]), (Subscript[c, 1]), (Subscript[c, 2]), (Subscript[c, 3]), (Subscript[d, 1]), , , ])]//MatrixForm

The controllability multi-input state-space model:

ControllabilityMatrix[(StateSpaceModelFull[-1, 1, 0, 1, 0, 0, -1, 1, 1, 0, 0, 0, -1, 0, 1, 1, 0, 0, 0, 0, , , ])]//MatrixForm

OpenersExampleSection1(Spacer1)Scope  (5)

The controllability matrix of a symbolic single-input system:

ControllabilityMatrix[(StateSpaceModelFull[(Subscript[a, 1]), (Subscript[a, 2]), (Subscript[b, 1]), (Subscript[a, 3]), (Subscript[a, 4]), (Subscript[b, 2]), (Subscript[c, 1]), (Subscript[c, 2]), 0, , , ])]//MatrixForm

The controllability matrix of a two-input system has twice as many columns:

ControllabilityMatrix[(StateSpaceModelFull[(Subscript[a, 1]), (Subscript[a, 2]), (Subscript[b, 1]), 0, (Subscript[a, 3]), (Subscript[a, 4]), 0, (Subscript[b, 2]), (Subscript[c, 1]), (Subscript[c, 2]), 0, 0, , , ])]//MatrixForm

The controllability matrix of an uncontrollable single-input system:

ControllabilityMatrix[(StateSpaceModelFull[(Subscript[λ, 1]), 0, 0, (Subscript[b, 1]), 0, (Subscript[λ, 2]), 0, (Subscript[b, 2]), 0, 0, (Subscript[λ, 3]), 0, , , ])]//MatrixForm

The controllability matrix of a diagonal multiple-input system:

ControllabilityMatrix[(StateSpaceModelFull[(Subscript[λ, 1]), 0, 0, (Subscript[b, 1]), 0, 0, 0, (Subscript[λ, 2]), 0, 0, (Subscript[b, 2]), 0, 0, 0, (Subscript[λ, 3]), 0, 0, (Subscript[b, 3]), , , ])]//MatrixForm

The controllability matrix of a third-order system:

ControllabilityMatrix[(StateSpaceModelFull[1, 1, 1, 0, -2, 1, 1, 1, 0, 1, 2, 1, 1, 0, 0, 0, , , ])]//MatrixForm

A singular descriptor system returns two matrices:

cm=ControllabilityMatrix[(StateSpaceModelFull[0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -5, 1, -1, 17, -139, 803, 4096, 0, , , ])];

MatrixForm/@cm

OpenersExampleSection4(Spacer1)Properties & Relations  (8)

The computation depends only on the state and input matrices:

ControllabilityMatrix[(StateSpaceModelFull[a[1,1], a[1,2], b[1,1], a[2,1], a[2,2], b[2,1], , , ])]//MatrixForm

A system is controllable if and only if its controllability matrix has full rank:

ssm=(StateSpaceModelFull[1, -1, 1, 1, -2, 1, 3, -1, 0, 2, 1, 1, , , ]);

MatrixRank[ControllabilityMatrix[ssm]]
ControllableModelQ[ssm]

This system is not controllable, but is output-controllable:

ssm=(StateSpaceModelFull[-3, 1, 0, 1, -5, 0, 1, 2, -3, 0, 0, 3, 1, 0, 0, 0, , , ]);

MatrixRank[ControllabilityMatrix[ssm]]
ControllableModelQ[ssm]

OutputControllableModelQ[ssm]

This system is controllable, but is not output-controllable:

ssm=(StateSpaceModelFull[-2.5`, -1, -0.5`, 1.`, -0.5`, -2.`, 0.5`, 1.`, 0.5`, 1.`, -1.5`, -3.`, 1, 0, -1, 0, -1, 1, 0, 0, 3, -2, -1, 0, , , ]);

MatrixRank[ControllabilityMatrix[ssm]]
ControllableModelQ[ssm]

OutputControllableModelQ[ssm]

The controllability matrix of a discrete-time system does not depend on the sampling period:

ControllabilityMatrix[(StateSpaceModelFull[1, 1, 1, 0, -2, 1, 1, 1, 0, 1, 2, 1, 1, 0, 0, 0, T, , ])]//MatrixForm

For descriptor systems, the slow and fast system matrices need to be full rank for controllability:

ssm=(StateSpaceModelFull[1, 0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, , , ]);

{qs,qf}=ControllabilityMatrix[ssm]

ControllableModelQ[ssm]

Controllability of the slow subsystem is determined by the first matrix:

ControllableModelQ[{ssm,"Slow"}]
MatrixRank[qs]===Length[qs]

For nonsingular descriptor systems, the fast system matrix is empty:

ControllabilityMatrix[(StateSpaceModelFull[e, a, b, c, d, , , ])]

Each matrix is associated with a subsystem from the Kronecker decomposition:

ssm=(StateSpaceModelFull[-1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1, 1, 1, -1, 0, 0, 1, 0, 0, , , ]);
kssm=Last[KroneckerModelDecomposition[ssm]]

The controllability matrices match those for the original system:

slowssm=SystemsModelExtract[kssm,All,All,{1,2}];
fastssm=SystemsModelExtract[kssm,All,All,{3,4}];

Simplify[ControllabilityMatrix/@{slowssm, fastssm}]
Simplify[ControllabilityMatrix[ssm]]

({{DocumentationFooterIconsRelatedFunction.png, ({{See Also}, {(RefLink[StateSpaceModel, paclet:ref/StateSpaceModel])  ▪  (RefLink[ControllableModelQ, paclet:ref/ControllableModelQ])  ▪  (RefLink[OutputControllableModelQ, paclet:ref/OutputControllableModelQ])  ▪  (RefLink[OutputControllabilityMatrix, paclet:ref/OutputControllabilityMatrix])  ▪  (RefLink[ControllabilityGramian, paclet:ref/ControllabilityGramian])  ▪  (RefLink[ObservabilityMatrix, paclet:ref/ObservabilityMatrix])}})}})

({{DocumentationFooterIconsRelatedGuide.png, ({{Related Guides}, {▪(RefLinkPlain[Control Systems, paclet:guide/ControlSystems])}, {▪(RefLinkPlain[Analysis of State-Space Models, paclet:guide/AnalysisOfStateSpaceModels])}, {▪(RefLinkPlain[Descriptor Control Systems, paclet:guide/DescriptorControlSystems])}})}})