scipy.linalg.
solve_sylvester#
- scipy.linalg.solve_sylvester(a, b, q)[源代码]#
计算 Sylvester 方程 \(AX + XB = Q\) 的解 (X)。
文档假设数组参数具有指定的“核心”形状。但是,此函数的数组参数可能在核心形状之前附加额外的“批次”维度。在这种情况下,数组被视为低维切片的批次;详见批次线性运算。
- 参数:
- a(M, M) 数组类型
Sylvester 方程的前导矩阵
- b(N, N) 数组类型
Sylvester 方程的后导矩阵
- q(M, N) 数组类型
右侧
- 返回:
- x(M, N) ndarray
Sylvester 方程的解。
- 引发:
- LinAlgError
如果未找到解
备注
通过 Bartels-Stewart 算法计算 Sylvester 矩阵方程的解。A 和 B 矩阵首先进行 Schur 分解。得到的矩阵用于构造一个替代的 Sylvester 方程 (
RY + YS^T = F
),其中 R 和 S 矩阵呈准三角形式(或者,当 R、S 或 F 为复数时,呈三角形式)。然后直接使用 LAPACK 中的*TRSYL
求解简化方程。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