Main Content

You create a MIMO state-space model in the same way as you create
a SISO state-space
model. The only difference between the SISO and MIMO cases
is the dimensions of the state-space matrices. The dimensions of the *B*, *C*,
and *D* matrices increase with the numbers of inputs
and outputs as shown in the following illustration.

In this example, you create a state-space model for a rotating
body with inertia tensor *J*, damping force *F*,
and three axes of rotation, related as:

$$\begin{array}{c}J\frac{d\omega}{dt}+F\omega =T\\ y=\omega .\end{array}$$

The system input *T* is the driving torque.
The output *y* is the vector of angular velocities
of the rotating body.

To express this system in state-space form:

$$\begin{array}{c}\frac{dx}{dt}=Ax+Bu\\ y=Cx+Du\end{array}$$

rewrite it as:

$$\begin{array}{c}\frac{d\omega}{dt}=-{J}^{-1}F\omega +{J}^{-1}T\\ y=\omega .\end{array}$$

Then the state-space matrices are:

$$A=-{J}^{-1}F,\text{\hspace{1em}}B={J}^{-1},\text{\hspace{1em}}C=I,\text{\hspace{1em}}D=0.$$

To create this model, enter the following commands:

J = [8 -3 -3; -3 8 -3; -3 -3 8]; F = 0.2*eye(3); A = -J\F; B = inv(J); C = eye(3); D = 0; sys_mimo = ss(A,B,C,D);

These commands assume that *J* is the inertia
tensor of a cube rotating about its corner, and the damping force
has magnitude 0.2.

`sys_mimo`

is an `ss`

model.

This example shows how to create a continuous-time descriptor
(implicit) state-space model using `dss`

.

This example uses the same rotating-body system shown in MIMO Explicit State-Space Models, where
you inverted the inertia matrix *J* to obtain the
value of the *B* matrix. If *J* is
poorly-conditioned for inversion, you can instead use a descriptor
(implicit) state-space model. A *descriptor (implicit) state-space
model* is of the form:

$$\begin{array}{c}E\frac{dx}{dt}=Ax+Bu\\ y=Cx+Du\end{array}$$

Create a state-space model for a rotating body with inertia
tensor *J*, damping force *F*, and
three axes of rotation, related as:

$$\begin{array}{c}J\frac{d\omega}{dt}+F\omega =T\\ y=\omega .\end{array}$$

The system input *T* is the driving torque.
The output *y* is the vector of angular velocities
of the rotating body. You can write this system as a descriptor state-space
model having the following state-space matrices:

$$A=-F,\text{\hspace{1em}}B=I,\text{\hspace{1em}}C=I,\text{\hspace{1em}}D=0,\text{\hspace{1em}}E=J.$$

To create this system, enter:

J = [8 -3 -3; -3 8 -3; -3 -3 8]; F = 0.2*eye(3); A = -F; B = eye(3); C = eye(3); D = 0; E = J; sys_mimo = dss(A,B,C,D,E)

These commands assume that *J* is the inertia
tensor of a cube rotating about its corner, and the damping force
has magnitude 0.2.

`sys`

is an `ss`

model
with a nonempty *E* matrix.

This example shows how to build a MIMO model of a jet transport. Because the development of a physical model for a jet aircraft is lengthy, only the state-space equations are presented here. See any standard text in aviation for a more complete discussion of the physics behind aircraft flight.

The jet model during cruise flight at MACH = 0.8 and H = 40,000 ft. is

A = [-0.0558 -0.9968 0.0802 0.0415 0.5980 -0.1150 -0.0318 0 -3.0500 0.3880 -0.4650 0 0 0.0805 1.0000 0]; B = [ 0.0073 0 -0.4750 0.0077 0.1530 0.1430 0 0]; C = [0 1 0 0 0 0 0 1]; D = [0 0 0 0];

Use the following commands to specify this state-space model as an LTI object and attach names to the states, inputs, and outputs.

states = {'beta' 'yaw' 'roll' 'phi'}; inputs = {'rudder' 'aileron'}; outputs = {'yaw rate' 'bank angle'}; sys_mimo = ss(A,B,C,D,'statename',states,... 'inputname',inputs,... 'outputname',outputs);

You can display the LTI model by typing `sys_mimo`

.

sys_mimo

a = beta yaw roll phi beta -0.0558 -0.9968 0.0802 0.0415 yaw 0.598 -0.115 -0.0318 0 roll -3.05 0.388 -0.465 0 phi 0 0.0805 1 0 b = rudder aileron beta 0.0073 0 yaw -0.475 0.0077 roll 0.153 0.143 phi 0 0 c = beta yaw roll phi yaw rate 0 1 0 0 bank angle 0 0 0 1 d = rudder aileron yaw rate 0 0 bank angle 0 0 Continuous-time model.

The model has two inputs and two outputs. The units are radians
for `beta`

(sideslip angle) and `phi`

(bank
angle) and radians/sec for `yaw`

(yaw rate) and `roll`

(roll
rate). The rudder and aileron deflections are in degrees.

As in the SISO case, use `tf`

to derive the
transfer function representation.

tf(sys_mimo)

Transfer function from input "rudder" to output... -0.475 s^3 - 0.2479 s^2 - 0.1187 s - 0.05633 yaw rate: --------------------------------------------------- s^4 + 0.6358 s^3 + 0.9389 s^2 + 0.5116 s + 0.003674 0.1148 s^2 - 0.2004 s - 1.373 bank angle: --------------------------------------------------- s^4 + 0.6358 s^3 + 0.9389 s^2 + 0.5116 s + 0.003674 Transfer function from input "aileron" to output... 0.0077 s^3 - 0.0005372 s^2 + 0.008688 s + 0.004523 yaw rate: --------------------------------------------------- s^4 + 0.6358 s^3 + 0.9389 s^2 + 0.5116 s + 0.003674 0.1436 s^2 + 0.02737 s + 0.1104 bank angle: --------------------------------------------------- s^4 + 0.6358 s^3 + 0.9389 s^2 + 0.5116 s + 0.003674