numpy.linalg.solve#

linalg.solve(a, b)[source]#

解線性矩陣方程式,或線性純量方程式系統。

計算適定 (well-determined),亦即滿秩 (full rank) 線性矩陣方程式 ax = b 的「精確」解 x

參數:
a(…, M, M) 類陣列 (array_like)

係數矩陣。

b{(M,), (…, M, K)}, 類陣列 (array_like)

縱座標或「應變數」值。

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

系統 a x = b 的解。如果 b 的形狀為 (M,),則回傳形狀為 (…, M);如果 b 的形狀為 (…, M, K),則回傳形狀為 (…, M, K),其中 “…” 部分在 a 和 b 之間進行廣播 (broadcasted)。

拋出:
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),第二版,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