Skip to content

Commit b98359c

Browse files
committed
support QR
1 parent dba640a commit b98359c

File tree

3 files changed

+22
-4
lines changed

3 files changed

+22
-4
lines changed

src/banded/tridiagonalconjugation.jl

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,17 @@ end
5353
# fills in the rows kr of UX
5454
main_upper_mul_tri_triview!(UX, U::UpperTriangular, X, kr, kwds...) = main_upper_mul_tri_triview!(UX, parent(U), X, kr, kwds...)
5555

56-
function main_upper_mul_tri_triview!(UX, U::Union{CachedMatrix,AdaptiveCholeskyFactors,AdaptiveQRFactors}, X, kr, kwds...)
56+
function main_upper_mul_tri_triview!(UX, U::Union{CachedMatrix,AdaptiveCholeskyFactors}, X, kr, kwds...)
5757
resizedata!(U, kr[end], kr[end]+2)
5858
main_upper_mul_tri_triview!(UX, U.data, X, kr, kwds...)
5959
end
6060

61+
function main_upper_mul_tri_triview!(UX, U::AdaptiveQRFactors, X, kr, kwds...)
62+
resizedata!(U, kr[end], kr[end]+2)
63+
main_upper_mul_tri_triview!(UX, U.data.data, X, kr, kwds...)
64+
end
65+
66+
6167
function main_upper_mul_tri_triview!(UX, U::BandedMatrix, X, kr, bₖ=X[kr[1]-1,kr[1]], aₖ=X[kr[1],kr[1]], cₖ=X[kr[1]+1,kr[1]], cₖ₋₁=X[kr[1],kr[1]-1])
6268
Xdl, Xd, Xdu = subdiagonaldata(X), diagonaldata(X), supdiagonaldata(X)
6369
UXdl, UXd, UXdu = UX.dl, UX.d, UX.du
@@ -160,6 +166,11 @@ function main_tri_mul_invupper_triview!(Y::Tridiagonal, X::Tridiagonal, R::Union
160166
main_tri_mul_invupper_triview!(Y, X, R.data, kr, kwds...)
161167
end
162168

169+
function main_tri_mul_invupper_triview!(Y::Tridiagonal, X::Tridiagonal, R::AdaptiveQRFactors, kr, kwds...)
170+
resizedata!(R, kr[end], kr[end]+1)
171+
main_tri_mul_invupper_triview!(Y, X, R.data.data, kr, kwds...)
172+
end
173+
163174
function main_tri_mul_invupper_triview!(Y::Tridiagonal, X::Tridiagonal, R::BandedMatrix, kr, Rₖₖ=R[first(kr)-1,first(kr)-1], Rₖₖ₊₁=R[first(kr)-1,first(kr)])
164175
Xdl, Xd, Xdu = X.dl, X.d, X.du
165176
Ydl, Yd, Ydu = Y.dl, Y.d, Y.du
@@ -217,8 +228,8 @@ end
217228
function TridiagonalConjugationData(U, X, V)
218229
T = promote_type(typeof(inv(V[1, 1])), eltype(U), eltype(X)) # include inv so that we can't get Ints
219230
n_init = 100
220-
UX = Tridiagonal(Vector{T}(undef, n_init-1), Vector{T}(undef, n_init), Vector{T}(undef, n_init-1))
221-
Y = Tridiagonal(Vector{T}(undef, n_init-1), Vector{T}(undef, n_init), Vector{T}(undef, n_init-1))
231+
UX = Tridiagonal(zeros(T, n_init-1), zeros(T, n_init), zeros(T, n_init-1)) # zeros for BigFLoat
232+
Y = Tridiagonal(zeros(T, n_init-1), zeros(T, n_init), zeros(T, n_init-1))
222233
resizedata!(U, n_init, n_init)
223234
resizedata!(V, n_init, n_init)
224235
initiate_upper_mul_tri_triview!(UX, U, X) # fill-in 1st row

src/infcholesky.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const SymmetricBandedLayouts = Union{SymTridiagonalLayout,SymmetricLayout{<:Abst
1212
function AdaptiveCholeskyFactors(::SymmetricBandedLayouts, S::AbstractMatrix{T}) where T
1313
A = parent(S)
1414
l,u = bandwidths(A)
15-
data = BandedMatrix{T}(undef,(0,0),(l,u)) # pad super
15+
data = BandedMatrix(Zeros{T}(0,0),(l,u)) # pad super
1616
AdaptiveCholeskyFactors(CachedArray(data,A), 0)
1717
end
1818
AdaptiveCholeskyFactors(A::AbstractMatrix{T}) where T = AdaptiveCholeskyFactors(MemoryLayout(A), A)

src/infqr.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ end
8787

8888
partialqr!(F::AdaptiveQRData{<:Any,<:BlockSkylineMatrix}, n::Int) =
8989
partialqr!(F, findblock(axes(F.data,2), n))
90+
9091

9192
struct AdaptiveQRFactors{T,DM<:AbstractMatrix{T},M<:AbstractMatrix{T}} <: LayoutMatrix{T}
9293
data::AdaptiveQRData{T,DM,M}
@@ -124,6 +125,11 @@ function getindex(F::AdaptiveQRFactors, k::Int, j::Int)
124125
F.data.data[k,j]
125126
end
126127

128+
function resizedata!(F::AdaptiveQRFactors, k::Int, j::Int)
129+
partialqr!(F.data, j)
130+
F
131+
end
132+
127133
colsupport(F::QRPackedQ{<:Any,<:AdaptiveQRFactors}, j) = 1:last(colsupport(F.factors, j))
128134
rowsupport(F::QRPackedQ{<:Any,<:AdaptiveQRFactors}, j) = first(rowsupport(F.factors, j)):size(F,2)
129135

@@ -150,6 +156,7 @@ function adaptiveqr(A)
150156
end
151157

152158
qr_layout(::BandedLayouts, ::NTuple{2,OneToInf{Int}}, A) = adaptiveqr(A)
159+
qr_layout(::AbstractBandedLayout, ::NTuple{2,OneToInf{Int}}, A) = adaptiveqr(A)
153160
qr_layout(::AbstractAlmostBandedLayout, ::NTuple{2,OneToInf{Int}}, A) = adaptiveqr(A)
154161
__qr_layout(_, ::NTuple{2,InfiniteCardinal{0}}, A) = adaptiveqr(A)
155162
qr_layout(::AbstractBlockBandedLayout, ::NTuple{2,InfiniteCardinal{0}}, A) = adaptiveqr(A)

0 commit comments

Comments
 (0)