scipy.linalg.

solve#

scipy.linalg.solve(a, b, lower=False, overwrite_a=False, overwrite_b=False, check_finite=True, assume_a=None, transposed=False)[source]#

求解線性方程式組 a @ x == b,針對方形 a 矩陣的未知數 x

如果已知資料矩陣為特定類型,則將對應的字串提供給 assume_a 鍵,以選擇專用的求解器。可用的選項為

對角矩陣

‘diagonal’

三對角矩陣

‘tridiagonal’

帶狀矩陣

‘banded’

上三角矩陣

‘upper triangular’

下三角矩陣

‘lower triangular’

對稱矩陣

‘symmetric’ (或 ‘sym’)

Hermitian 矩陣

‘hermitian’ (或 ‘her’)

正定矩陣

‘positive definite’ (或 ‘pos’)

一般矩陣

‘general’ (或 ‘gen’)

參數:
a(N, N) 類陣列

方形輸入資料

b(N, NRHS) 類陣列

右手邊的輸入資料。

lowerbool,預設值:False

除非 assume_a'sym''her''pos' 其中之一,否則會被忽略。若為 True,則計算僅使用 a 的下三角矩陣中的資料;對角線以上的項目會被忽略。若為 False(預設值),則計算僅使用 a 的上三角矩陣中的資料;對角線以下的項目會被忽略。

overwrite_abool,預設值:False

允許覆寫 a 中的資料(可能提升效能)。

overwrite_bbool,預設值:False

允許覆寫 b 中的資料(可能提升效能)。

check_finitebool,預設值:True

是否檢查輸入矩陣是否僅包含有限數字。停用此選項可能會提高效能,但如果輸入包含無限大或 NaN,則可能會導致問題(崩潰、無法終止)。

assume_astr,選用

有效條目如上所述。如果省略或 None,則會執行檢查以識別結構,以便可以呼叫適當的求解器。

transposedbool,預設值:False

若為 True,則求解 a.T @ x == b。若 a 為複數矩陣,則引發 NotImplementedError

回傳值:
x(N, NRHS) ndarray

解陣列。

引發:
ValueError

如果偵測到大小不符或輸入 a 不是方形矩陣。

LinAlgError

如果矩陣為奇異矩陣。

LinAlgWarning

如果偵測到病態條件的輸入 a。

NotImplementedError

如果 transposed 為 True 且輸入 a 為複數矩陣。

註解

如果輸入 b 矩陣是具有 N 個元素的一維陣列,當與 NxN 輸入 a 一起提供時,即使大小明顯不符,也會被視為有效的行向量。這與 numpy.dot() 行為相容,且回傳的結果仍然是一維陣列。

一般、對稱、 Hermitian 和正定解分別透過呼叫 LAPACK 的 ?GESV、?SYSV、?HESV 和 ?POSV 常式獲得。

陣列的資料類型定義了呼叫哪個求解器,而與值無關。換句話說,即使複數陣列條目具有精確為零的虛部,也將根據陣列的資料類型呼叫複數求解器。

範例

給定 ab,求解 x

>>> import numpy as np
>>> a = np.array([[3, 2, 0], [1, -1, 0], [0, 5, 1]])
>>> b = np.array([2, 4, -1])
>>> from scipy import linalg
>>> x = linalg.solve(a, b)
>>> x
array([ 2., -2.,  9.])
>>> np.dot(a, x) == b
array([ True,  True,  True], dtype=bool)