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

OpenersNotesSection(Spacer1)Details

The state-space model ssm can be a standard or descriptor (RefLink[StateSpaceModel, paclet:ref/StateSpaceModel]).

The original and dual systems for a standard (RefLink[StateSpaceModel, paclet:ref/StateSpaceModel])[{a,b,c,d}]:

The original and dual systems for a descriptor (RefLink[StateSpaceModel, paclet:ref/StateSpaceModel])[{a,b,c,d,e}]:

OpenersPrimaryExamplesSection(Spacer1)Examples  (8)

OpenersExampleSection0(Spacer1)Basic Examples  (1)

The dual of a system:

DualSystemsModel[(StateSpaceModelFull[0, 1, 1, (Subscript[a, 1]), (Subscript[a, 2]), -1, 1, 0, 0, 1, 1, 0, , , ])]

OpenersExampleSection1(Spacer1)Scope  (3)

A dual model:

DualSystemsModel[(StateSpaceModelFull[-2, 0, 1, -3, -4, -1, 0.5`, 1.5`, 0, , , ])]

All variables are considered as complex:

dualssm=DualSystemsModel[(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, , , ])]

Simplify, assuming all variables are real:

Simplify[dualssm,{(Subscript[a, 1]),(Subscript[a, 2]),(Subscript[a, 3]),(Subscript[a, 4]),(Subscript[b, 1]),(Subscript[b, 2]),(Subscript[c, 1]),(Subscript[c, 2])}∈Reals]

Specify only some variables to be real:

Simplify[dualssm,{(Subscript[b, 1]),(Subscript[b, 2]),(Subscript[c, 1]),(Subscript[c, 2])}∈Reals]

The dual of a descriptor system:

DualSystemsModel[(StateSpaceModelFull[0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, -(1/2), 1, -1, 1, (9/16), 0, 1, , ])]

OpenersExampleSection2(Spacer1)Properties & Relations  (4)

The controllable and observable realizations have a dual relationship:

m={{((s+(Subscript[z, 11]))/(s+(Subscript[p, 11]))),((s+(Subscript[z, 12]))/(s+(Subscript[p, 12])))},{((s+(Subscript[z, 21]))/(s+(Subscript[p, 21]))),((s+(Subscript[z, 22]))/(s+(Subscript[p, 22])))}};

(Subscript[ssm, 1])=StateSpaceModel[TransferFunctionModel[m,s],StateSpaceRealization->"Controllable"];

(Subscript[ssm, 2])=Simplify[DualSystemsModel@StateSpaceModel[TransferFunctionModel[m//Transpose,s],StateSpaceRealization->"Observable"],Element[{(Subscript[p, 11]),(Subscript[p, 12]),(Subscript[p, 21]),(Subscript[p, 22]),(Subscript[z, 11]),(Subscript[z, 12]),(Subscript[z, 21]),(Subscript[z, 22])},Reals]];

{(Subscript[ssm, 1]),(Subscript[ssm, 2])}

Normal[(Subscript[ssm, 1])]===Expand[Normal[(Subscript[ssm, 2])]]

A similar relationship exists between the controllable companion and observable companion forms:

(Subscript[ssm, 1])=StateSpaceModel[TransferFunctionModel[m,s],StateSpaceRealization->"ControllableCompanion"];

(Subscript[ssm, 2])=Simplify[DualSystemsModel@StateSpaceModel[TransferFunctionModel[m//Transpose,s],StateSpaceRealization->"ObservableCompanion"],Element[{(Subscript[p, 11]),(Subscript[p, 12]),(Subscript[p, 21]),(Subscript[p, 22]),(Subscript[z, 11]),(Subscript[z, 12]),(Subscript[z, 21]),(Subscript[z, 22])},Reals]];

Expand[Normal[(Subscript[ssm, 1])]]===Expand[Normal[(Subscript[ssm, 2])]]

An uncontrollable but observable model:

ssm=(StateSpaceModelFull[-1, 0, 0, 1, 0, -3, 1, 3, 0, 0, -3, 0, 1, 1, 0, 0, , , ]);
Through@{ControllableModelQ,ObservableModelQ}@ssm

The dual model is controllable but not observable:

With[{dualssm=DualSystemsModel[ssm]},Through@{ControllableModelQ,ObservableModelQ}@dualssm]

The controllability matrix of a system is the conjugate transpose of the observability matrix of the dual system and vice versa:

ssm=(StateSpaceModelFull[a[1,1], a[1,2], b[1,1], a[2,1], a[2,2], b[2,1], c[1,1], c[1,2], 0, , , ]);
dualssm=DualSystemsModel[ssm];

ControllabilityMatrix[ssm]==ObservabilityMatrix[dualssm]\[ConjugateTranspose]

ObservabilityMatrix[ssm]==ControllabilityMatrix[dualssm]\[ConjugateTranspose]

The estimator gains are the conjugate transpose of feedback gains of the dual model and vice versa:

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

{StateFeedbackGains[ssm,{-2,-3,-4}],ConjugateTranspose[EstimatorGains[DualSystemsModel[ssm],{-2,-3,-4}]]}

{EstimatorGains[ssm,{-2,-3,-4}], ConjugateTranspose[StateFeedbackGains[DualSystemsModel[ssm],{-2,-3,-4}]]}

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

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