Chapter 1: Introduction to Modern (State-Space) Control
Lesson 4: Multi-Input–Multi-Output (MIMO) Systems and Coupled Dynamics
This lesson introduces multi-input–multi-output (MIMO) systems in a state-space setting and explains how coupling arises between states, inputs, and outputs. We move from familiar single-input–single-output (SISO) models to vector-valued signals, define the structure of system matrices, and describe how dynamic and static couplings are represented. Simple computational examples in Python, C++, Java, MATLAB/Simulink, and Wolfram Mathematica illustrate how to encode and simulate small MIMO systems.
1. From SISO to MIMO – Vector Inputs and Outputs
In classical linear control you mostly worked with SISO transfer functions and state models, where the input \( u(t)\in\mathbb{R} \) and output \( y(t)\in\mathbb{R} \) are scalar signals. A typical first-order SISO state-space description is
\[ \dot{x}(t) = a\,x(t) + b\,u(t), \quad y(t) = c\,x(t) + d\,u(t). \]
Real engineering systems rarely have just one actuator and one sensor. Aircraft, robots, and power systems have many actuators (inputs) and many sensors (outputs). The natural extension is to treat inputs and outputs as vectors:
\[ \mathbf{x}(t)\in\mathbb{R}^n,\quad \mathbf{u}(t)\in\mathbb{R}^m,\quad \mathbf{y}(t)\in\mathbb{R}^p, \]
and to write the (continuous-time, linear, time-invariant) MIMO state-space model as
\[ \dot{\mathbf{x}}(t) = \mathbf{A}\,\mathbf{x}(t) + \mathbf{B}\,\mathbf{u}(t),\quad \mathbf{y}(t) = \mathbf{C}\,\mathbf{x}(t) + \mathbf{D}\,\mathbf{u}(t). \]
Here, we already adopt the standard notation \( \mathbf{A},\mathbf{B},\mathbf{C},\mathbf{D} \). The rigorous derivation and properties of these matrices will be developed systematically in later chapters; for now we use them to formalize the idea of “many inputs, many outputs.”
flowchart LR
U1["u1(t)"] --> P["Linear MIMO system"]
U2["u2(t)"] --> P
P --> Y1["y1(t)"]
P --> Y2["y2(t)"]
Even in this simple 2-input–2-output sketch, the internal state vector \( \mathbf{x}(t) \) may have dimension \( n > 2 \). MIMO thinking is about how all channels interact through those internal dynamics.
2. Structure and Dimensions of System Matrices
For an \( n \)-dimensional state vector, \( m \) inputs, and \( p \) outputs, the system matrices have the following dimensions:
\[ \mathbf{A}\in\mathbb{R}^{n\times n},\quad \mathbf{B}\in\mathbb{R}^{n\times m},\quad \mathbf{C}\in\mathbb{R}^{p\times n},\quad \mathbf{D}\in\mathbb{R}^{p\times m}. \]
The entries have clear interpretations:
- State matrix \( \mathbf{A} \): element \( a_{ij} \) tells how state \( x_j \) influences the derivative \( \dot{x}_i \).
-
Input matrix \( \mathbf{B} \): each
column is an input channel direction. If
\( \mathbf{e}_j \) is the \( j \)-th canonical basis
vector in \( \mathbb{R}^m \), then
\[ \mathbf{b}^{(j)} \triangleq \mathbf{B}\,\mathbf{e}_j \in\mathbb{R}^n \]
is the effect on \( \dot{\mathbf{x}} \) of input \( u_j \) acting alone. - Output matrix \( \mathbf{C} \): row \( i \) selects a linear combination of states forming output \( y_i \).
- Feedthrough matrix \( \mathbf{D} \): captures instantaneous (algebraic) dependence of outputs on inputs.
Writing out one row of the state equation makes the coupling explicit. For \( i=1,\dots,n \),
\[ \dot{x}_i(t) = \sum_{j=1}^{n} a_{ij}\,x_j(t) + \sum_{k=1}^{m} b_{ik}\,u_k(t). \]
In SISO systems you mainly saw one such equation (or a small set coupled only through a scalar input). In MIMO systems the entire matrix structure matters.
3. Coupled Dynamics in a 2×2 Example
Consider a system with two states, two inputs, and two outputs. The state equations can be written component-wise as
\[ \begin{aligned} \dot{x}_1(t) &= a_{11}x_1(t) + a_{12}x_2(t) + b_{11}u_1(t) + b_{12}u_2(t), \\ \dot{x}_2(t) &= a_{21}x_1(t) + a_{22}x_2(t) + b_{21}u_1(t) + b_{22}u_2(t). \end{aligned} \]
In compact matrix form this is
\[ \dot{\mathbf{x}}(t) = \begin{bmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{bmatrix}\mathbf{x}(t) + \begin{bmatrix} b_{11} & b_{12} \\ b_{21} & b_{22} \end{bmatrix}\mathbf{u}(t), \quad \mathbf{x}(t) = \begin{bmatrix} x_1(t) \\ x_2(t) \end{bmatrix},\; \mathbf{u}(t) = \begin{bmatrix} u_1(t) \\ u_2(t) \end{bmatrix}. \]
We say the system exhibits dynamic coupling between states if some off-diagonal elements of \( \mathbf{A} \) are nonzero:
- If \( a_{12}\neq 0 \), the dynamics of \( x_1 \) depend on \( x_2 \).
- If \( a_{21}\neq 0 \), the dynamics of \( x_2 \) depend on \( x_1 \).
Similarly, we have input coupling if a single input affects multiple state derivatives:
- If both \( b_{11} \) and \( b_{21} \) are nonzero, then \( u_1 \) drives both \( x_1 \) and \( x_2 \).
- If both \( b_{12} \) and \( b_{22} \) are nonzero, then \( u_2 \) drives both states.
A completely decoupled state dynamics structure (with respect to states) would require \( a_{12}=a_{21}=0 \), so that
\[ \dot{x}_1(t) = a_{11}x_1(t) + (\text{inputs}),\quad \dot{x}_2(t) = a_{22}x_2(t) + (\text{inputs}), \]
i.e., each state evolves without direct dependence on the other. Later we will see how appropriate choices of coordinates can sometimes reduce coupling, but in many physical systems coupling is intrinsic and cannot be removed without approximation.
4. Input–Output Coupling and the Transfer Matrix (Preview)
From classical control you know that for a SISO LTI system the Laplace-domain relation between input and output is
\[ Y(s) = G(s)\,U(s), \]
where \( G(s) \) is a scalar transfer function. For an LTI MIMO system, the input and output Laplace transforms become vectors
\[ \mathbf{U}(s)\in\mathbb{C}^m,\quad \mathbf{Y}(s)\in\mathbb{C}^p, \]
and the frequency-domain relation is
\[ \mathbf{Y}(s) = \mathbf{G}(s)\,\mathbf{U}(s), \]
where \( \mathbf{G}(s) \) is a transfer matrix of size \( p\times m \). In terms of state-space data, one can show (derivation later, using Laplace transforms and matrix inverse formulas) that
\[ \mathbf{G}(s) = \mathbf{C}\,(s\mathbf{I}_n - \mathbf{A})^{-1}\mathbf{B} + \mathbf{D}. \]
For the \( 2\times 2 \) case,
\[ \mathbf{G}(s) = \begin{bmatrix} G_{11}(s) & G_{12}(s) \\ G_{21}(s) & G_{22}(s) \end{bmatrix}, \]
where each entry \( G_{ij}(s) \) is the SISO transfer function from input \( u_j \) to output \( y_i \). Off-diagonal terms \( G_{12}(s) \) and \( G_{21}(s) \) represent input–output coupling. If
\[ \mathbf{G}(s) = \begin{bmatrix} G_{11}(s) & 0 \\ 0 & G_{22}(s) \end{bmatrix}, \]
then the two input–output channels are decoupled in the transfer-function sense and can be treated as independent SISO loops (ignoring internal state structure).
5. Coordinate Changes and Invariance of Input–Output Behavior
In Lesson 3 we emphasized that state variables are not unique: different internal coordinates can represent the same external (input–output) behavior. A useful formalism is the similarity transformation:
Let \( \mathbf{T}\in\mathbb{R}^{n\times n} \) be invertible. Define a new state vector
\[ \mathbf{z}(t) \triangleq \mathbf{T}\,\mathbf{x}(t). \]
Substituting \( \mathbf{x}(t) = \mathbf{T}^{-1}\mathbf{z}(t) \) into the original model
\[ \dot{\mathbf{x}}(t) = \mathbf{A}\mathbf{x}(t) + \mathbf{B}\mathbf{u}(t),\quad \mathbf{y}(t) = \mathbf{C}\mathbf{x}(t) + \mathbf{D}\mathbf{u}(t), \]
and expressing everything in terms of \( \mathbf{z}(t) \) yields
\[ \begin{aligned} \dot{\mathbf{z}}(t) &= \mathbf{T}\dot{\mathbf{x}}(t) = \mathbf{T}\mathbf{A}\mathbf{x}(t) + \mathbf{T}\mathbf{B}\mathbf{u}(t) \\ &= \mathbf{T}\mathbf{A}\mathbf{T}^{-1}\mathbf{z}(t) + \mathbf{T}\mathbf{B}\mathbf{u}(t), \\ \mathbf{y}(t) &= \mathbf{C}\mathbf{x}(t) + \mathbf{D}\mathbf{u}(t) = \mathbf{C}\mathbf{T}^{-1}\mathbf{z}(t) + \mathbf{D}\mathbf{u}(t). \end{aligned} \]
Thus the transformed system has matrices
\[ \mathbf{A}_z = \mathbf{T}\mathbf{A}\mathbf{T}^{-1},\quad \mathbf{B}_z = \mathbf{T}\mathbf{B},\quad \mathbf{C}_z = \mathbf{C}\mathbf{T}^{-1},\quad \mathbf{D}_z = \mathbf{D}. \]
Proposition. The transfer matrix of the transformed system equals that of the original system:
\[ \mathbf{G}_z(s) = \mathbf{G}(s). \]
Sketch of proof. Starting from the definition,
\[ \mathbf{G}_z(s) = \mathbf{C}_z (s\mathbf{I}_n - \mathbf{A}_z)^{-1}\mathbf{B}_z + \mathbf{D}_z = \mathbf{C}\mathbf{T}^{-1} \bigl(s\mathbf{I}_n - \mathbf{T}\mathbf{A}\mathbf{T}^{-1}\bigr)^{-1} \mathbf{T}\mathbf{B} + \mathbf{D}. \]
One can verify (using properties of matrix inverses) that
\[ \bigl(s\mathbf{I}_n - \mathbf{T}\mathbf{A}\mathbf{T}^{-1}\bigr)^{-1} = \mathbf{T}\,(s\mathbf{I}_n - \mathbf{A})^{-1}\mathbf{T}^{-1}. \]
Substituting this identity gives
\[ \mathbf{G}_z(s) = \mathbf{C}\mathbf{T}^{-1}\mathbf{T}\,(s\mathbf{I}_n - \mathbf{A})^{-1}\mathbf{T}^{-1} \mathbf{T}\mathbf{B} + \mathbf{D} = \mathbf{C}(s\mathbf{I}_n - \mathbf{A})^{-1}\mathbf{B} + \mathbf{D} = \mathbf{G}(s), \]
which proves that similarity transformations change the internal representation but not the external input–output behavior. Later we will exploit this freedom to choose convenient canonical forms and to analyze coupling more systematically.
6. Python Lab — A Simple 2×2 MIMO State-Space Model
We now encode a small 2-state, 2-input, 2-output linear system in
Python. We will use
numpy for matrices and the
python-control library (control package) for
state-space simulation. The system is
\[ \dot{\mathbf{x}}(t) = \begin{bmatrix} 0 & 1 \\ -4 & -2 \end{bmatrix}\mathbf{x}(t) + \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}\mathbf{u}(t),\quad \mathbf{y}(t) = \mathbf{x}(t). \]
Both inputs affect the states (one per state), while the internal dynamics are coupled through the off-diagonal entries of \( \mathbf{A} \).
import numpy as np
import control as ct # pip install control
# State, input, output dimensions: n = 2, m = 2, p = 2
A = np.array([[0.0, 1.0],
[-4.0, -2.0]])
B = np.array([[1.0, 0.0],
[0.0, 1.0]])
C = np.eye(2) # outputs equal states
D = np.zeros((2, 2))
# Build continuous-time state-space system
sys = ct.ss(A, B, C, D)
# Step response where both inputs step from 0 to 1
T, yout = ct.step_response(sys)
print("Time vector shape:", T.shape)
print("Output array shape (p, m, len(T)):", yout.shape)
# Examine response of y1 and y2 to a step in u1 only
T1, yout1 = ct.step_response(sys, input=0) # index 0 for u1
print("Step response from u1 to y1, y2 at final time:", yout1[:, -1])
The array yout has shape (p, m, N); entry
yout[i, j, :] is the response of output \( y_{i+1} \) to a
unit step in input \( u_{j+1} \). Off-diagonal responses (e.g.,
yout[1, 0, :]) quantify cross-coupling between channels.
7. C++ Example with Eigen – Forward Euler Simulation
In C++, we can represent the same MIMO system using the Eigen linear algebra library and perform a simple forward Euler time discretization:
#include <Eigen/Dense>
#include <iostream>
int main() {
using Eigen::MatrixXd;
using Eigen::VectorXd;
// System matrices
MatrixXd A(2, 2);
MatrixXd B(2, 2);
A << 0.0, 1.0,
-4.0, -2.0;
B << 1.0, 0.0,
0.0, 1.0;
VectorXd x(2);
VectorXd u(2);
x << 0.0, 0.0; // initial state
u << 1.0, 0.0; // step in u1, u2 = 0
double dt = 0.001;
int steps = 10000;
for (int k = 0; k < steps; ++k) {
VectorXd xdot = A * x + B * u;
x = x + dt * xdot; // forward Euler step
if (k % 1000 == 0) {
std::cout << "t=" << k * dt
<< " x1=" << x(0)
<< " x2=" << x(1) << std::endl;
}
}
return 0;
}
Even in this basic simulation, the influence of \( u_1 \) on both states
can be explored by modifying the matrix \( \mathbf{B} \). If you set
B(1,0) = 0.0 while keeping B(0,0) = 1.0, only
\( x_1 \) is actuated by \( u_1 \); if you also make \( a_{12}=a_{21}=0
\), the dynamics completely decouple into two independent SISO systems.
8. Java Example – Encoding a MIMO State Update
A similar forward Euler simulation in Java can be carried out using primitive arrays. We again use the same \( \mathbf{A} \) and \( \mathbf{B} \) as in the Python and C++ examples:
public class MimoEuler {
public static void main(String[] args) {
double[][] A = {
{ 0.0, 1.0 },
{ -4.0, -2.0 }
};
double[][] B = {
{ 1.0, 0.0 },
{ 0.0, 1.0 }
};
double[] x = { 0.0, 0.0 }; // state [x1, x2]
double[] u = { 1.0, 0.0 }; // input [u1, u2]
double dt = 0.001;
int steps = 10000;
for (int k = 0; k < steps; ++k) {
double[] xdot = new double[2];
xdot[0] = A[0][0] * x[0] + A[0][1] * x[1]
+ B[0][0] * u[0] + B[0][1] * u[1];
xdot[1] = A[1][0] * x[0] + A[1][1] * x[1]
+ B[1][0] * u[0] + B[1][1] * u[1];
x[0] += dt * xdot[0];
x[1] += dt * xdot[1];
if (k % 1000 == 0) {
System.out.println("t=" + (k * dt)
+ " x1=" + x[0]
+ " x2=" + x[1]);
}
}
}
}
The nested array structure double[][] A generalizes to
higher dimensions and more inputs/outputs. Later, when we study
controllability and observability, this same matrix representation will
be the starting point for more advanced algorithms.
9. MATLAB/Simulink and Mathematica Implementations
9.1 MATLAB / Simulink
In MATLAB, the Control System Toolbox provides direct support for MIMO state-space models:
A = [ 0 1;
-4 -2 ];
B = [ 1 0;
0 1 ];
C = eye(2); % outputs equal states
D = zeros(2, 2);
sys = ss(A, B, C, D); % continuous-time state-space model
% Step responses from each input to each output
figure;
step(sys); % MATLAB plots all 4 responses G_ij(s)
% Alternatively, step from input 1 only
figure;
step(sys(:, 1)); % all outputs, single input channel
In Simulink, you can use a State-Space block and enter
the matrices A, B, C, and
D. Two scalar input lines correspond to the two components
of \( \mathbf{u}(t) \), and two scalar output lines correspond to \(
\mathbf{y}(t) \).
9.2 Wolfram Mathematica
Mathematica has a native StateSpaceModel representation for
MIMO systems:
(* System matrices *)
A = { {0., 1.},
{-4., -2.} };
B = { {1., 0.},
{0., 1.} };
C = IdentityMatrix[2];
D = { {0., 0.},
{0., 0.} };
(* Build state-space model *)
sys = StateSpaceModel[{A, B, C, D}];
(* Response to a unit step in input 1, zero in input 2 *)
u1[t_] := {UnitStep[t], 0.0};
resp = OutputResponse[sys, u1, {t, 0, 10}];
Plot[Evaluate[resp], {t, 0, 10},
PlotLegends -> {"y1(t)", "y2(t)"},
AxesLabel -> {"t", "output"}]
The vector-valued input signal u1[t] implements the
multi-channel input \( \mathbf{u}(t) \). The resulting plot shows how
each output channel reacts to the same input, highlighting coupling via
the off-diagonal entries in \( \mathbf{A} \) and \( \mathbf{B} \).
10. Problems and Solutions
The following problems reinforce the basic ideas of MIMO representation and coupled dynamics. Each problem is self-contained and solvable with the material covered so far.
Problem 1 (Matrix Dimensions): Consider an LTI MIMO system with \( n=4 \) states, \( m=2 \) inputs, and \( p=3 \) outputs. (a) What are the dimensions of the matrices \( \mathbf{A},\mathbf{B},\mathbf{C},\mathbf{D} \)? (b) Write a general formula for these dimensions in terms of \( n,m,p \).
Solution:
(a) By definition of the state-space model,
\[ \dot{\mathbf{x}}(t) = \mathbf{A}\mathbf{x}(t) + \mathbf{B}\mathbf{u}(t),\quad \mathbf{y}(t) = \mathbf{C}\mathbf{x}(t) + \mathbf{D}\mathbf{u}(t), \]
we must have \( \mathbf{A}\in\mathbb{R}^{n\times n} \) and \( \mathbf{B}\in\mathbb{R}^{n\times m} \) so that the matrix–vector products are well-defined. Similarly, \( \mathbf{C}\in\mathbb{R}^{p\times n} \) and \( \mathbf{D}\in\mathbb{R}^{p\times m} \). For \( n=4,m=2,p=3 \),
\[ \mathbf{A}\in\mathbb{R}^{4\times 4},\quad \mathbf{B}\in\mathbb{R}^{4\times 2},\quad \mathbf{C}\in\mathbb{R}^{3\times 4},\quad \mathbf{D}\in\mathbb{R}^{3\times 2}. \]
(b) In general, for \( \mathbf{x}(t)\in\mathbb{R}^n \), \( \mathbf{u}(t)\in\mathbb{R}^m \), and \( \mathbf{y}(t)\in\mathbb{R}^p \),
\[ \mathbf{A}\in\mathbb{R}^{n\times n},\quad \mathbf{B}\in\mathbb{R}^{n\times m},\quad \mathbf{C}\in\mathbb{R}^{p\times n},\quad \mathbf{D}\in\mathbb{R}^{p\times m}. \]
Problem 2 (Detecting Coupling in State Equations): A two-state, two-input system is described by
\[ \begin{aligned} \dot{x}_1(t) &= -x_1(t) + 2x_2(t) + u_1(t), \\ \dot{x}_2(t) &= 3x_1(t) - 4x_2(t) + u_2(t), \\ \mathbf{y}(t) &= \mathbf{x}(t). \end{aligned} \]
(a) Are the state dynamics dynamically coupled? (b) Are the inputs cross-coupled in their effect on the states?
Solution:
We can read off
\[ \mathbf{A} = \begin{bmatrix} -1 & 2 \\ 3 & -4 \end{bmatrix},\quad \mathbf{B} = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}. \]
(a) The off-diagonal entries \( a_{12}=2 \) and \( a_{21}=3 \) are nonzero, so each state depends on the other. The system is dynamically coupled in its internal state dynamics.
(b) Each input influences only one state derivative: \( u_1 \) appears only in the \( \dot{x}_1 \) equation and \( u_2 \) only in the \( \dot{x}_2 \) equation. Thus there is no cross-coupling in the input matrix \( \mathbf{B} \) (it is the identity here).
Problem 3 (Transfer Matrix and Cross-Coupling): Consider the state-space system
\[ \mathbf{A} = \begin{bmatrix} 0 & 1 \\ -5 & -1 \end{bmatrix},\quad \mathbf{B} = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix},\quad \mathbf{C} = \mathbf{I}_2,\quad \mathbf{D} = \mathbf{0}_{2\times 2}. \]
(a) Compute the transfer matrix \( \mathbf{G}(s) \). (b) Are there cross-couplings between inputs and outputs in the transfer-function sense?
Solution:
(a) Since \( \mathbf{B} \) is the identity and \( \mathbf{C}=\mathbf{I}_2 \), we have
\[ \mathbf{G}(s) = (s\mathbf{I}_2 - \mathbf{A})^{-1}. \]
Compute
\[ s\mathbf{I}_2 - \mathbf{A} = \begin{bmatrix} s & -1 \\ 5 & s+1 \end{bmatrix}, \quad \det(s\mathbf{I}_2 - \mathbf{A}) = s(s+1) + 5 = s^2 + s + 5. \]
Using the \( 2\times 2 \) inverse formula,
\[ (s\mathbf{I}_2 - \mathbf{A})^{-1} = \frac{1}{s^2 + s + 5} \begin{bmatrix} s+1 & 1 \\ -5 & s \end{bmatrix}. \]
Hence
\[ \mathbf{G}(s) = \frac{1}{s^2 + s + 5} \begin{bmatrix} s+1 & 1 \\ -5 & s \end{bmatrix}. \]
(b) The off-diagonal entries \( G_{12}(s) = \frac{1}{s^2 + s + 5} \) and \( G_{21}(s) = \frac{-5}{s^2 + s + 5} \) are nonzero, so a change in input \( u_2 \) affects output \( y_1 \), and a change in \( u_1 \) affects \( y_2 \). Therefore the system is input–output coupled.
Problem 4 (Invariance under State Coordinate Change): Let \( \mathbf{T}\in\mathbb{R}^{n\times n} \) be invertible and define the transformed system matrices
\[ \mathbf{A}_z = \mathbf{T}\mathbf{A}\mathbf{T}^{-1},\quad \mathbf{B}_z = \mathbf{T}\mathbf{B},\quad \mathbf{C}_z = \mathbf{C}\mathbf{T}^{-1},\quad \mathbf{D}_z = \mathbf{D}. \]
Prove directly from the state equations (without explicitly using the Laplace transform) that the input–output relation \( \mathbf{y}(t) \) versus \( \mathbf{u}(t) \) is unchanged.
Solution:
The original system satisfies
\[ \dot{\mathbf{x}}(t) = \mathbf{A}\mathbf{x}(t) + \mathbf{B}\mathbf{u}(t),\quad \mathbf{y}(t) = \mathbf{C}\mathbf{x}(t) + \mathbf{D}\mathbf{u}(t). \]
Define \( \mathbf{z}(t) = \mathbf{T}\mathbf{x}(t) \). Differentiating and substituting gives
\[ \dot{\mathbf{z}}(t) = \mathbf{T}\dot{\mathbf{x}}(t) = \mathbf{T}\mathbf{A}\mathbf{x}(t) + \mathbf{T}\mathbf{B}\mathbf{u}(t) = \mathbf{T}\mathbf{A}\mathbf{T}^{-1}\mathbf{z}(t) + \mathbf{T}\mathbf{B}\mathbf{u}(t), \]
so \( \dot{\mathbf{z}}(t) = \mathbf{A}_z\mathbf{z}(t) + \mathbf{B}_z\mathbf{u}(t) \). For the output,
\[ \mathbf{y}(t) = \mathbf{C}\mathbf{x}(t) + \mathbf{D}\mathbf{u}(t) = \mathbf{C}\mathbf{T}^{-1}\mathbf{z}(t) + \mathbf{D}\mathbf{u}(t) = \mathbf{C}_z\mathbf{z}(t) + \mathbf{D}_z\mathbf{u}(t). \]
Thus any trajectory \( \mathbf{u}(t) \mapsto \mathbf{y}(t) \) achievable with the original state representation is also achievable with the transformed representation and vice versa, because \( \mathbf{x}(t) = \mathbf{T}^{-1}\mathbf{z}(t) \). The internal state trajectories change, but the input–output behavior is identical.
Problem 5 (From Coupled Second-Order ODEs to First-Order MIMO State Space): Two unit-mass carts move on a frictionless track, connected by a spring of stiffness \( k>0 \). Let \( x_1(t) \) and \( x_2(t) \) be the displacements of the two carts from equilibrium. External forces \( u_1(t) \) and \( u_2(t) \) act on the first and second cart, respectively. The equations of motion are
\[ \begin{aligned} \ddot{x}_1(t) &= -k\bigl(x_1(t) - x_2(t)\bigr) + u_1(t), \\ \ddot{x}_2(t) &= -k\bigl(x_2(t) - x_1(t)\bigr) + u_2(t). \end{aligned} \]
(a) Choose a state vector \( \mathbf{x}(t) \) of dimension 4 and rewrite the system in first-order form \( \dot{\mathbf{x}}(t) = \mathbf{A}\mathbf{x}(t) + \mathbf{B}\mathbf{u}(t) \), \( \mathbf{u}(t)\in\mathbb{R}^2 \). (b) Identify where the coupling appears in \( \mathbf{A} \) and \( \mathbf{B} \).
Solution:
(a) A standard choice is
\[ \mathbf{x}(t) = \begin{bmatrix} x_1(t) \\ x_2(t) \\ v_1(t) \\ v_2(t) \end{bmatrix}, \quad v_1(t) \triangleq \dot{x}_1(t),\; v_2(t) \triangleq \dot{x}_2(t), \quad \mathbf{u}(t) = \begin{bmatrix} u_1(t) \\ u_2(t) \end{bmatrix}. \]
Then
\[ \dot{x}_1(t) = v_1(t),\quad \dot{x}_2(t) = v_2(t), \]
\[ \dot{v}_1(t) = -k\bigl(x_1(t) - x_2(t)\bigr) + u_1(t) = -k x_1(t) + k x_2(t) + u_1(t), \]
\[ \dot{v}_2(t) = -k\bigl(x_2(t) - x_1(t)\bigr) + u_2(t) = k x_1(t) - k x_2(t) + u_2(t). \]
In matrix form,
\[ \dot{\mathbf{x}}(t) = \underbrace{ \begin{bmatrix} 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ -k & k & 0 & 0 \\ k & -k & 0 & 0 \end{bmatrix}}_{\mathbf{A}} \mathbf{x}(t) + \underbrace{ \begin{bmatrix} 0 & 0 \\ 0 & 0 \\ 1 & 0 \\ 0 & 1 \end{bmatrix}}_{\mathbf{B}} \mathbf{u}(t). \]
(b) The off-diagonal entries \( a_{34}=k \) and \( a_{43}=k \) as well as \( a_{32} = k \) and \( a_{41}=k \) show that the accelerations of one mass depend on both displacements. In other words, the spring couples the two positions dynamically. The matrix \( \mathbf{B} \) shows that each input acts only on the acceleration of its own mass (no cross-coupling in the inputs here).
flowchart TD
P0["Start with second-order ODEs"] --> P1["Choose state: x1, x2, v1, v2"]
P1 --> P2["Rewrite as first-order equations"]
P2 --> P3["Collect coefficients into A and B"]
P3 --> P4["Inspect off-diagonal entries for coupling"]
11. Summary
In this lesson we generalized familiar SISO concepts to MIMO systems by treating inputs and outputs as vectors and encoding their interactions through matrices \( \mathbf{A},\mathbf{B},\mathbf{C},\mathbf{D} \). We defined dynamic coupling via off-diagonal state matrix entries, and input–output coupling via off-diagonal entries in the transfer matrix \( \mathbf{G}(s) \). We also showed that similarity transformations change internal coordinates but leave the input–output map invariant, which is a key structural property of state-space models. Programming examples in Python, C++, Java, MATLAB/Simulink, and Mathematica demonstrated how a small MIMO system can be implemented numerically. In subsequent chapters, these representations will support deeper analysis of controllability, observability, and multivariable feedback design.
12. References
- Kailath, T. (1967). The divergence and convergence of trajectories in linear multivariable control systems. IEEE Transactions on Automatic Control, 12(2), 143–149.
- Rosenbrock, H. H. (1969). A canonical form for linear multivariable systems. IEEE Transactions on Automatic Control, 14(6), 640–647.
- Wonham, W. M. (1967). On pole assignment in multi-input controllable linear systems. IEEE Transactions on Automatic Control, 12(6), 660–665.
- Anderson, B. D. O., & Moore, J. B. (1969). Linear optimal control. IEEE Transactions on Automatic Control, various articles on multivariable systems.
- MacFarlane, A. G. J., & Kouvaritakis, B. (1977). A geometric approach to the analysis and synthesis of multivariable control systems. IEEE Transactions on Automatic Control, 22(1), 1–12.
- Willems, J. C. (1970). Stability theory of dynamical systems. Journal of Differential Equations, 9(2), 204–222.
- Vidyasagar, M. (1972). Nonlinear multivariable control: A geometric approach. Early contributions in IEEE Transactions on Automatic Control.