scipy.linalg.

solve_sylvester#

scipy.linalg.solve_sylvester(a, b, q)[источник]#

Вычисляет решение (X) уравнения Сильвестра \(AX + XB = Q\).

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

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

Ведущая матрица уравнения Сильвестра

b(N, N) array_like

Задняя матрица уравнения Сильвестра

q(M, N) array_like

Правая часть

Возвращает:
x(M, N) ndarray

Решение уравнения Сильвестра.

Вызывает:
LinAlgError

Если решение не было найдено

Примечания

Вычисляет решение матричного уравнения Сильвестра с помощью алгоритма Бартелса-Стюарта. Матрицы A и B сначала подвергаются разложениям Шура. Полученные матрицы используются для построения альтернативного уравнения Сильвестра (RY + YS^T = F), где матрицы R и S находятся в квазитреугольной форме (или, когда R, S или F комплексные, в треугольной форме). Упрощённое уравнение затем решается с использованием *TRSYL непосредственно из LAPACK.

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

Примеры

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

>>> import numpy as np
>>> from scipy import linalg
>>> a = np.array([[-3, -2, 0], [-1, -1, 3], [3, -5, -1]])
>>> b = np.array([[1]])
>>> q = np.array([[1],[2],[3]])
>>> x = linalg.solve_sylvester(a, b, q)
>>> x
array([[ 0.0625],
       [-0.5625],
       [ 0.6875]])
>>> np.allclose(a.dot(x) + x.dot(b), q)
True