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