/
Chronos
/
Control_lib
Обзор
Документация
Войти
/
Chronos
/
Control_lib
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
LQR.py
46 строк
2 KB
Chronos
Final version (left only Kharitonov theorem)
06 май 2025, 13:14
06 май 2025, 13:14
87d8d1a
Код
Авторство
О чём код?
import numpy as np from scipy.linalg import solve_continuous_are, solve_discrete_are import sympy as sp # Непрерывный случай LQR def lqr_continuous(A, B, Q, R): """ Решает непрерывную задачу LQR Параметры: A, B - матрицы системы dx/dt = A x + B u Q - матрица стоимости состояния (полуопределенная положительная) R - матрица стоимости управления (определенная положительная) Возвращает: K - матрица коэффициентов обратной связи u = -Kx P - решение уравнения Риккати """ # Решение уравнения Риккати P = solve_continuous_are(A, B, Q, R) # Вычисление матрицы коэффициентов обратной связи K = -np.linalg.inv(R) @ B.T @ P return K, P # Дискретный случай LQR def lqr_discrete(A, B, Q, R): """ Решает дискретную задачу LQR Параметры: A, B - матрицы системы x[k+1] = A x[k] + B u[k] Q - матрица стоимости состояния R - матрица стоимости управления Возвращает: K - матрица коэффициентов обратной связи u = -Kx P - решение уравнения Риккати """ # Решение уравнения Риккати P = solve_discrete_are(A, B, Q, R) # Вычисление матрицы коэффициентов обратной связи K = -np.linalg.inv(B.T @ P @ B + R) @ (B.T @ P @ A) return K, P