scipy.linalg.

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^HA = 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。

另請參閱

choleskylu

註解

此函數對稱矩陣使用 ?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.]])