gives the controllability matrix of the state-space model ssm.
ControllabilityMatrix
gives the controllability matrix of the state-space model ssm.
Details
- For a standard state-space model with state equations:
-

continuous-time system 
discrete-time system - The controllability matrix is computed as
, where
is the dimension of
. - For a descriptor state-space model with state equations:
-

continuous-time system 
discrete-time system - The slow and fast subsystems can be decoupled as described in KroneckerModelDecomposition:
-

slow subsystem 
fast subsystem - ControllabilityMatrix returns a pair of matrices {q1,q2}, based on the decoupled slow and fast subsystems. The matrices q1 and q2 are defined as follows, where
is the dimension of
, and
is the nilpotency index of
. -

slow subsystem 
fast subsystem - The controllability matrices only exist for descriptor systems in which Det[λ e-a]≠0 for some λ.
Examples
open all close allBasic Examples (2)
The controllability matrix of a state-space model:
ControllabilityMatrix[StateSpaceModel[{{{Subscript[a, 1], 0, 0}, {0, Subscript[a, 2], 0},
{0, 0, Subscript[a, 3]}}, {{Subscript[b, 1]},
{Subscript[b, 2]}, {Subscript[b, 3]}},
{{Subscript[c, 1], Subscript[c, 2], Subscript[c, 3]}},
{{Subscript[d, 1]}}}, SamplingPeriod -> None, SystemsModelLabels -> None]]//MatrixFormThe controllability multi-input state-space model:
ControllabilityMatrix[StateSpaceModel[{{{-1, 1, 0}, {0, -1, 1}, {0, 0, -1}}, {{1, 0}, {1, 0}, {0, 1}}, {{1, 0, 0}},
{{0, 0}}}, SamplingPeriod -> None, SystemsModelLabels -> None]]//MatrixFormScope (5)
The controllability matrix of a symbolic single-input system:
ControllabilityMatrix[StateSpaceModel[{{{Subscript[a, 1], Subscript[a, 2]},
{Subscript[a, 3], Subscript[a, 4]}},
{{Subscript[b, 1]}, {Subscript[b, 2]}},
{{Subscript[c, 1], Subscript[c, 2]}}, {{0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None]]//MatrixFormThe controllability matrix of a two-input system has twice as many columns:
ControllabilityMatrix[StateSpaceModel[{{{Subscript[a, 1], Subscript[a, 2]},
{Subscript[a, 3], Subscript[a, 4]}},
{{Subscript[b, 1], 0}, {0, Subscript[b, 2]}},
{{Subscript[c, 1], Subscript[c, 2]}}, {{0, 0}}},
SamplingPeriod -> None, SystemsModelLabels -> None]]//MatrixFormThe controllability matrix of an uncontrollable single-input system:
ControllabilityMatrix[StateSpaceModel[{{{Subscript[λ, 1], 0, 0}, {0, Subscript[λ, 2], 0},
{0, 0, Subscript[λ, 3]}}, {{Subscript[b, 1]},
{Subscript[b, 2]}, {0}}}, SamplingPeriod -> None, SystemsModelLabels -> None]]//MatrixFormThe controllability matrix of a diagonal multiple-input system:
ControllabilityMatrix[StateSpaceModel[{{{Subscript[λ, 1], 0, 0}, {0, Subscript[λ, 2], 0},
{0, 0, Subscript[λ, 3]}}, {{Subscript[b, 1], 0, 0},
{0, Subscript[b, 2], 0}, {0, 0, Subscript[b, 3]}}},
SamplingPeriod -> None, SystemsModelLabels -> None]]//MatrixFormThe controllability matrix of a third-order system:
ControllabilityMatrix[StateSpaceModel[{{{1, 1, 1}, {-2, 1, 1}, {0, 1, 2}}, {{0}, {1}, {1}}, {{1, 0, 0}}, {{0}}},
SamplingPeriod -> None, SystemsModelLabels -> None]]//MatrixFormA singular descriptor system returns two matrices:
cm = ControllabilityMatrix[StateSpaceModel[{{{1, 0, 0, 0, 0}, {0, 1, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 1, 0},
{0, 0, 0, 0, -5}}, {{0}, {0}, {0}, {1}, {1}}, {{-1, 17, -139, 803, 4096}}, {{0}},
{{0, 1, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 1, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 1}}},
SamplingPeriod -> None, SystemsModelLabels -> None]];MatrixForm /@ cmProperties & Relations (8)
The computation depends only on the state and input matrices:
ControllabilityMatrix[StateSpaceModel[{{{a[1, 1], a[1, 2]},
{a[2, 1], a[2, 2]}}, {{b[1, 1]},
{b[2, 1]}}}, SamplingPeriod -> None, SystemsModelLabels -> None]]//MatrixFormA system is controllable if and only if its controllability matrix has full rank:
ssm = StateSpaceModel[{{{1, -1, 1}, {-2, 1, 3}, {0, 2, 1}}, {{1}, {-1}, {1}}}, SamplingPeriod -> None,
SystemsModelLabels -> None];MatrixRank[ControllabilityMatrix[ssm]]
ControllableModelQ[ssm]This system is not controllable, but is output-controllable:
ssm = StateSpaceModel[{{{-3, 1, 0}, {-5, 0, 1}, {-3, 0, 0}}, {{1}, {2}, {3}}, {{1, 0, 0}}, {{0}}},
SamplingPeriod -> None, SystemsModelLabels -> None]MatrixRank[ControllabilityMatrix[ssm]]
ControllableModelQ[ssm]OutputControllableModelQ[ssm]This system is controllable, but is not output-controllable:
ssm = StateSpaceModel[{{{-2.5, -1, -0.5}, {-0.5, -2., 0.5}, {0.5, 1., -1.5}}, {{1.}, {1.}, {-3.}},
{{1, 0, -1}, {-1, 1, 0}, {3, -2, -1}}, {{0}, {0}, {0}}}, SamplingPeriod -> None,
SystemsModelLabels -> None];MatrixRank[ControllabilityMatrix[ssm]]
ControllableModelQ[ssm]OutputControllableModelQ[ssm]The controllability matrix of a discrete-time system does not depend on the sampling period:
ControllabilityMatrix[StateSpaceModel[{{{1, 1, 1}, {-2, 1, 1}, {0, 1, 2}}, {{0}, {1}, {1}}, {{1, 0, 0}}, {{0}}},
SamplingPeriod -> τ, SystemsModelLabels -> None]]//MatrixFormFor descriptor systems, the slow and fast system matrices need to be full rank for controllability:
ssm = StateSpaceModel[{{{-1, 0, 0}, {0, 1, 0}, {0, 0, 1}}, {{1}, {2}, {0}}, {{1, 1, 1}}, {{0}},
{{1, 0, 0}, {0, 0, 1}, {0, 0, 0}}}, SamplingPeriod -> None, SystemsModelLabels -> None]{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[StateSpaceModel[{{{a}}, {{b}}, {{c}}, {{d}},
{{e}}}, SamplingPeriod -> None, SystemsModelLabels -> None]]Each matrix is associated with a subsystem from the Kronecker decomposition:
ssm = StateSpaceModel[{{{0, -1, 0, 0}, {-1, 0, 0, 0}, {10, 0, 0, -1}, {0, 1, 1, 1}},
{{0}, {0}, {0}, {-1}}, {{0, 0, 1, 0}}, {{0}}, {{-1, 0, 0, 0}, {0, 0, -1, 0}, {0, 0, 0, 0},
{0, 0, 0, 0}}}, SamplingPeriod -> None, SystemsModelLabels -> None];
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]]Related Guides
Text
Wolfram Research (2010), ControllabilityMatrix, Wolfram Language function, https://reference.wolfram.com/language/ref/ControllabilityMatrix.html (updated 2012).
CMS
Wolfram Language. 2010. "ControllabilityMatrix." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2012. https://reference.wolfram.com/language/ref/ControllabilityMatrix.html.
APA
Wolfram Language. (2010). ControllabilityMatrix. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/ControllabilityMatrix.html
BibTeX
@misc{reference.wolfram_2026_controllabilitymatrix, author="Wolfram Research", title="{ControllabilityMatrix}", year="2012", howpublished="\url{https://reference.wolfram.com/language/ref/ControllabilityMatrix.html}", note=[Accessed: 13-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_controllabilitymatrix, organization={Wolfram Research}, title={ControllabilityMatrix}, year={2012}, url={https://reference.wolfram.com/language/ref/ControllabilityMatrix.html}, note=[Accessed: 13-June-2026]}