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^H
或A = L D L^T
等一下。如果 lower 为假,则(同样可能被置换)上三角矩阵作为外部因子返回。置换阵列可以简单地通过行洗牌来将外部因素三角化,即,
lu[perm, :]
是上/下三角矩阵。这也等同于与置换矩阵相乘。P.dot(lu)
,在哪里P
是列置换的单位矩阵。I[:, perm]
。取决于布尔值 lower ,则仅引用输入数组的上三角部分或下三角部分。因此,输入三角形矩阵将产生与提供完整矩阵相同的结果。
- 参数
- Aarray_like
正方形输入阵列
- lower布尔值,可选
这在因子分解的下三角外部因子和上三角外部因子之间切换。下三角 (
lower=True
)是默认值。- hermitian布尔值,可选
对于复值数组,这定义是否
A = A.conj().T
或A = A.T
是假定的。对于实值数组,此开关不起作用。- overwrite_a布尔值,可选
允许覆盖中的数据 A (可以增强性能)。默认值为False。
- check_finite布尔值,可选
是否检查输入矩阵是否仅包含有限个数字。禁用可能会带来性能提升,但如果输入确实包含无穷大或NAN,则可能会导致问题(崩溃、非终止)。
- 退货
- lundarray
因子分解的(可能)排列的上/下三角外部因子。
- dndarray
因式分解的挡路对角乘子。
- permndarray
使lu变为三角形的行置换索引数组。
- 加薪
- ValueError
如果输入数组不是正方形。
- ComplexWarning
如果给定对角线上具有非零虚部的复数组,并且Hermitian设置为True。
注意事项
此函数使用
?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.]])