Пространство состояний: вектор x и матрицы A, B, C, D
Современный взгляд на системы: описываем их вектором состояния и матрицами.
Пространство состояний (state-space) — способ описать систему через вектор состояния
xи четыре матрицы A, B, C, D, связывающие вход, состояние и выход.
Зачем нужен ещё один подход
Передаточные функции прекрасны для одного входа и одного выхода. Но современные системы — дрон, ракета, робот-манипулятор — имеют много входов и выходов и сложно связанные состояния. Описывать их дробями неудобно. Пространство состояний — это компактный матричный язык, который одинаково естественно работает с системами любого размера и лёг в основу всей современной теории управления (Калман, LQR, оптимальное и адаптивное управление). Это шаг от классики (Огата, Дорф) к современному подходу.
Вектор состояния и четыре матрицы
Вместо одного выхода вводят вектор состояния x — список всех величин, полностью описывающих систему в данный момент. Для массы-пружины это x = [позиция, скорость]. Динамика записывается двумя уравнениями:
x’ = A·x + B·u (как меняется состояние)
y = C·x + D·u (как из состояния получается выход)| Матрица | Смысл |
| A (система) | как состояние влияет само на себя — внутренняя динамика |
| B (вход) | как вход u воздействует на состояние |
| C (выход) | как из состояния получается измеряемый выход |
| D (прямая связь) | как вход напрямую попадает в выход (часто 0) |
Как работает под капотом: масса-пружина в state-space
Запишем массу-пружину-демпфер в форме состояния. Состояние [x, v], вход — сила u. Из m·x'' = u - b·v - kс·x получаем A = [[0,1],[-kс/m, -b/m]], B = [0, 1/m], C = [1, 0] (измеряем позицию). Симулируем матричное уравнение явным Эйлером — без всяких библиотек, просто перемножая списки.
# 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.
- x'=Ax+Bu задаёт динамику, y=Cx+Du — выход; подход масштабируется на много входов/выходов.
- Полюса = собственные значения A; устойчивость — все они в левой полуплоскости.