scipy.linalg.

solve_discrete_lyapunov#

scipy.linalg.solve_discrete_lyapunov(a, q, метод=None)[источник]#

Решает дискретное уравнение Ляпунова \(AXA^H - X + Q = 0\).

Документация написана в предположении, что аргументы-массивы имеют указанные «основные» формы. Однако аргументы-массивы этой функции могут иметь дополнительные «пакетные» измерения, добавленные перед основной формой. В этом случае массив обрабатывается как пакет низкоразмерных срезов; см. Пакетные линейные операции подробности.

Параметры:
a, q(M, M) array_like

Квадратные матрицы, соответствующие A и Q в уравнении выше соответственно. Должны иметь одинаковую форму.

метод{'direct', 'bilinear'}, необязательно

Тип решателя.

Если не задано, выбирается как direct if M меньше 10 и bilinear в противном случае.

Возвращает:
xndarray

Решение дискретного уравнения Ляпунова

Смотрите также

solve_continuous_lyapunov

вычисляет решение уравнения Ляпунова непрерывного времени

Примечания

Этот раздел описывает доступные решатели, которые можно выбрать с помощью параметра 'method'. Метод по умолчанию — прямой if M меньше 10 и bilinear в противном случае.

Метод прямой использует прямое аналитическое решение дискретного уравнения Ляпунова. Алгоритм приведен, например, в [1]. Однако, он требует линейного решения системы с размерностью \(M^2\) так что производительность быстро ухудшается даже для умеренно больших матриц.

Метод билинейный использует билинейное преобразование для преобразования дискретного уравнения Ляпунова в непрерывное уравнение Ляпунова \((BX+XB'=-C)\) где \(B=(A-I)(A+I)^{-1}\) и \(C=2(A' + I)^{-1} Q (A + I)^{-1}\). Непрерывное уравнение может быть эффективно решено, так как это частный случай уравнения Сильвестра. Алгоритм преобразования взят из Попова (1964), как описано в [2].

Добавлено в версии 0.11.0.

Ссылки

[1]

“Уравнение Ляпуновa”, Википедия, https://en.wikipedia.org/wiki/Lyapunov_equation#Discrete_time

[2]

Gajic, Z., and M.T.J. Qureshi. 2008. Уравнение Ляпунова для матриц в устойчивости и управлении системами. Серия книг по инженерии Dover Publications.

Примеры

Учитывая a и q решить для x:

>>> import numpy as np
>>> from scipy import linalg
>>> a = np.array([[0.2, 0.5],[0.7, -0.9]])
>>> q = np.eye(2)
>>> x = linalg.solve_discrete_lyapunov(a, q)
>>> x
array([[ 0.70872893,  1.43518822],
       [ 1.43518822, -2.4266315 ]])
>>> np.allclose(a.dot(x).dot(a.T)-x, -q)
True