ldl#
- scipy.linalg.ldl(A, lower=True, hermitian=True, overwrite_a=False, check_finite=True)[原始碼]#
計算對稱/ Hermitian 矩陣的 LDLt 或 Bunch-Kaufman 分解。
此函數返回一個區塊對角矩陣 D,該矩陣由大小最多為 2x2 的區塊組成,以及一個可能經過置換的單位下三角矩陣
L
,使得分解式A = L D L^H
或A = L D L^T
成立。如果 lower 為 False,則返回(同樣可能經過置換的)上三角矩陣作為外部因子。置換陣列可用於通過行洗牌簡單地將外部因子三角化,即
lu[perm, :]
是一個上/下三角矩陣。這也等效於與置換矩陣P.dot(lu)
相乘,其中P
是一個列置換的單位矩陣I[:, perm]
。根據布林值 lower 的值,僅參考輸入陣列的上三角或下三角部分。因此,輸入時的三角矩陣將給出與提供完整矩陣相同的結果。
- 參數:
- Aarray_like
方形輸入陣列
- lowerbool,選填
這會在分解的下三角和上三角外部因子之間切換。下三角 (
lower=True
) 是預設值。- hermitianbool,選填
對於複數值陣列,這定義了是假設
A = A.conj().T
還是A = A.T
。對於實數值陣列,此開關無效。- overwrite_abool,選填
允許覆寫 A 中的資料(可能提高效能)。預設值為 False。
- check_finitebool,選填
是否檢查輸入矩陣是否僅包含有限數字。停用可能會提高效能,但如果輸入確實包含無限值或 NaN,則可能會導致問題(崩潰、非終止)。
- 返回:
- lundarray
分解的(可能)經過置換的上/下三角外部因子。
- dndarray
分解的區塊對角乘數。
- permndarray
將 lu 帶入三角形式的行置換索引陣列。
- 引發:
- ValueError
如果輸入陣列不是方形。
- ComplexWarning
如果給定對角線上具有非零虛部的複數值陣列,並且 hermitian 設定為 True。
註解
此函數對稱矩陣使用
?SYTRF
常式,對 Hermitian 矩陣使用?HETRF
常式,這些常式來自 LAPACK。 有關演算法詳細資訊,請參閱 [1]。根據 lower 關鍵字值,僅參考輸入陣列的下三角或上三角部分。此外,此關鍵字還定義了分解的外部因子的結構。
在 1.1.0 版本中新增。
參考文獻
[1]J.R. Bunch, L. Kaufman, Some stable methods for calculating inertia and solving symmetric linear systems, Math. Comput. Vol.31, 1977. DOI:10.2307/2005787
範例
給定一個上三角陣列
a
,它表示具有其條目的完整對稱陣列,取得l
、「d」和置換向量 perm>>> import numpy as np >>> from scipy.linalg import ldl >>> a = np.array([[2, -1, 3], [0, 2, 0], [0, 0, 1]]) >>> lu, d, perm = ldl(a, lower=0) # Use the upper part >>> lu array([[ 0. , 0. , 1. ], [ 0. , 1. , -0.5], [ 1. , 1. , 1.5]]) >>> d array([[-5. , 0. , 0. ], [ 0. , 1.5, 0. ], [ 0. , 0. , 2. ]]) >>> perm array([2, 1, 0]) >>> lu[perm, :] array([[ 1. , 1. , 1.5], [ 0. , 1. , -0.5], [ 0. , 0. , 1. ]]) >>> lu.dot(d).dot(lu.T) array([[ 2., -1., 3.], [-1., 2., 0.], [ 3., 0., 1.]])