({{, (RefLink[JordanModelDecomposition, paclet:ref/JordanModelDecomposition])[ssm] 
yields the Jordan decomposition of the state-space model ssm. }})

OpenersNotesSection(Spacer1)Details

The result is a list {p,jc}, where p is a similarity matrix, and jc is the Jordan canonical form of ssm.

The state-space model ssm can be given as (RefLink[StateSpaceModel, paclet:ref/StateSpaceModel])[{a,b,c,d}], where a, b, c, and d represent the state, input, output, and transmission matrices in either a continuous-time or a discrete-time system:

The transformation x==p.z, where z is the new state vector, and p is a similarity matrix that spans the linearly independent eigenvectors of a, transforms the system into the Jordan canonical form:

The new state matrix (Inverse[p]).a.p is the Jordan canonical form of the old state matrix a.

OpenersPrimaryExamplesSection(Spacer1)Examples  (11)

OpenersExampleSection0(Spacer1)Basic Examples  (1)

Compute the Jordan decomposition of a state-space model:

JordanModelDecomposition[(StateSpaceModelFull[0, 0, -4, -1, 1, -2, -2, 0, -1, 0, 4, 0, 0, 0, 1, 0, , , ])]

OpenersExampleSection1(Spacer1)Scope  (4)

The Jordan decomposition of a second-order system:

JordanModelDecomposition[(StateSpaceModelFull[-1, 0, 1, 3, 2, -1, 1, 0, 0, , , ])]

The Jordan decomposition of a discrete-time system:

JordanModelDecomposition[(StateSpaceModelFull[0.1625`, -0.1125`, 0.5`, 0.1125`, 0.5375`, -0.5`, 2, -2, 0, 0.5`, , ])]

A transformation that gives the complex poles in second-order blocks:

Chop[JordanModelDecomposition[StateSpaceModel[(TransferFunctionModelFull[(3/((-0.2`+z) (1+z+(z^2)))), 0.1`, , ])]]]

Repeated poles appear in Jordan blocks:

JordanModelDecomposition[StateSpaceModel[(TransferFunctionModelFull[(10/((((1+s))^3) (5+s))), , , ])]]

OpenersExampleSection3(Spacer1)Applications  (2)

A system is controllable if and only if the Jordan blocks of (p^(-1)).a.p have distinct eigenvalues, and the row of (p^(-1)).b corresponding to the last row of each Jordan block is not zero:

lssm={(StateSpaceModelFull[-1, 0, 1, 0, -2, -1, , , ]),(StateSpaceModelFull[-1, 1, 0, 0, 1, 0, 0, 0, -1, 1, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, -2, 0, -1, 0, , , ]),(StateSpaceModelFull[-1, 1, 0, 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0, 0, -2, 0, -1, 0, , , ])};

Table[ControllableModelQ[ssm],{ssm,lssm}]

A system is observable if and only if the Jordan blocks of (p^(-1)).a.p have distinct eigenvalues, and the column of c.p corresponding to the first row of each Jordan block is not zero:

lssm={(StateSpaceModelFull[-1, 0, 1, 0, -2, -1, 2, -2, 0, , , ]),(StateSpaceModelFull[-1, 1, 0, 0, 1, 0, -1, 1, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, -2, -1, 0, 1, 1, 1, 0, , , ]),(StateSpaceModelFull[-1, 1, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, -2, 0, 1, 0, 0, 1, 0, , , ])};

Table[ObservableModelQ[ssm],{ssm,lssm}]

OpenersExampleSection4(Spacer1)Properties & Relations  (3)

In the Jordan canonical form, the eigenvalues are along the diagonal of the state matrix:

m=(({{-1, 0, 0}, {0, -2, 0}, {0, 0, -3}}));

p=(({{0, 1, 0}, {-1, 0, -1}, {1, -1, 0}}));

JordanModelDecomposition[StateSpaceModel[{Inverse[p].m.p,(({{0, 0}, {(Subscript[b, 1]), 0}, {0, (Subscript[b, 2])}})),(({{(Subscript[c, 1]), 0, 0}, {0, 0, (Subscript[c, 3])}})),(({{(Subscript[d, 11]), (Subscript[d, 12])}, {(Subscript[d, 21]), (Subscript[d, 22])}}))}]]//Last

The Jordan canonical form is related to the original system via the similarity transform:

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

{p,jc}=N[JordanModelDecomposition[ssm]];

{jc,StateSpaceTransform[ssm,p]//Chop}

{ssm,StateSpaceTransform[jc,Inverse@p]//Chop}

The Jordan canonical form of a state-space model is the similarity transformation associated with the Jordan decomposition of its state matrix:

ssm=(StateSpaceModelFull[-7, 0.5`, 5, 1, -4, -1, 4, -1, -2, 0.5`, 0, 1, 1, -1, -1, 0, , , ]);

{p,jc}=JordanDecomposition@First@Normal@ssm

{Last@JordanModelDecomposition[ssm],StateSpaceTransform[ssm,p]}//Chop

OpenersExampleSection5(Spacer1)Possible Issues  (1)

(RefLink[JordanModelDecomposition, paclet:ref/JordanModelDecomposition]) does not support descriptor systems.

JordanModelDecomposition[(StateSpaceModelFull[3, -3, -1, -1, 1, 0, 2, -2, 0, 0, 0, 0, 0, 3, -3, -1, -1, 1, 0, 0, 0, 0, 2, -1, 0, 1, 0, -3, 3, 0, -1, 15, -15, 0, 5, 1, 1383, -1481, -16, 403, 0, , , ])]

Use (RefLink[KroneckerModelDecomposition, paclet:ref/KroneckerModelDecomposition]) to separate the modes of the system.

KroneckerModelDecomposition[(StateSpaceModelFull[3, -3, -1, -1, 1, 0, 2, -2, 0, 0, 0, 0, 0, 3, -3, -1, -1, 1, 0, 0, 0, 0, 2, -1, 0, 1, 0, -3, 3, 0, -1, 15, -15, 0, 5, 1, 1383, -1481, -16, 403, 0, , , ])]

({{DocumentationFooterIconsRelatedFunction.png, ({{See Also}, {(RefLink[StateSpaceTransform, paclet:ref/StateSpaceTransform])  ▪  (RefLink[ControllableDecomposition, paclet:ref/ControllableDecomposition])  ▪  (RefLink[ObservableDecomposition, paclet:ref/ObservableDecomposition])  ▪  (RefLink[InternallyBalancedDecomposition, paclet:ref/InternallyBalancedDecomposition])  ▪  (RefLink[StateSpaceModel, paclet:ref/StateSpaceModel])  ▪  (RefLink[JordanDecomposition, paclet:ref/JordanDecomposition])  ▪  (RefLink[KroneckerModelDecomposition, paclet:ref/KroneckerModelDecomposition])}})}})

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