Canonical state-space realization
Convert State-Space Model to Companion Canonical Form
aircraftPitchSSModel.mat contains the state-space matrices of an aircraft where the input is elevator deflection angle and the output is the aircraft pitch angle .
Load the model data to the workspace and create the state-space model
load('aircraftPitchSSModel.mat'); sys = ss(A,B,C,D)
sys = A = x1 x2 x3 x1 -0.313 56.7 0 x2 -0.0139 -0.426 0 x3 0 56.7 0 B = u1 x1 0.232 x2 0.0203 x3 0 C = x1 x2 x3 y1 0 0 1 D = u1 y1 0 Continuous-time state-space model.
Convert the resultant state-space model
sys to companion canonical form.
csys = canon(sys,'companion')
csys = A = x1 x2 x3 x1 0 0 -1.709e-16 x2 1 0 -0.9215 x3 0 1 -0.739 B = u1 x1 1 x2 0 x3 0 C = x1 x2 x3 y1 0 1.151 -0.6732 D = u1 y1 0 Continuous-time state-space model.
csys is the companion canonical form of
Convert State-Space Model to Modal Canonical Form
pendulumCartSSModel.mat contains the state-space model of an inverted pendulum on a cart where the outputs are the cart displacement
x and the pendulum angle . The control input
u is the horizontal force on the cart.
First, load the state-space model
sys to the workspace.
sys to modal canonical form and extract the transformation matrix.
[csys,T] = canon(sys,'modal')
csys = A = x1 x2 x3 x4 x1 0 0 0 0 x2 0 -0.05 0 0 x3 0 0 -5.503 0 x4 0 0 0 5.453 B = u1 x1 1.875 x2 6.298 x3 12.8 x4 12.05 C = x1 x2 x3 x4 y1 16 -4.763 -0.003696 0.003652 y2 0 0.003969 -0.03663 0.03685 D = u1 y1 0 y2 0 Continuous-time state-space model.
T = 4×4 0.0625 1.2500 -0.0000 -0.1250 0 4.1986 0.0210 -0.4199 0 0.2285 -13.5873 2.4693 0 -0.2251 13.6287 2.4995
csys is the modal canonical form of
T represents the transformation between the state vectors of
Convert Zero-Pole-Gain Model to Modal Canonical Form
For this example, consider the following system with doubled poles and clusters of close poles:
zpk model of this system and convert it to modal canonical form using the string
sys = zpk([1 -1],[0 -10 -10.0001 1+1i 1-1i 1+1i 1-1i],100); csys1 = canon(sys,'modal'); csys1.A
ans = 7×7 0 0 0 0 0 0 0 0 1.0000 2.1220 0 0 0 0 0 -0.4713 1.0000 1.5296 0 0 0 0 0 0 1.0000 1.8439 0 0 0 0 0 -0.5423 1.0000 0 0 0 0 0 0 0 -10.0000 4.0571 0 0 0 0 0 0 -10.0001
ans = 7×1 0.1600 -0.0052 0.0201 -0.0975 0.2884 0 4.0095
sys has a pair of poles at
-10.0001, and two complex poles of multiplicity 2 at
1-i. As a result, the modal form
csys1 is a state-space model with a block of size 2 for the two poles near
-10, and a block of size 4 for the complex eigenvalues.
Now, separate the two poles near
-10 by increasing the value of the condition number of the block-diagonalizing transformation. Use a value of
1e10 for this example.
csys2 = canon(sys,'modal',1e10); csys2.A
ans = 7×7 0 0 0 0 0 0 0 0 1.0000 2.1220 0 0 0 0 0 -0.4713 1.0000 1.5296 0 0 0 0 0 0 1.0000 1.8439 0 0 0 0 0 -0.5423 1.0000 0 0 0 0 0 0 0 -10.0000 0 0 0 0 0 0 0 -10.0001
format shortE csys2.B
ans = 7×1 1.6000e-01 -5.1885e-03 2.0117e-02 -9.7508e-02 2.8844e-01 1.6267e+05 1.6267e+05
A matrix of
csys2 includes separate diagonal elements for the poles near
-10. Increasing the condition number results in some very large values in the
Convert System to Companion Canonical Form
icEngine.mat contains one data set with 1500 input-output samples collected at the a sampling rate of 0.04 seconds. The input
u(t) is the voltage (V) controlling the By-Pass Idle Air Valve (BPAV), and the output
y(t) is the engine speed (RPM/100).
Use the data in
icEngine.mat to create a state-space model with identifiable parameters.
load icEngine.mat z = iddata(y,u,0.04); sys = n4sid(z,4,'InputDelay',2);
Convert the identified state-space model
sys to companion canonical form.
csys = canon(sys,'companion');
Obtain the covariance of the resulting form by running a zero-iteration update to model parameters.
opt = ssestOptions; opt.SearchOptions.MaxIterations = 0; csys = ssest(z,csys,opt);
Compare frequency response confidence bounds of
h = bodeplot(sys,csys,'r.'); showConfidence(h)
The frequency response confidence bounds are identical.
sys — Dynamic system
dynamic system model
Dynamic system, specified as a SISO, or MIMO dynamic system model. Dynamic systems that you can use include:
The resulting canonical state-space model assumes
current values of the tunable components for tunable control design blocks.
nominal model values for uncertain control design blocks.
Identified LTI models, such as
idtf(System Identification Toolbox),
idss(System Identification Toolbox),
idproc(System Identification Toolbox),
idpoly(System Identification Toolbox), and
idgrey(System Identification Toolbox) models. (Using identified models requires System Identification Toolbox™ software.)
You cannot use frequency-response data models such as
type — Transformation type
'modal' (default) |
Transformation type, specified as either
type is unspecified, then
canon converts the specified dynamic system model to modal
canonical form by default.
The companion canonical form is the same as the observable canonical form. For information on controllable and observable canonical forms, see Canonical State-Space Realizations.
In modal form, A is a block-diagonal matrix. The block size is typically 1-by-1 for real eigenvalues and 2-by-2 for complex eigenvalues. However, if there are repeated eigenvalues or clusters of nearby eigenvalues, the block size can be larger.
For example, for a system with eigenvalues , the modal A matrix is of the form
In the companion realization, the characteristic polynomial of the system appears explicitly in the rightmost column of the A matrix. For a system with characteristic polynomial
the corresponding companion A matrix is
The companion transformation requires that the system is controllable from the first input. The transformation to companion form is based on the controllability matrix which is almost always numerically singular for mid-range orders. Hence, avoid using it when possible.
The companion canonical form is the same as the observable canonical form. For more information on observable and controllable canonical forms, see Canonical State-Space Realizations.
condt — Upper bound on the condition number of the block-diagonalizing transformation
1e4 (default) | positive scalar
Upper bound on the condition number of the block-diagonalizing transformation,
specified as a positive scalar. This argument is available only when
type is set to
condt to reduce the size of the eigenvalue clusters in
the A matrix of
Inf diagonalizes matrix A.
T — Transformation matrix
You cannot use frequency-response data models to convert to canonical state-space form.
The companion form is poorly conditioned for most state-space computations, that is, the transformation to companion form is based on the controllability matrix which is almost always numerically singular for mid-range orders. Hence, avoid using it when possible.
The reduction to companion form uses a state similarity transformation based on the controllability matrix .
 Kailath, T. Linear Systems, Prentice-Hall, 1980.
Version HistoryIntroduced before R2006a
R2022a: Default value of
condt input argument changed
Behavior changed in R2022a
The default value of
condt input argument is now
1e4. Previously, the default value was
condt reduces the size of the eigenvalue clusters in the
transformed model but also decreases the accuracy of the transformation. The new default
value balances conditioning and transformation accuracy. If you have code that relies on the
default value of
1e8, update your code to
explicitly set this input argument.
uss (Robust Control Toolbox) |
idtf (System Identification Toolbox) |
idss (System Identification Toolbox) |
idproc (System Identification Toolbox) |
idpoly (System Identification Toolbox) |
idgrey (System Identification Toolbox)