Перейти к содержанию

Урок 2 — Управляемость и наблюдаемость

1. Введение в оценку систем управления

После того как мы научились представлять динамические системы в пространстве состояний, возникает два фундаментальных вопроса:

  1. Управляемость: Можем ли мы перевести систему из любого начального состояния в любое конечное состояние за конечное время, используя доступные нам управляющие воздействия?
  2. Наблюдаемость: Можем ли мы определить внутреннее состояние системы, наблюдая только за ее выходными сигналами?

Эти два понятия, управляемость и наблюдаемость, являются ключевыми для анализа и синтеза систем управления. Они определяют, насколько хорошо мы можем контролировать и отслеживать поведение системы. Впервые эти концепции были введены Рудольфом Калманом.

2. Управляемость (Controllability)

Определение: Система называется полностью управляемой, если существует такое неограниченное управляющее воздействие u(t), которое может перевести систему из любого начального состояния x(t₀) в любое конечное состояние x(t₁) за конечный промежуток времени t₁ - t₀.

Проще говоря, управляемость означает, что мы можем "дотянуться" до любого состояния в пространстве состояний, манипулируя входами системы. Если система неуправляема, то существуют такие состояния, в которые мы никогда не сможем ее перевести, как бы мы ни старались.

2.1. Критерий управляемости Калмана

Для линейных стационарных систем, описываемых уравнениями:

ẋ = Ax + Bu

критерием управляемости является ранг матрицы управляемости P:

P = [B, AB, A²B, ..., Aⁿ⁻¹B]

где n – размерность вектора состояния (количество переменных состояния).

Система полностью управляема тогда и только тогда, когда ранг матрицы управляемости равен размерности пространства состояний:

rank(P) = n

Если rank(P) < n, то система является неуправляемой. Это означает, что существуют "недостижимые" подпространства в пространстве состояний.

3. Наблюдаемость (Observability)

Определение: Система называется полностью наблюдаемой, если по известным входным сигналам u(t) и выходным сигналам y(t) за конечный промежуток времени t₁ - t₀ можно однозначно определить начальное состояние системы x(t₀).

Наблюдаемость показывает, можем ли мы, глядя на "поведение" системы снаружи (на ее выходы), понять, что происходит у нее "внутри" (каково ее состояние). Если система ненаблюдаема, то существуют такие внутренние состояния, которые никак не проявляются на выходе, и мы не можем их различить.

3.1. Критерий наблюдаемости Калмана

Для линейных стационарных систем, описываемых уравнениями:

ẋ = Ax + Bu
y = Cx + Du

критерием наблюдаемости является ранг матрицы наблюдаемости Q:

    [  C  ]
    [ CA  ]
Q = [ CA² ]
    [ ... ]
    [CAⁿ⁻¹]

Система полностью наблюдаема тогда и только тогда, когда ранг матрицы наблюдаемости равен размерности пространства состояний:

rank(Q) = n

Если rank(Q) < n, то система является ненаблюдаемой.

4. Принцип дуальности

Существует важная связь между управляемостью и наблюдаемостью, известная как принцип дуальности. Он гласит, что система (A, B) управляема тогда и только тогда, когда дуальная ей система (Aᵀ, Cᵀ) наблюдаема, и наоборот.

Это означает, что математические методы для проверки управляемости и наблюдаемости очень похожи.

5. Ссылки на материалы

  1. Наблюдаемость (теория управления) // Википедия. – URL: https://ru.wikipedia.org/wiki/Наблюдаемость_(теория_управления)
  2. Управляемость и наблюдаемость // Studfile. – URL: https://studfile.net/preview/2202942/page:8/
  3. Controllability and Observability // Rutgers ECE. – URL: http://eceweb1.rutgers.edu/~gajic/psfiles/chap5traCO.pdf

6. Практический пример на Python

Проверим управляемость и наблюдаемость системы из первого семинара и рассмотрим случаи неуправляемых и ненаблюдаемых систем.

import numpy as np
import control as ctrl
from scipy.linalg import matrix_rank

def check_controllability(A, B):
    """Проверка управляемости системы"""
    n = A.shape[0]  # размерность системы

    # Построение матрицы управляемости P = [B, AB, A²B, ..., A^(n-1)B]
    P = B.copy()
    AB = A @ B

    for i in range(1, n):
        P = np.hstack([P, AB])
        AB = A @ AB

    rank_P = matrix_rank(P)

    print(f"Матрица управляемости P:")
    print(P)
    print(f"Ранг матрицы управляемости: {rank_P}")
    print(f"Размерность системы: {n}")

    if rank_P == n:
        print("✓ Система ПОЛНОСТЬЮ УПРАВЛЯЕМА")
        return True
    else:
        print("✗ Система НЕ ПОЛНОСТЬЮ УПРАВЛЯЕМА")
        return False

def check_observability(A, C):
    """Проверка наблюдаемости системы"""
    n = A.shape[0]  # размерность системы

    # Построение матрицы наблюдаемости Q = [C; CA; CA²; ...; CA^(n-1)]
    Q = C.copy()
    CA = C @ A

    for i in range(1, n):
        Q = np.vstack([Q, CA])
        CA = CA @ A

    rank_Q = matrix_rank(Q)

    print(f"Матрица наблюдаемости Q:")
    print(Q)
    print(f"Ранг матрицы наблюдаемости: {rank_Q}")
    print(f"Размерность системы: {n}")

    if rank_Q == n:
        print("✓ Система ПОЛНОСТЬЮ НАБЛЮДАЕМА")
        return True
    else:
        print("✗ Система НЕ ПОЛНОСТЬЮ НАБЛЮДАЕМА")
        return False

# Пример 1: Управляемая и наблюдаемая система (масса-пружина-демпфер)
print("=" * 60)
print("ПРИМЕР 1: Управляемая и наблюдаемая система")
print("=" * 60)

A1 = np.array([[0, 1],
               [-4, -1]])

B1 = np.array([[0],
               [1]])

C1 = np.array([[1, 0]])  # измеряем положение

print("Система 1:")
print(f"A = \n{A1}")
print(f"B = \n{B1}")
print(f"C = \n{C1}")
print()

controllable1 = check_controllability(A1, B1)
print()
observable1 = check_observability(A1, C1)

# Пример 2: Неуправляемая система
print("\n" + "=" * 60)
print("ПРИМЕР 2: Неуправляемая система")
print("=" * 60)

# Система с блочно-диагональной структурой
A2 = np.array([[0, 1, 0],
               [-2, -1, 0],
               [0, 0, -3]])

B2 = np.array([[0],
               [1],
               [0]])  # управление не влияет на третье состояние

C2 = np.array([[1, 0, 1]])

print("Система 2:")
print(f"A = \n{A2}")
print(f"B = \n{B2}")
print(f"C = \n{C2}")
print()

controllable2 = check_controllability(A2, B2)
print()
observable2 = check_observability(A2, C2)

# Пример 3: Ненаблюдаемая система
print("\n" + "=" * 60)
print("ПРИМЕР 3: Ненаблюдаемая система")
print("=" * 60)

A3 = np.array([[0, 1],
               [-4, -1]])

B3 = np.array([[0],
               [1]])

C3 = np.array([[0, 1]])  # измеряем только скорость, но не положение

print("Система 3:")
print(f"A = \n{A3}")
print(f"B = \n{B3}")
print(f"C = \n{C3}")
print()

controllable3 = check_controllability(A3, B3)
print()
observable3 = check_observability(A3, C3)

# Использование встроенных функций библиотеки control
print("\n" + "=" * 60)
print("ПРОВЕРКА С ПОМОЩЬЮ БИБЛИОТЕКИ CONTROL")
print("=" * 60)

# Создание систем
sys1 = ctrl.ss(A1, B1, C1, 0)
sys2 = ctrl.ss(A2, B2, C2, 0)
sys3 = ctrl.ss(A3, B3, C3, 0)

# Проверка с помощью встроенных функций
print("Система 1:")
print(f"Управляемость: {ctrl.ctrb(A1, B1).shape[1] == matrix_rank(ctrl.ctrb(A1, B1)) == A1.shape[0]}")
print(f"Наблюдаемость: {ctrl.obsv(A1, C1).shape[0] == matrix_rank(ctrl.obsv(A1, C1)) == A1.shape[0]}")

print("\nСистема 2:")
print(f"Управляемость: {ctrl.ctrb(A2, B2).shape[1] == matrix_rank(ctrl.ctrb(A2, B2)) == A2.shape[0]}")
print(f"Наблюдаемость: {ctrl.obsv(A2, C2).shape[0] == matrix_rank(ctrl.obsv(A2, C2)) == A2.shape[0]}")

print("\nСистема 3:")
print(f"Управляемость: {ctrl.ctrb(A3, B3).shape[1] == matrix_rank(ctrl.ctrb(A3, B3)) == A3.shape[0]}")
print(f"Наблюдаемость: {ctrl.obsv(A3, C3).shape[0] == matrix_rank(ctrl.obsv(A3, C3)) == A3.shape[0]}")

# Демонстрация принципа дуальности
print("\n" + "=" * 60)
print("ДЕМОНСТРАЦИЯ ПРИНЦИПА ДУАЛЬНОСТИ")
print("=" * 60)

# Если система (A, B) управляема, то дуальная система (A^T, C^T) наблюдаема
A_dual = A1.T
C_dual = B1.T

print("Исходная система (A1, B1):")
print(f"Управляемость: {check_controllability(A1, B1)}")

print("\nДуальная система (A1^T, B1^T):")
print(f"Наблюдаемость: {check_observability(A_dual, C_dual)}")

Этот пример демонстрирует:

  1. Алгоритм проверки управляемости через построение и анализ ранга матрицы управляемости
  2. Алгоритм проверки наблюдаемости через построение и анализ ранга матрицы наблюдаемости
  3. Примеры различных типов систем: полностью управляемых/наблюдаемых, неуправляемых и ненаблюдаемых
  4. Использование встроенных функций библиотеки control для проверки
  5. Демонстрацию принципа дуальности между управляемостью и наблюдаемостью