Пространство состояний: вектор x и матрицы A, B, C, D

Современный взгляд на системы: описываем их вектором состояния и матрицами.

Пространство состояний (state-space) — способ описать систему через вектор состояния $x$ и четыре матрицы $A$, $B$, $C$, $D$, связывающие вход, состояние и выход.

Зачем нужен ещё один подход

Передаточные функции прекрасны для одного входа и одного выхода. Но современные системы — дрон, ракета, робот-манипулятор — имеют много входов и выходов и сложно связанные состояния. Описывать их дробями неудобно. Пространство состояний — это компактный матричный язык, который одинаково естественно работает с системами любого размера и лёг в основу всей современной теории управления (Калман, LQR, оптимальное и адаптивное управление). Это шаг от классики (Огата, Дорф) к современному подходу.

Вектор состояния и четыре матрицы

Вместо одного выхода вводят вектор состояния x — список всех величин, полностью описывающих систему в данный момент. Для массы-пружины это $x = [\text{позиция}, \text{скорость}]$. Динамика записывается двумя уравнениями:

$$\dot{x} = Ax + Bu \quad \text{(как меняется состояние)}$$

$$y = Cx + Du \quad \text{(как из состояния получается выход)}$$

МатрицаСмысл
$A$ (система)как состояние влияет само на себя — внутренняя динамика
$B$ (вход)как вход $u$ воздействует на состояние
$C$ (выход)как из состояния получается измеряемый выход
$D$ (прямая связь)как вход напрямую попадает в выход (часто 0)

Как работает под капотом: масса-пружина в state-space

Запишем массу-пружину-демпфер в форме состояния. Состояние $[x, v]$, вход — сила $u$. Из $m \ddot{x} = u - b v - k_c x$ получаем

$$A = \begin{bmatrix} 0 & 1 \\ -k_c/m & -b/m \end{bmatrix}, \quad B = \begin{bmatrix} 0 \\ 1/m \end{bmatrix}, \quad C = \begin{bmatrix} 1 & 0 \end{bmatrix}$$

(измеряем позицию). Симулируем матричное уравнение явным Эйлером — без всяких библиотек, просто перемножая списки.

# x' = A x + B u, y = C x  (масса-пружина-демпфер)
m, b, kc = 1.0, 0.6, 3.0
A = [[0.0, 1.0], [-kc/m, -b/m]]
B = [0.0, 1.0/m]
C = [1.0, 0.0]
dt, u = 0.1, 3.0          # ступенчатая сила
x = [0.0, 0.0]            # вектор состояния [позиция, скорость]

print(" t   позиция(y)  скорость")
for step in range(0, 51):
    if step % 5 == 0:
        y = C[0]*x[0] + C[1]*x[1]
        print(f"{step*dt:4.1f}   {y:7.3f}   {x[1]:7.3f}")
    dx0 = A[0][0]*x[0] + A[0][1]*x[1] + B[0]*u
    dx1 = A[1][0]*x[0] + A[1][1]*x[1] + B[1]*u
    x[0] += dx0*dt; x[1] += dx1*dt
print(f"устоявшаяся позиция = {u/kc:.3f}")

Вывод:

 t   позиция(y)  скорость
 0.0     0.000     0.000
 0.5     0.278     1.246
 1.0     0.996     1.488
 1.5     1.616     0.708
 2.0     1.738    -0.433
 2.5     1.353    -1.125
 3.0     0.788    -0.972
 3.5     0.443    -0.195
 4.0     0.517     0.601
 4.5     0.901     0.886
 5.0     1.297     0.542
устоявшаяся позиция = 1.000

Та же масса-пружина, что и раньше, но записанная единообразно через матрицы. Прелесть в том, что этот код не изменится для системы из 10 состояний — поменяются лишь размеры матриц. Именно эта масштабируемость делает пространство состояний мощнее передаточных функций для сложных систем.

Связь с полюсами

Между подходами есть мост: полюса системы — это собственные значения матрицы A. Устойчивость в state-space читается так же: система устойчива, если все собственные значения $A$ имеют отрицательную действительную часть (лежат в левой полуплоскости). Так классический критерий полюсов переносится на матричный язык.

Преимущества перед передаточными функциями

Почему пространство состояний называют «современной» теорией, а передаточные функции — «классической»? Передаточная функция связывает один вход с одним выходом и прячет внутренние состояния. Пространство состояний делает их явными и работает с любым числом входов и выходов единообразно — а именно такие многомерные связанные системы (MIMO) и есть реальные дроны, роботы, самолёты, где рули, моторы и оси влияют друг на друга. Кроме того, на матричном языке элегантно формулируются мощные результаты: оптимальное управление (LQR), оптимальное оценивание (фильтр Калмана), управляемость и наблюдаемость. Передаточные функции остаются удобными для интуиции и простых одномерных контуров, но как только система становится сложной и связанной, инженеры переходят на язык состояний.

Частые ошибки

  • Путать состояние и выход. Состояние — полное внутреннее описание; выход — лишь то, что измеряем (через $C$). Их размерности часто разные.
  • Забыть, что порядок системы = размер вектора состояния. Масса-пружина второго порядка — это два состояния, а не одно.
  • Думать, что state-space сложнее. Для симуляции это просто перемножение матриц; концептуально часто яснее, чем дроби.

Итоги

  • Пространство состояний описывает систему вектором $x$ и матрицами $A$, $B$, $C$, $D$.
  • $\dot{x} = Ax + Bu$ задаёт динамику, $y = Cx + Du$ — выход; подход масштабируется на много входов/выходов.
  • Полюса = собственные значения $A$; устойчивость — все они в левой полуплоскости.
Проверьте себя
1. Что описывает вектор состояния x в пространстве состояний?
AТолько измеряемый выход
BВсе величины, полностью описывающие систему в данный момент
CКоэффициенты регулятора
DУставку
2. За что отвечает матрица A?
AЗа влияние входа на состояние
BЗа внутреннюю динамику: как состояние влияет само на себя
CЗа измерение выхода
DЗа прямую связь входа с выходом
3. Как связаны полюса и матрица A?
AНикак
BПолюса — это собственные значения матрицы A
CПолюса — это элементы матрицы B
DПолюса равны следу A
py
Курс по теме
Пройдите курс «Python с нуля» — по шагам, с проверкой
8 уроков · ~14 ч · теория, упражнения и экзамен с бейджем
Открыть курс →