Chapter 4: State Variables and State-Space Models

Lesson 4: Physical Interpretation of State-Space Models

This lesson explains how state variables arise from physics: they represent the system’s internal “memory,” typically tied to energy storage (mechanical inertia and elasticity, electrical inductance and capacitance). We connect physical laws to the matrices \( \mathbf{A},\mathbf{B},\mathbf{C},\mathbf{D} \), interpret coupling and units, and show how different coordinate choices can preserve the same physical behavior while changing the numerical realization.

1. Conceptual Overview: “State” as Physical Memory

In Lesson 1, we defined the state as a vector that summarizes all internal information needed to predict future behavior given future inputs. The key physical interpretation is:

  • \( \mathbf{x}(t) \) encodes the system’s stored energy configuration and internal momentum/charge-like quantities.
  • Inputs \( \mathbf{u}(t) \) inject or extract energy and act through actuators; outputs \( \mathbf{y}(t) \) are measured variables.
  • The state-space model \( \dot{\mathbf{x}}(t) = \mathbf{A}\mathbf{x}(t) + \mathbf{B}\mathbf{u}(t) \), \( \mathbf{y}(t)=\mathbf{C}\mathbf{x}(t)+\mathbf{D}\mathbf{u}(t) \) is a compact encoding of physical interconnections and constitutive laws.

A practical engineering rule: for many lumped-parameter systems, choose state variables from energy storage elements (inertia, springs, inductors, capacitors). This yields a first-order model with direct physical meaning.

flowchart TD
  P["Physical laws (Newton/Kirchhoff)"] --> E["Identify energy storage elements"]
  E --> S["Choose states tied to storage (pos/vel, iL/vC, ...)"]
  S --> C["Write constitutive relations and interconnections"]
  C --> M["Assemble xdot = A x + B u and y = C x + D u"]
  M --> V["Validate: units, signs, equilibrium, initial conditions"]
  V --> SIM["Simulate and interpret trajectories in physical variables"]
        

2. Energy Storage Elements and Why the State Dimension Appears

Consider a lumped physical system whose dynamics are governed by a finite set of ordinary differential equations (ODEs). The “need” for state variables arises because energy storage introduces integration (memory).

Mechanical storage:

  • Mass/inertia: kinetic energy \( T = \tfrac{1}{2} m v^2 \) where \( v=\dot{q} \).
  • Spring: potential energy \( V = \tfrac{1}{2} k q^2 \).

Electrical storage:

  • Inductor: \( W_L = \tfrac{1}{2} L i_L^2 \), with constitutive law \( v_L = L \tfrac{di_L}{dt} \).
  • Capacitor: \( W_C = \tfrac{1}{2} C v_C^2 \), with constitutive law \( i_C = C \tfrac{dv_C}{dt} \).

These relations show why states are typically chosen as \( v \), \( q \), \( i_L \), \( v_C \): the derivative of a storage variable is driven by network forces/voltages/currents that depend on the rest of the system.

Theorem (State dimension from independent storage coordinates):

Suppose a lumped system has \( n \) independent energy storage variables (e.g., independent masses/springs or inductors/capacitors after considering constraints and interconnections). Under non-degenerate interconnection conditions (no algebraic redundancy among storage variables), the system admits a first-order representation with a state vector \( \mathbf{x}\in\mathbb{R}^n \).

Proof sketch (constructive, ODE reduction):

  1. Write the physical governing equations (Newton/Kirchhoff). Each storage element provides a first-order constitutive equation: \( \tfrac{di_L}{dt} = \tfrac{1}{L} v_L \), \( \tfrac{dv_C}{dt} = \tfrac{1}{C} i_C \), or \( \dot{q}=v \), \( \dot{v} = \tfrac{1}{m}(\text{net force}) \).
  2. Choose \( \mathbf{x} \) as the vector of these storage variables (or a physically meaningful independent subset). Then each component \( x_i \) has a derivative expressed via interconnection equations in terms of the other variables and inputs.
  3. Eliminating purely algebraic variables (e.g., resistor currents/voltages, damper forces) yields a closed system \( \dot{\mathbf{x}} = f(\mathbf{x},\mathbf{u}) \). For LTI modeling in this chapter, linearization or inherent linearity yields \( \dot{\mathbf{x}} = \mathbf{A}\mathbf{x} + \mathbf{B}\mathbf{u} \).
  4. Independence ensures no differential constraint reduces the number of needed initial conditions. Hence dimension is \( n \).

This interpretation aligns with Lesson 3’s “minimal internal description”: if some storage variables are not independent (due to constraints), the effective state dimension is smaller.

3. Mechanical Example: Mass–Spring–Damper and Matrix Meaning

Consider a standard translational mass–spring–damper with input force \( u(t) \) and output displacement \( y(t) \). The ODE is

\[ m\ddot{q}(t) + b\dot{q}(t) + k q(t) = u(t). \]

A physically meaningful state choice uses stored-energy coordinates: \( x_1 = q \) (spring deformation) and \( x_2 = \dot{q} \) (mass velocity). Then \( \dot{x}_1 = x_2 \) and from the ODE,

\[ \dot{x}_2 = -\frac{k}{m} x_1 - \frac{b}{m} x_2 + \frac{1}{m} u. \]

Thus the state-space model \( \dot{\mathbf{x}} = \mathbf{A}\mathbf{x} + \mathbf{B}u \), \( y=\mathbf{C}\mathbf{x}+\mathbf{D}u \) is:

\[ \mathbf{A} = \begin{bmatrix} 0 & 1 \\ -\frac{k}{m} & -\frac{b}{m} \end{bmatrix}, \quad \mathbf{B} = \begin{bmatrix} 0 \\ \frac{1}{m} \end{bmatrix}, \quad \mathbf{C} = \begin{bmatrix} 1 & 0 \end{bmatrix}, \quad \mathbf{D} = \begin{bmatrix} 0 \end{bmatrix}. \]

Physical meaning of matrix entries:

  • The entry \( A_{12}=1 \) encodes the kinematic identity \( \dot{q}=v \).
  • The entry \( A_{21}=-k/m \) encodes Hooke’s law restoring force divided by mass (acceleration per displacement).
  • The entry \( A_{22}=-b/m \) encodes damping (acceleration per velocity).
  • The entry \( B_2=1/m \) maps applied force to acceleration.

Units consistency (dimensional check):

If \( x_1=q \) has units [m] and \( x_2=v \) has units [m/s], then \( \dot{x}_1 \) is [m/s], consistent with \( A_{12}x_2 \). Also, \( -\tfrac{k}{m}x_1 \) has units: \( k/m \) is (N/m)/kg = (kg·m/s²/m)/kg = 1/s², so \( (1/s^2)\cdot m = m/s^2 \), matching acceleration.

Energy interpretation: total stored energy is

\[ E(\mathbf{x}) = \frac{1}{2} m x_2^2 + \frac{1}{2} k x_1^2. \]

Damping \( b \) dissipates energy, while input \( u \) injects energy. This is a physical reading of \( \mathbf{A} \) (internal exchange/dissipation) and \( \mathbf{B} \) (actuation channel).

4. Electrical Example: Series RLC and State Choice

Consider a series RLC circuit driven by an input voltage \( u(t) \). Choose output as capacitor voltage \( y(t)=v_C(t) \). The physically natural states are inductor current and capacitor voltage: \( x_1=i_L \), \( x_2=v_C \).

For a series circuit, the same current flows through all elements, so \( i_L = i_C = i \). Using constitutive relations:

\[ v_L = L \frac{di_L}{dt}, \quad i_C = C \frac{dv_C}{dt}, \quad v_R = R i_L. \]

Kirchhoff’s voltage law gives \( u = v_L + v_R + v_C \), so:

\[ L \dot{x}_1 + R x_1 + x_2 = u \quad \Rightarrow \quad \dot{x}_1 = -\frac{R}{L} x_1 - \frac{1}{L} x_2 + \frac{1}{L} u. \]

Also \( i_C = i_L = x_1 \), so \( x_1 = C \dot{x}_2 \) and:

\[ \dot{x}_2 = \frac{1}{C} x_1. \]

Therefore:

\[ \dot{\mathbf{x}} = \begin{bmatrix} -\frac{R}{L} & -\frac{1}{L} \\ \frac{1}{C} & 0 \end{bmatrix}\mathbf{x} + \begin{bmatrix} \frac{1}{L} \\ 0 \end{bmatrix}u, \quad y = \begin{bmatrix} 0 & 1 \end{bmatrix}\mathbf{x}, \quad D = 0. \]

Again, the entries of \( \mathbf{A} \) represent physical couplings: resistance creates dissipation \( -R/L \), inductance couples voltage to current derivative, capacitance couples current to voltage derivative, etc.

5. Physical Interpretation of \( \mathbf{A},\mathbf{B},\mathbf{C},\mathbf{D} \)

In the LTI form introduced in Lesson 2: \( \dot{\mathbf{x}} = \mathbf{A}\mathbf{x} + \mathbf{B}\mathbf{u} \), \( \mathbf{y}=\mathbf{C}\mathbf{x}+\mathbf{D}\mathbf{u} \), each matrix has a standard physical meaning:

  • \( \mathbf{A} \) (internal physics): how stored energy variables exchange and dissipate energy without input. Off-diagonal entries reflect coupling between state components (e.g., position affects acceleration, capacitor voltage affects inductor current).
  • \( \mathbf{B} \) (actuation channels): how each input directly influences the rate of change of states.
  • \( \mathbf{C} \) (sensor map): which internal physical variables are measured or reported as outputs.
  • \( \mathbf{D} \) (direct feedthrough): instantaneous input-to-output path with no dynamics. Physically, \( \mathbf{D}\neq 0 \) often means the sensor sees the input immediately (e.g., measuring applied voltage directly).

Dimensional constraint (units):

Because \( \dot{\mathbf{x}} \) has units “state units per second,” entries of \( \mathbf{A} \) have units of 1/s (or 1/s², etc.) depending on how states are defined. More precisely, if \( x_i \) has unit \( U_i \), then \( A_{ij} \) must have unit \( (U_i/s)/U_j \) so that \( A_{ij}x_j \) matches \( \dot{x}_i \). This provides a powerful error check for modeling.

flowchart TD
  U["input u"] --> B["B: actuation"]
  X["state x"] --> A["A: internal coupling"]
  A --> XDOT["xdot"]
  B --> XDOT
  XDOT --> INT["integrators (state memory)"]
  INT --> X
  X --> C["C: sensing"]
  U --> D["D: direct path"]
  C --> Y["output y"]
  D --> Y
        

6. Non-Uniqueness of State Variables and Physical Coordinate Choices

A crucial point (consistent with the linear algebra tools in Chapter 2) is that the state vector is not unique. Even when the physical system is fixed, different state definitions can produce different matrices while representing the same dynamics.

Let \( \mathbf{T} \) be an invertible matrix and define a new coordinate \( \mathbf{z} \) by \( \mathbf{x} = \mathbf{T}\mathbf{z} \). Then:

\[ \dot{\mathbf{x}} = \mathbf{T}\dot{\mathbf{z}} = \mathbf{A}\mathbf{T}\mathbf{z} + \mathbf{B}\mathbf{u} \quad \Rightarrow \quad \dot{\mathbf{z}} = \mathbf{T}^{-1}\mathbf{A}\mathbf{T}\,\mathbf{z} + \mathbf{T}^{-1}\mathbf{B}\mathbf{u}. \]

The output transforms as:

\[ \mathbf{y} = \mathbf{C}\mathbf{x} + \mathbf{D}\mathbf{u} = \mathbf{C}\mathbf{T}\mathbf{z} + \mathbf{D}\mathbf{u}. \]

Therefore, the transformed realization is: \( \mathbf{A}'=\mathbf{T}^{-1}\mathbf{A}\mathbf{T} \), \( \mathbf{B}'=\mathbf{T}^{-1}\mathbf{B} \), \( \mathbf{C}'=\mathbf{C}\mathbf{T} \), \( \mathbf{D}'=\mathbf{D} \).

Physical interpretation:

  • If \( \mathbf{x} \) is chosen as “real” physical variables (position, velocity, capacitor voltage, inductor current), then each component has direct meaning and clear units.
  • If \( \mathbf{z} \) is a transformed coordinate, it may mix physical quantities (e.g., linear combinations of position and velocity), which can be helpful computationally but less intuitive physically.

This is why physical modeling often begins with physically meaningful states, while analysis/simplification may later introduce transformed states.

7. Practical Modeling Checklist: Getting the Physics Right

Before moving to simulation or later design topics, verify a state-space model with basic physical consistency checks:

  1. State meaning: write a sentence for each state component (e.g., “\( x_2 \) is mass velocity in m/s”).
  2. Unit consistency: confirm every term in each state equation has the same units as \( \dot{x}_i \).
  3. Correct sign conventions: springs oppose displacement, dampers oppose velocity; KVL/KCL polarities must be consistent.
  4. Equilibrium behavior: for \( u(t)=0 \), verify the system tends toward rest when damping/resistance exists.
  5. Initial conditions: interpret \( \mathbf{x}(0) \) as initial stored energy configuration.

In subsequent chapters, these checks prevent major errors when interpreting trajectories, stability, and response shaping.

8. Implementations: Physical State Models in Software

The following implementations build the mass–spring–damper model directly from physical parameters and simulate the response. This reinforces the interpretation of states as physical variables.

8.1 Python (NumPy/SciPy + python-control)


import numpy as np

# Physical parameters (mass-spring-damper)
m = 1.0
b = 0.4
k = 4.0

# States: x1 = q (position), x2 = qdot (velocity)
A = np.array([[0.0, 1.0],
              [-k/m, -b/m]])
B = np.array([[0.0],
              [1.0/m]])
C = np.array([[1.0, 0.0]])   # output position
D = np.array([[0.0]])

# Simulation using SciPy
from scipy.integrate import solve_ivp

def f(t, x, u_func):
    u = u_func(t)
    return (A @ x + (B.flatten() * u))

# Step input u(t) = 1
u_func = lambda t: 1.0

t_span = (0.0, 10.0)
x0 = np.array([0.0, 0.0])  # q(0)=0, qdot(0)=0
sol = solve_ivp(lambda t, x: f(t, x, u_func), t_span, x0, max_step=0.01)

t = sol.t
x = sol.y
y = (C @ x).flatten()

print("Final state:", x[:, -1])
print("Final output y (position):", y[-1])

# Optional: python-control for state-space object
try:
    import control as ct
    sys = ct.ss(A, B, C, D)
    # Step response
    t2, y2 = ct.step_response(sys, T=np.linspace(0, 10, 2001))
    print("python-control step y(t) sample:", y2[:5])
except Exception as e:
    print("python-control not available or failed to import:", e)
      

8.2 C++ (Eigen) — State Update Simulation


#include <iostream>
#include <vector>
#include <Eigen/Dense>

int main() {
  // Physical parameters
  const double m = 1.0, b = 0.4, k = 4.0;

  // A, B matrices for xdot = A x + B u
  Eigen::Matrix2d A;
  A << 0.0, 1.0,
       -k/m, -b/m;

  Eigen::Vector2d B;
  B << 0.0, 1.0/m;

  // Output y = C x (position)
  Eigen::RowVector2d C;
  C << 1.0, 0.0;

  // Simple explicit Euler integration (educational; small dt needed)
  double dt = 1e-3;
  double T  = 10.0;
  int N = static_cast<int>(T / dt);

  Eigen::Vector2d x;
  x << 0.0, 0.0; // q(0), qdot(0)

  auto u = [](double /*t*/) { return 1.0; }; // unit step

  for (int i = 0; i < N; ++i) {
    double t = i * dt;
    Eigen::Vector2d xdot = A * x + B * u(t);
    x = x + dt * xdot;

    if (i % 2000 == 0) {
      double y = (C * x)(0,0);
      std::cout << "t=" << t << "  q=" << x(0) << "  qdot=" << x(1)
                << "  y=" << y << std::endl;
    }
  }

  std::cout << "Final state x=" << x.transpose() << std::endl;
  return 0;
}
      

8.3 Java (EJML) — Educational Simulation


import org.ejml.data.DMatrixRMaj;
import org.ejml.dense.row.CommonOps_DDRM;

public class MassSpringDamperSim {
  public static void main(String[] args) {
    double m = 1.0, b = 0.4, k = 4.0;

    // A (2x2), B (2x1), C (1x2)
    DMatrixRMaj A = new DMatrixRMaj(new double[][]{
      {0.0, 1.0},
      {-k/m, -b/m}
    });
    DMatrixRMaj B = new DMatrixRMaj(new double[][]{
      {0.0},
      {1.0/m}
    });
    DMatrixRMaj C = new DMatrixRMaj(new double[][]{
      {1.0, 0.0}
    });

    double dt = 1e-3;
    double T  = 10.0;
    int N = (int)(T / dt);

    DMatrixRMaj x = new DMatrixRMaj(new double[][]{ {0.0},{0.0} });
    DMatrixRMaj Ax = new DMatrixRMaj(2,1);
    DMatrixRMaj xdot = new DMatrixRMaj(2,1);

    for (int i = 0; i < N; i++) {
      double t = i * dt;
      double u = 1.0; // step input

      CommonOps_DDRM.mult(A, x, Ax);           // Ax
      xdot.set(0, 0, Ax.get(0,0) + B.get(0,0) * u);
      xdot.set(1, 0, Ax.get(1,0) + B.get(1,0) * u);

      // x = x + dt*xdot (Euler)
      x.set(0, 0, x.get(0,0) + dt * xdot.get(0,0));
      x.set(1, 0, x.get(1,0) + dt * xdot.get(1,0));

      if (i % 2000 == 0) {
        double y = C.get(0,0) * x.get(0,0) + C.get(0,1) * x.get(1,0);
        System.out.println("t=" + t + "  q=" + x.get(0,0) + "  qdot=" + x.get(1,0) + "  y=" + y);
      }
    }

    System.out.println("Final state: q=" + x.get(0,0) + ", qdot=" + x.get(1,0));
  }
}
      

8.4 MATLAB + Simulink (Control System Toolbox)


% Physical parameters
m = 1.0; b = 0.4; k = 4.0;

% State choice: x1 = q, x2 = qdot
A = [0 1; -k/m -b/m];
B = [0; 1/m];
C = [1 0];
D = 0;

sys = ss(A,B,C,D);

% Step response (force input)
t = linspace(0,10,2001);
u = ones(size(t)); % step
[y,t,x] = lsim(sys,u,t,[0;0]);

disp("Final state x(T):");
disp(x(end,:));
disp("Final output y(T):");
disp(y(end));

% --- Programmatic Simulink build (integrator-chain form) ---
% This constructs xdot = A x + B u with Integrator blocks for states.
model = "msd_statespace_demo";
new_system(model); open_system(model);

add_block("simulink/Sources/Step", model + "/u");
add_block("simulink/Math Operations/Gain", model + "/B_gain");
set_param(model + "/B_gain", "Gain", "1/m");

% Two integrators for x2 and x1 (x1dot = x2)
add_block("simulink/Continuous/Integrator", model + "/Int_x2");
add_block("simulink/Continuous/Integrator", model + "/Int_x1");

% Gains for A terms in x2dot: -(k/m)*x1 -(b/m)*x2 + (1/m)*u
add_block("simulink/Math Operations/Gain", model + "/Gain_k");
set_param(model + "/Gain_k", "Gain", "-k/m");
add_block("simulink/Math Operations/Gain", model + "/Gain_b");
set_param(model + "/Gain_b", "Gain", "-b/m");

add_block("simulink/Math Operations/Sum", model + "/Sum_x2dot");
set_param(model + "/Sum_x2dot", "Inputs", "+++");

% Wire: x1 = Int_x1 output, x2 = Int_x2 output
% x1dot = x2
add_line(model, "Int_x2/1", "Int_x1/1");

% x2dot sum: Gain_k*x1 + Gain_b*x2 + B_gain*u
add_line(model, "Int_x1/1", "Gain_k/1");
add_line(model, "Gain_k/1", "Sum_x2dot/1");

add_line(model, "Int_x2/1", "Gain_b/1");
add_line(model, "Gain_b/1", "Sum_x2dot/2");

add_line(model, "u/1", "B_gain/1");
add_line(model, "B_gain/1", "Sum_x2dot/3");

% Feed x2dot into Int_x2
add_line(model, "Sum_x2dot/1", "Int_x2/1");

% Output y = x1
add_block("simulink/Sinks/Scope", model + "/Scope_y");
add_line(model, "Int_x1/1", "Scope_y/1");

set_param(model, "StopTime", "10");
save_system(model);
      

8.5 Wolfram Mathematica (StateSpaceModel)


(* Physical parameters *)
m = 1.0; b = 0.4; k = 4.0;

(* State choice: x1 = q, x2 = qdot *)
A = { {0, 1}, {-k/m, -b/m} };
B = { {0}, {1/m} };
C = { {1, 0} };
D = { {0} };

sys = StateSpaceModel[{A, B, C, D}];

(* Step input u(t)=1, simulate from x(0)={0,0} *)
u[t_] := 1;

sol = OutputResponse[sys, u[t], {t, 0, 10}, "InitialState" -> {0, 0}];

(* Sample final value *)
Print["y(10) = ", sol /. t -> 10];

(* Also retrieve state response *)
xresp = StateResponse[sys, u[t], {t, 0, 10}, "InitialState" -> {0, 0}];
Print["x(10) = ", xresp /. t -> 10];
      

These implementations keep the states as physically meaningful variables. Later, when coordinate transformations are used for analysis, you can confirm equivalence by transforming \( \mathbf{A},\mathbf{B},\mathbf{C} \) as shown in Section 6.

9. Problems and Solutions

Problem 1 (Physical State Selection — Mechanical): A translational system satisfies \( m\ddot{q} + b\dot{q} + k q = u \). Choose physical states and derive \( \mathbf{A},\mathbf{B} \) with \( y=q \).

Solution: Choose \( x_1=q \), \( x_2=\dot{q} \). Then \( \dot{x}_1=x_2 \) and

\[ \dot{x}_2 = -\frac{k}{m}x_1 - \frac{b}{m}x_2 + \frac{1}{m}u. \]

Therefore \( \mathbf{A}=\begin{bmatrix}0&1\\-k/m&-b/m\end{bmatrix} \), \( \mathbf{B}=\begin{bmatrix}0\\1/m\end{bmatrix} \), \( \mathbf{C}=\begin{bmatrix}1&0\end{bmatrix} \), \( \mathbf{D}=0 \).


Problem 2 (Physical State Selection — Electrical): A series RLC circuit is driven by input voltage \( u(t) \). Let output be capacitor voltage \( y=v_C \). Choose physical states and derive \( \mathbf{A},\mathbf{B},\mathbf{C},\mathbf{D} \).

Solution: Choose \( x_1=i_L \), \( x_2=v_C \). Using KVL:

\[ u = L\dot{x}_1 + R x_1 + x_2 \quad \Rightarrow \quad \dot{x}_1 = -\frac{R}{L}x_1 - \frac{1}{L}x_2 + \frac{1}{L}u, \]

and capacitor relation \( x_1 = C\dot{x}_2 \) gives

\[ \dot{x}_2 = \frac{1}{C}x_1. \]

Hence:

\[ \mathbf{A}= \begin{bmatrix} -R/L & -1/L \\ 1/C & 0 \end{bmatrix}, \quad \mathbf{B}= \begin{bmatrix} 1/L \\ 0 \end{bmatrix}, \quad \mathbf{C}= \begin{bmatrix} 0 & 1 \end{bmatrix}, \quad \mathbf{D}=0. \]


Problem 3 (Dimensional Analysis of \( \mathbf{A} \)): In the mass–spring–damper realization with \( x_1=q \) [m], \( x_2=\dot{q} \) [m/s], determine the units of each entry of \( \mathbf{A} \) and verify consistency.

Solution:

  • \( \dot{x}_1 \) has units [m/s]. Since \( \dot{x}_1 = A_{12}x_2 \) and \( x_2 \) is [m/s], \( A_{12} \) is dimensionless.
  • \( \dot{x}_2 \) has units [m/s²]. Since \( \dot{x}_2 = A_{21}x_1 + A_{22}x_2 + B_2 u \): \( A_{21} \) must be [1/s²] so that [1/s²]·[m]=[m/s²]. Indeed \( k/m \) has units [1/s²]. \( A_{22} \) must be [1/s] so that [1/s]·[m/s]=[m/s²]. Indeed \( b/m \) has units [1/s].

Problem 4 (Coordinate Change and Physical Meaning): Let \( \mathbf{x}=\mathbf{T}\mathbf{z} \) where \( \mathbf{T} \) is invertible. Show that the transformed dynamics are \( \dot{\mathbf{z}}=\mathbf{T}^{-1}\mathbf{A}\mathbf{T}\mathbf{z}+\mathbf{T}^{-1}\mathbf{B}\mathbf{u} \) and \( \mathbf{y}=\mathbf{C}\mathbf{T}\mathbf{z}+\mathbf{D}\mathbf{u} \).

Solution: Differentiate \( \mathbf{x}=\mathbf{T}\mathbf{z} \) to obtain \( \dot{\mathbf{x}}=\mathbf{T}\dot{\mathbf{z}} \). Substitute into \( \dot{\mathbf{x}}=\mathbf{A}\mathbf{x}+\mathbf{B}\mathbf{u} \):

\[ \mathbf{T}\dot{\mathbf{z}}=\mathbf{A}\mathbf{T}\mathbf{z}+\mathbf{B}\mathbf{u} \quad \Rightarrow \quad \dot{\mathbf{z}}=\mathbf{T}^{-1}\mathbf{A}\mathbf{T}\mathbf{z}+\mathbf{T}^{-1}\mathbf{B}\mathbf{u}. \]

For the output, substitute \( \mathbf{x}=\mathbf{T}\mathbf{z} \) into \( \mathbf{y}=\mathbf{C}\mathbf{x}+\mathbf{D}\mathbf{u} \) to get \( \mathbf{y}=\mathbf{C}\mathbf{T}\mathbf{z}+\mathbf{D}\mathbf{u} \). Physically, this shows you may trade “interpretability” (physical states) for “convenience” (transformed states) while preserving input-output behavior.


Problem 5 (When \( \mathbf{D}\neq 0 \) Makes Physical Sense): Give a physical measurement example where \( \mathbf{D}\neq 0 \) is reasonable, and explain why it does not contradict the existence of dynamics.

Solution: Suppose the output sensor directly measures the applied input in addition to a dynamic contribution, e.g., a voltage sensor connected to an input source measures \( y(t)=u(t) \) plus a filtered internal voltage component. Then a model of the form \( y=\mathbf{C}\mathbf{x}+\mathbf{D}u \) with \( \mathbf{D}\neq 0 \) is natural: \( \mathbf{D}u \) represents the instantaneous feedthrough path, while \( \mathbf{C}\mathbf{x} \) represents the dynamic portion.

10. Summary

We interpreted state variables as physically meaningful “memory” coordinates, typically tied to energy storage. Through mechanical and electrical examples, we showed how \( \mathbf{A} \) encodes internal coupling and dissipation, \( \mathbf{B} \) encodes actuation pathways, \( \mathbf{C} \) encodes sensing, and \( \mathbf{D} \) encodes instantaneous feedthrough. We also proved (constructively) why independent storage variables naturally lead to first-order models, and we demonstrated multi-language implementations that preserve physical meaning.

11. References

  1. Kalman, R.E. (1960). On the general theory of control systems. Proceedings of the First International Congress of IFAC, Moscow, 481–492.
  2. Kalman, R.E., & Koepcke, R.W. (1959). Optimal synthesis of linear sampling control systems using generalized performance indices. Transactions of the ASME, Journal of Basic Engineering, 80, 182–196.
  3. Zadeh, L.A., & Desoer, C.A. (1963). Linear System Theory: The State Space Approach. (Foundational theoretical development; early state-space formalism disseminated through journal-era results and monographs.)
  4. Gilbert, E.G. (1963). Controllability and observability in multivariable control systems. Journal of the Society for Industrial and Applied Mathematics, Series A: Control, 1(2), 128–151.
  5. Rosenbrock, H.H. (1962). Distinctive problems of process control. Chemical Engineering Progress Symposium Series, 58(24), 1–5. (Early theoretical motivation for multivariable/state approaches.)
  6. Wonham, W.M. (1967). On pole assignment in multi-input controllable linear systems. IEEE Transactions on Automatic Control, 12(6), 660–665.
  7. Brockett, R.W. (1970). Finite Dimensional Linear Systems. Wiley. (Rigorous state-space foundations and interpretation of realizations.)