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

MIMO transfer functions are two-dimensional arrays of elementary SISO transfer functions. There are two ways to specify MIMO transfer function models:

Concatenation of SISO transfer function models

Using

`tf`

with cell array arguments

Consider the following single-input, two-output transfer function.

$$H(s)=\left[\begin{array}{c}\frac{s-1}{s+1}\\ \frac{s+2}{{s}^{2}+4s+5}\end{array}\right]$$

You can specify *H*(*s*) by concatenation of its SISO entries. For instance,

h11 = tf([1 -1],[1 1]); h21 = tf([1 2],[1 4 5]);

or, equivalently,

s = tf('s') h11 = (s-1)/(s+1); h21 = (s+2)/(s^2+4*s+5);

can be concatenated to form *H*(*s*).

H = [h11; h21]

This syntax mimics standard matrix concatenation and tends to be easier and more readable for MIMO systems with many inputs and/or outputs.

Alternatively, to define MIMO transfer functions using `tf`

, you need
two cell arrays (say, `N`

and `D`

) to represent the sets
of numerator and denominator polynomials, respectively. See What Is a Cell Array? (MATLAB)
for more details on cell arrays.

For example, for the rational transfer matrix
*H*(*s*), the two cell arrays `N`

and
`D`

should contain the row-vector representations of the polynomial
entries of

$$N(s)=\left[\frac{s-1}{s+2}\right]\text{\hspace{1em}}\text{\hspace{1em}}\text{\hspace{1em}}D(s)=\left[\frac{s+1}{{s}^{2}+4s+5}\right]$$

You can specify this MIMO transfer matrix *H*(*s*)
by typing

N = {[1 -1];[1 2]}; % Cell array for N(s) D = {[1 1];[1 4 5]}; % Cell array for D(s) H = tf(N,D)

These commands return the following result:

Transfer function from input to output... s - 1 #1: ----- s + 1 s + 2 #2: ------------- s^2 + 4 s + 5

Notice that both `N`

and `D`

have the same
dimensions as *H*. For a general MIMO transfer matrix
*H*(*s*), the cell array entries
`N{i,j}`

and `D{i,j}`

should be row-vector
representations of the numerator and denominator of
*H _{ij}*(

After you define a MIMO system, you can access and manipulate I/O pairs by specifying
input and output pairs of the system. For instance, if `sys_mimo`

is a MIMO
system with two inputs and three outputs,

sys_mimo(3,1)

extracts the subsystem, mapping the first input to the third output. Row indices select the outputs and column indices select the inputs. Similarly,

sys_mimo(3,1) = tf(1,[1 0])

redefines the transfer function between the first input and third output as an integrator.