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


Julia LinearAlgebra.ldlt用法及代码示例


用法一

ldlt(A::SparseMatrixCSC; shift = 0.0, check = true, perm=nothing) -> CHOLMOD.Factor

计算LDL' 稀疏矩阵的分解A.A必须是SparseMatrixCSC或一个LinearAlgebra.Symmetric/LinearAlgebra.Hermitian一个视图SparseMatrixCSC.请注意,即使A没有类型标签,它仍然必须是对称的或 Hermitian。使用fill-reducing 排列。F = ldlt(A)最常用于求解方程组A*x = bF\b.返回的分解对象F也支持方法LinearAlgebra.diag,LinearAlgebra.det,LinearAlgebra.logdet, 和inv方法.您可以从F使用F.L.但是,由于默认情况下启用了透视,因此分解在内部表示为A == P'*L*D*L'*P有一个置换矩阵P;只使用L不考虑P会给出不正确的答案。为了包括排列的影响,通常最好提取 "combined" 因子,例如PtL = F.PtL(相当于P'*L) 和LtP = F.UP(相当于L'*P)。支持因子的完整列表是:L, :PtL, :D, :UP, :U, :LD, :DU, :PtLD, :DUP.

check = true 时,如果分解失败,则会引发错误。当 check = false 时,检查分解的有效性(通过 issuccess )由用户负责。

设置可选的 shift 关键字参数计算 A+shift*I 而不是 A 的分解。如果提供了perm 参数,它应该是1:size(A,1) 的排列,给出使用的顺序(而不是 CHOLMOD 的默认 AMD 顺序)。

注意

此方法使用 SuiteSparse 中的 CHOLMOD 库,该库仅支持双打或复双打。不属于这些元素类型的输入矩阵将酌情转换为SparseMatrixCSC{Float64}SparseMatrixCSC{ComplexF64}

CHOLMOD 中的许多其他函数都已包装,但未从 Base.SparseArrays.CHOLMOD 模块导出。

用法二

ldlt(S::SymTridiagonal) -> LDLt

计算实对称三对角矩阵SLDLt 分解,使得S = L*Diagonal(d)*L' 其中L 是单位下三角矩阵,d 是向量。 LDLt 因式分解 F = ldlt(S) 的主要用途是用 F\b 求解线性方程组 Sx = b

例子

julia> S = SymTridiagonal([3., 4., 5.], [1., 2.])
3×3 SymTridiagonal{Float64, Vector{Float64}}:
 3.0  1.0   ⋅
 1.0  4.0  2.0
  ⋅   2.0  5.0

julia> ldltS = ldlt(S);

julia> b = [6., 7., 8.];

julia> ldltS \ b
3-element Vector{Float64}:
 1.7906976744186047
 0.627906976744186
 1.3488372093023255

julia> S \ b
3-element Vector{Float64}:
 1.7906976744186047
 0.627906976744186
 1.3488372093023255

相关用法


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