scipy.linalg.
cho_factor#
- scipy.linalg.cho_factor(a, lower=False, overwrite_a=False, check_finite=True)[原始碼]#
計算矩陣的 Cholesky 分解,用於 cho_solve
傳回包含 Cholesky 分解的矩陣, Hermitian 正定矩陣 a 的
A = 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