Skip to content

Commit cf9d9dd

Browse files
authored
SymTridiagonal support for cholesky (#140)
* make cholesky work better with SymTridiagonal * begin fixing tests * work on bug in julia 1.6
1 parent 4240f39 commit cf9d9dd

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

src/infcholesky.jl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ end
77
size(U::AdaptiveCholeskyFactors) = size(U.data.array)
88
bandwidths(A::AdaptiveCholeskyFactors) = (0,bandwidth(A.data,2))
99

10-
function AdaptiveCholeskyFactors(::SymmetricLayout{<:AbstractBandedLayout}, S::AbstractMatrix{T}) where T
10+
const SymmetricBandedLayouts = Union{SymTridiagonalLayout,SymmetricLayout{<:AbstractBandedLayout},DiagonalLayout}
11+
12+
function AdaptiveCholeskyFactors(::SymmetricBandedLayouts, S::AbstractMatrix{T}) where T
1113
A = parent(S)
1214
l,u = bandwidths(A)
1315
data = BandedMatrix{T}(undef,(0,0),(l,u)) # pad super
@@ -45,6 +47,7 @@ end
4547
adaptivecholesky(A) = Cholesky(AdaptiveCholeskyFactors(A), :U, 0)
4648

4749

50+
ArrayLayouts._cholesky(::SymTridiagonalLayout, ::NTuple{2,OneToInf{Int}}, A, ::CNoPivot) = adaptivecholesky(A)
4851
ArrayLayouts._cholesky(::SymmetricLayout{<:AbstractBandedLayout}, ::NTuple{2,OneToInf{Int}}, A, ::CNoPivot) = adaptivecholesky(A)
4952

5053
function colsupport(F::AdaptiveCholeskyFactors, j)

test/test_infcholesky.jl

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using InfiniteLinearAlgebra, LinearAlgebra, BandedMatrices, ArrayLayouts, Test
1+
using InfiniteLinearAlgebra, LinearAlgebra, BandedMatrices, ArrayLayouts, LazyBandedMatrices, Test
2+
import InfiniteLinearAlgebra: SymmetricBandedLayouts
23

34
@testset "infinite-cholesky" begin
45
S = Symmetric(BandedMatrix(0 => 1:∞, 1=> Ones(∞)))
@@ -10,10 +11,16 @@ using InfiniteLinearAlgebra, LinearAlgebra, BandedMatrices, ArrayLayouts, Test
1011
@test cholesky(S) \ b qr(S) \ b S \ b
1112

1213
@testset "singularly perturbed" begin
14+
# using Symmetric(BandedMatrix(...))
1315
ε = 0.0001
1416
S = Symmetric(BandedMatrix(0 => 2 .+ ε*(1:∞), 1=> -Ones(∞)))
1517
b = [1; zeros(∞)]
1618
@test cholesky(S) \ b S \ b
19+
# using SymTridiagonal(...)
20+
ε = 0.0001
21+
S = LazyBandedMatrices.SymTridiagonal(2 .+ ε*(1:∞), -Ones(∞))
22+
@test MemoryLayout(S) isa SymmetricBandedLayouts
23+
@test cholesky(S) \ b S \ b
1724
end
1825

1926
@testset "long bandwidths" begin

0 commit comments

Comments
 (0)