用法一
cholesky(A::SparseMatrixCSC; shift = 0.0, check = true, perm = nothing) -> CHOLMOD.Factor
計算稀疏正定矩陣的 Cholesky 分解A.A必須是SparseMatrixCSC或一個LinearAlgebra.Symmetric/LinearAlgebra.Hermitian一個視圖SparseMatrixCSC.請注意,即使A沒有類型標簽,它仍然必須是對稱的或 Hermitian。如果perm沒有給出,使用fill-reducing 排列。F = cholesky(A)最常用於求解方程組F\b, 還有方法LinearAlgebra.diag,LinearAlgebra.det, 和LinearAlgebra.logdet被定義為F.您還可以從F, 使用F.L.但是,由於默認情況下啟用了透視,因此分解在內部表示為A == P'*L*L'*P有一個置換矩陣P;隻使用L不考慮P會給出不正確的答案。為了包括排列的影響,通常最好提取 "combined" 因子,例如PtL = F.PtL(相當於P'*L) 和LtP = F.UP(相當於L'*P)。
當 check = true 時,如果分解失敗,則會引發錯誤。當 check = false 時,檢查分解的有效性(通過 )由用戶負責。issuccess
設置可選的 shift 關鍵字參數計算 A+shift*I 而不是 A 的分解。如果提供了perm 參數,它應該是1:size(A,1) 的排列,給出使用的順序(而不是 CHOLMOD 的默認 AMD 順序)。
例子
在以下示例中,使用的 fill-reducing 排列是 [3, 2, 1] 。如果 perm 設置為 1:3 以強製不進行置換,則因子中的非零元素數為 6。
julia> A = [2 1 1; 1 2 0; 1 0 2]
3×3 Matrix{Int64}:
2 1 1
1 2 0
1 0 2
julia> C = cholesky(sparse(A))
SuiteSparse.CHOLMOD.Factor{Float64}
type: LLt
method: simplicial
maxnnz: 5
nnz: 5
success: true
julia> C.p
3-element Vector{Int64}:
3
2
1
julia> L = sparse(C.L);
julia> Matrix(L)
3×3 Matrix{Float64}:
1.41421 0.0 0.0
0.0 1.41421 0.0
0.707107 0.707107 1.0
julia> L * L' ≈ A[C.p, C.p]
true
julia> P = sparse(1:3, C.p, ones(3))
3×3 SparseMatrixCSC{Float64, Int64} with 3 stored entries:
⋅ ⋅ 1.0
⋅ 1.0 ⋅
1.0 ⋅ ⋅
julia> P' * L * L' * P ≈ A
true
julia> C = cholesky(sparse(A), perm=1:3)
SuiteSparse.CHOLMOD.Factor{Float64}
type: LLt
method: simplicial
maxnnz: 6
nnz: 6
success: true
julia> L = sparse(C.L);
julia> Matrix(L)
3×3 Matrix{Float64}:
1.41421 0.0 0.0
0.707107 1.22474 0.0
0.707107 -0.408248 1.1547
julia> L * L' ≈ A
true注意
此方法使用 SuiteSparse 中的 CHOLMOD 庫,該庫僅支持雙打或複雙打。不屬於這些元素類型的輸入矩陣將酌情轉換為SparseMatrixCSC{Float64} 或SparseMatrixCSC{ComplexF64}。
CHOLMOD 中的許多其他函數都已包裝,但未從 Base.SparseArrays.CHOLMOD 模塊導出。
用法二
cholesky(A, Val(false); check = true) -> Cholesky
計算密集對稱正定矩陣 A 的 Cholesky 分解並返回 分解。矩陣 Cholesky A 可以是 或 Symmetric Hermitian 或 StridedMatrix perfectly 對稱或 Hermitian StridedMatrix 。
三角 Cholesky 因子可以通過 F.L 和 F.U 從因式分解 F 獲得,其中 A ≈ F.U' * F.U ≈ F.L * F.L' 。
以下函數可用於 Cholesky 對象: 、size 、\ 、inv 、det 和 logdet 。isposdef
如果您有一個矩陣 A 由於其構造中的舍入錯誤而略微非 Hermitian,請在將其傳遞給 cholesky 之前將其包裝在 Hermitian(A) 中,以便將其視為完美 Hermitian。
當 check = true 時,如果分解失敗,則會引發錯誤。當 check = false 時,檢查分解的有效性(通過 )由用戶負責。issuccess
例子
julia> A = [4. 12. -16.; 12. 37. -43.; -16. -43. 98.]
3×3 Matrix{Float64}:
4.0 12.0 -16.0
12.0 37.0 -43.0
-16.0 -43.0 98.0
julia> C = cholesky(A)
Cholesky{Float64, Matrix{Float64}}
U factor:
3×3 UpperTriangular{Float64, Matrix{Float64}}:
2.0 6.0 -8.0
⋅ 1.0 5.0
⋅ ⋅ 3.0
julia> C.U
3×3 UpperTriangular{Float64, Matrix{Float64}}:
2.0 6.0 -8.0
⋅ 1.0 5.0
⋅ ⋅ 3.0
julia> C.L
3×3 LowerTriangular{Float64, Matrix{Float64}}:
2.0 ⋅ ⋅
6.0 1.0 ⋅
-8.0 5.0 3.0
julia> C.L * C.U == A
true用法三
cholesky(A, Val(true); tol = 0.0, check = true) -> CholeskyPivoted
計算密集對稱半正定矩陣A 的旋轉 Cholesky 分解並返回 分解。矩陣 CholeskyPivoted A 可以是 或 Symmetric Hermitian 或 StridedMatrix perfectly 對稱或 Hermitian StridedMatrix 。
三角 Cholesky 因子可以通過 F.L 和 F.U 從因式分解 F 以及通過 F.p 的排列獲得,其中 A[F.p, F.p] ≈ Ur' * Ur ≈ Lr * Lr' 與 Ur = F.U[1:F.rank, :] 和 Lr = F.L[:, 1:F.rank] 或 A ≈ Up' * Up ≈ Lp * Lp' 與 Up = F.U[1:F.rank, invperm(F.p)] 和 Lp = F.L[invperm(F.p), 1:F.rank] 。
以下函數可用於 CholeskyPivoted 對象: 、size 、\ 、inv 和 det 。rank
參數tol 確定用於確定等級的容差。對於負值,公差是機器精度。
如果您有一個矩陣 A 由於其構造中的舍入錯誤而略微非 Hermitian,請在將其傳遞給 cholesky 之前將其包裝在 Hermitian(A) 中,以便將其視為完美 Hermitian。
當 check = true 時,如果分解失敗,則會引發錯誤。當 check = false 時,檢查分解的有效性(通過 )由用戶負責。issuccess
例子
julia> X = [1.0, 2.0, 3.0, 4.0];
julia> A = X * X';
julia> C = cholesky(A, Val(true), check = false)
CholeskyPivoted{Float64, Matrix{Float64}}
U factor with rank 1:
4×4 UpperTriangular{Float64, Matrix{Float64}}:
4.0 2.0 3.0 1.0
⋅ 0.0 6.0 2.0
⋅ ⋅ 9.0 3.0
⋅ ⋅ ⋅ 1.0
permutation:
4-element Vector{Int64}:
4
2
3
1
julia> C.U[1:C.rank, :]' * C.U[1:C.rank, :] ≈ A[C.p, C.p]
true
julia> l, u = C; # destructuring via iteration
julia> l == C.L && u == C.U
true相關用法
- Julia LinearAlgebra.cholesky!用法及代碼示例
- Julia LinearAlgebra.checksquare用法及代碼示例
- Julia LinearAlgebra.cross用法及代碼示例
- Julia LinearAlgebra.BLAS.dot用法及代碼示例
- Julia LinearAlgebra.bunchkaufman用法及代碼示例
- Julia LinearAlgebra.istriu用法及代碼示例
- Julia LinearAlgebra.istril用法及代碼示例
- Julia LinearAlgebra.stride1用法及代碼示例
- Julia LinearAlgebra.svd用法及代碼示例
- Julia LinearAlgebra.logdet用法及代碼示例
- Julia LinearAlgebra.eigen用法及代碼示例
- Julia LinearAlgebra.BLAS.dotu用法及代碼示例
- Julia LinearAlgebra.ldlt!用法及代碼示例
- Julia LinearAlgebra.I用法及代碼示例
- Julia LinearAlgebra.Transpose用法及代碼示例
- Julia LinearAlgebra.det用法及代碼示例
- Julia LinearAlgebra.tril!用法及代碼示例
- Julia LinearAlgebra.schur!用法及代碼示例
- Julia LinearAlgebra.tr用法及代碼示例
- Julia LinearAlgebra.axpby!用法及代碼示例
- Julia LinearAlgebra.adjoint!用法及代碼示例
- Julia LinearAlgebra.eigvecs用法及代碼示例
- Julia LinearAlgebra.LU用法及代碼示例
- Julia LinearAlgebra.isposdef!用法及代碼示例
- Julia LinearAlgebra.LQ用法及代碼示例
注:本文由純淨天空篩選整理自julialang.org 大神的英文原創作品 LinearAlgebra.cholesky — Function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
