numpy.linalg.solve#

linalg.solve(a, b)[源代码]#

求解线性矩阵方程或线性标量方程组.

计算适定(即满秩)线性矩阵方程 ax = b 的“精确”解 x .

参数:
a(…, M, M) 类数组

系数矩阵.

b{(M,), (…, M, K)}, array_like

纵坐标或“因变量”值.

返回:
x{(…, M,), (…, M, K)} ndarray

系统 a x = b 的解.如果 b 的形状为 (M,),则返回的形状为 (…, M);如果 b 的形状为 (…, M, K),则返回的形状为 (…, M, K),其中“…”部分在 a 和 b 之间广播.

提出:
LinAlgError

如果 a 是奇异的或非正方形的.

参见

scipy.linalg.solve

SciPy 中类似的函数.

注释

广播规则适用,详情请参阅 numpy.linalg 的文档.

这些解是使用 LAPACK 例程 _gesv 计算的.

a 必须是正方形且满秩的,即所有行(或等效地,列)必须是线性独立的;如果其中一个不成立,请使用 lstsq 来获得系统/方程的最小二乘最佳“解”.

在 2.0 版本发生变更: 只有当 b 数组恰好是 1 维时,才将其视为形状为 (M,) 的列向量.在所有其他情况下,它都被视为 (M, K) 矩阵的堆栈.以前,如果 b.ndim 等于 a.ndim - 1,则 b 将被视为 (M,) 向量的堆栈.

参考

[1]

G. Strang, Linear Algebra and Its Applications, 2nd Ed., Orlando, FL, Academic Press, Inc., 1980, pg. 22.

示例

求解方程组: x0 + 2 * x1 = 13 * x0 + 5 * x1 = 2 :

>>> import numpy as np
>>> a = np.array([[1, 2], [3, 5]])
>>> b = np.array([1, 2])
>>> x = np.linalg.solve(a, b)
>>> x
array([-1.,  1.])

检查解决方案是否正确:

>>> np.allclose(np.dot(a, x), b)
True