Пространство состояний: вектор 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$; устойчивость — все они в левой полуплоскости.