本文简要介绍 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.]])
相关用法
- Python SciPy linalg.lu_factor用法及代码示例
- Python SciPy linalg.lsqr用法及代码示例
- Python SciPy linalg.lu_solve用法及代码示例
- Python SciPy linalg.lu用法及代码示例
- Python SciPy linalg.logm用法及代码示例
- Python SciPy linalg.leslie用法及代码示例
- Python SciPy linalg.lsmr用法及代码示例
- Python SciPy linalg.lobpcg用法及代码示例
- Python SciPy linalg.lgmres用法及代码示例
- Python SciPy linalg.lstsq用法及代码示例
- Python SciPy linalg.eigvalsh_tridiagonal用法及代码示例
- Python SciPy linalg.cdf2rdf用法及代码示例
- Python SciPy linalg.LaplacianNd用法及代码示例
- Python SciPy linalg.solve_circulant用法及代码示例
- Python SciPy linalg.polar用法及代码示例
- Python SciPy linalg.clarkson_woodruff_transform用法及代码示例
- Python SciPy linalg.rsf2csf用法及代码示例
- Python SciPy linalg.hessenberg用法及代码示例
- Python SciPy linalg.tril用法及代码示例
- Python SciPy linalg.triu用法及代码示例
- Python SciPy linalg.svd用法及代码示例
- Python SciPy linalg.ishermitian用法及代码示例
- Python SciPy linalg.invhilbert用法及代码示例
- Python SciPy linalg.factorized用法及代码示例
- Python SciPy linalg.SuperLU用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.linalg.ldl。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。