当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy linalg.ldl用法及代码示例


本文简要介绍 python 语言中 scipy.linalg.ldl 的用法。

用法:

scipy.linalg.ldl(A, lower=True, hermitian=True, overwrite_a=False, check_finite=True)#

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

此函数返回一个块对角矩阵 D,由大小最多为 2x2 的块以及一个可能置换的单位下三角矩阵组成L这样分解A = L D L^H或者A = L D L^T持有。如果降低为 False 则(再次可能置换)上三角矩阵作为外部因子返回。

置换数组可用于简单地通过行洗牌对外部因子进行三角化,即lu[perm, :] 是一个上/下三角矩阵。这也等同于与置换矩阵相乘 P.dot(lu) ,其中 P 是 column-permuted 单位矩阵 I[:, perm]

根据布尔值的值,仅引用输入数组的上三角或下三角部分。因此,输入时的三角矩阵将给出与提供完整矩阵相同的结果。

参数

A array_like

方输入数组

lower 布尔型,可选

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

hermitian 布尔型,可选

对于complex-valued 数组,这定义了假设是A = A.conj().T 还是A = A.T。对于实值数组,此开关无效。

overwrite_a 布尔型,可选

允许覆盖 A 中的数据(可能会提高性能)。默认值为假。

check_finite 布尔型,可选

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

返回

lu ndarray

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

d ndarray

分解的块对角乘数。

perm ndarray

row-permutation 索引数组将 lu 带入三角形。

抛出

ValueError

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

ComplexWarning

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

注意

此函数使用?SYTRF 例程用于对称矩阵,?HETRF 例程用于 LAPACK 中的 Hermitian 矩阵。有关算法的详细信息,请参见 [1]。

根据 lower 关键字值,仅引用输入数组的下三角部分或上三角部分。此外,这个关键字还定义了因式分解的外部因子的结构。

参考

[1]

J.R. Bunch,L. Kaufman,计算惯性和求解对称线性系统的一些稳定方法,数学。计算。 1977 年第 31 卷。DOI:10.2307/2005787

例子

给定一个上三角数组a表示完整的对称数组及其条目,获得l, ‘d’ 和置换向量烫发

>>> 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.]])

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.linalg.ldl。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。