scipy.linalg.

cho_factor#

scipy.linalg.cho_factor(a, lower=False, overwrite_a=False, check_finite=True)[原始碼]#

計算矩陣的 Cholesky 分解,用於 cho_solve

傳回包含 Cholesky 分解的矩陣, Hermitian 正定矩陣 aA = L L*A = U* U。傳回值可以直接作為 cho_solve 的第一個參數使用。

警告

傳回的矩陣在 Cholesky 分解未使用的條目中也包含隨機資料。如果您需要將這些條目歸零,請改用函式 cholesky

參數:
a(M, M) array_like

要分解的矩陣

lowerbool,可選

是否計算上或下三角 Cholesky 分解。在分解期間,僅參考矩陣的選定一半。(預設:上三角)

overwrite_abool,可選

是否覆寫 a 中的資料(可能提高效能)

check_finitebool,可選

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

傳回:
c(M, M) ndarray

其上或下三角包含 a 的 Cholesky 因子的矩陣。矩陣的其他部分包含隨機資料。

lowerbool

旗標,指示因子是在下三角還是上三角中

引發:
LinAlgError

如果分解失敗則引發。

參見

cho_solve

使用矩陣的 Cholesky 分解求解線性方程式組。

註解

在有限性檢查期間(如果選取),將檢查整個矩陣 a。在分解期間,假設 a 是對稱或 Hermitian(如適用),並且僅參考選項 lower 選取的一半。因此,如果 a 是非對稱/非 Hermitian,如果選定一半表示的對稱/Hermitian 矩陣是正定的,cholesky 仍然可能成功,但如果另一半中的元素是非有限的,則可能會失敗。

範例

>>> import numpy as np
>>> from scipy.linalg import cho_factor
>>> A = np.array([[9, 3, 1, 5], [3, 7, 5, 1], [1, 5, 9, 2], [5, 1, 2, 6]])
>>> c, low = cho_factor(A)
>>> c
array([[3.        , 1.        , 0.33333333, 1.66666667],
       [3.        , 2.44948974, 1.90515869, -0.27216553],
       [1.        , 5.        , 2.29330749, 0.8559528 ],
       [5.        , 1.        , 2.        , 1.55418563]])
>>> np.allclose(np.triu(c).T @ np. triu(c) - A, np.zeros((4, 4)))
True