scipy.linalg.ldl

scipy.linalg.ldl(A, lower=True, hermitian=True, overwrite_a=False, check_finite=True)[源代码]

计算对称/厄米特矩阵的LDLT或Bunch-Kaufman分解。

此函数返回挡路对角线矩阵D,该矩阵D由大小最大为2x2的块组成,还返回可能置换的单位下三角矩阵 L 使得因式分解 A = L D L^HA = L D L^T 等一下。如果 lower 为假,则(同样可能被置换)上三角矩阵作为外部因子返回。

置换阵列可以简单地通过行洗牌来将外部因素三角化,即, lu[perm, :] 是上/下三角矩阵。这也等同于与置换矩阵相乘。 P.dot(lu) ,在哪里 P 是列置换的单位矩阵。 I[:, perm]

取决于布尔值 lower ,则仅引用输入数组的上三角部分或下三角部分。因此,输入三角形矩阵将产生与提供完整矩阵相同的结果。

参数
Aarray_like

正方形输入阵列

lower布尔值,可选

这在因子分解的下三角外部因子和上三角外部因子之间切换。下三角 (lower=True )是默认值。

hermitian布尔值,可选

对于复值数组,这定义是否 A = A.conj().TA = A.T 是假定的。对于实值数组,此开关不起作用。

overwrite_a布尔值,可选

允许覆盖中的数据 A (可以增强性能)。默认值为False。

check_finite布尔值,可选

是否检查输入矩阵是否仅包含有限个数字。禁用可能会带来性能提升,但如果输入确实包含无穷大或NAN,则可能会导致问题(崩溃、非终止)。

退货
lundarray

因子分解的(可能)排列的上/下三角外部因子。

dndarray

因式分解的挡路对角乘子。

permndarray

使lu变为三角形的行置换索引数组。

加薪
ValueError

如果输入数组不是正方形。

ComplexWarning

如果给定对角线上具有非零虚部的复数组,并且Hermitian设置为True。

参见

cholesky, lu

注意事项

此函数使用 ?SYTRF 对称矩阵的例程和 ?HETRF 来自LAPACK的厄米特矩阵的例程。看见 [1] 有关算法的详细信息,请参阅。

具体取决于 lower 关键字值,则仅引用输入数组的下三角部分或上三角部分。此外,该关键字还定义了因子分解的外部因素的结构。

1.1.0 新版功能.

参考文献

1

J·R·邦奇,L·考夫曼,计算惯性和求解对称线性方程组的几种稳定方法,数学。电脑。1977年第31卷。 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.]])