Skip to content

Commit 3ff0f7b

Browse files
authored
Support degenerate bands in QRPackedQ (#469)
* Support degenerate bands in QRPackedQ * Update bandedqr.jl
1 parent 1a5b944 commit 3ff0f7b

File tree

3 files changed

+14
-6
lines changed

3 files changed

+14
-6
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "BandedMatrices"
22
uuid = "aae01518-5342-5314-be14-df237901396f"
3-
version = "1.9.1"
3+
version = "1.9.2"
44

55
[deps]
66
ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"

src/banded/bandedqr.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,15 @@ function banded_qr_lmul!(A, B)
4848
l,u = bandwidths(Afactors)
4949
D = bandeddata(Afactors)
5050
@inbounds begin
51-
for k = min(mA,nA):-1:1
51+
for k = min(mA,nA,last(colsupport(B)),length(A.τ)):-1:1
5252
for j = 1:nB
5353
vBj = B[k,j]
54-
for i = k+1:min(k+l,mB)
54+
for i = k+max(1,-u):min(k+l,mB)
5555
vBj += conj(D[i-k+u+1,k])*B[i,j]
5656
end
5757
vBj = A.τ[k]*vBj
5858
B[k,j] -= vBj
59-
for i = k+1:min(k+l,mB)
59+
for i = k+max(1,-u):min(k+l,mB)
6060
B[i,j] -= D[i-k+u+1,k]*vBj
6161
end
6262
end
@@ -81,12 +81,12 @@ function banded_qr_lmul!(adjA::AdjointQType, B)
8181
cs = colsupport(B,j)
8282
for k = max(1,minimum(cs)):min(mA,nA,maximum(cs)+l,length(A.τ))
8383
vBj = B[k,j]
84-
for i = k+1:min(k+l,mB)
84+
for i = k+max(1,-u):min(k+l,mB)
8585
vBj += conj(D[i-k+u+1,k])*B[i,j]
8686
end
8787
vBj = conj(A.τ[k])*vBj
8888
B[k,j] -= vBj
89-
for i = k+1:min(k+l,mB)
89+
for i = k+max(1,-u):min(k+l,mB)
9090
B[i,j] -= D[i-k+u+1,k]*vBj
9191
end
9292
end

test/test_bandedqr.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,14 @@ Random.seed!(0)
142142
@test ArrayLayouts.rmul!(copy(B), Q) == rmul!(copy(B), Q) B*Q
143143
end
144144
end
145+
146+
@testset "lowerbanded B" begin
147+
n = 10
148+
c = sqrt.(2*(5:2:2n+4) ./ ((3:n+2) .* (4:n+3) ))
149+
s = sqrt.(((1:n) .* (2:n+1)) ./ ((3:n+2) .* (4:n+3) ))
150+
Q = BandedMatrices.QRPackedQ(BandedMatrix(-2 => -(s ./ (c .+ 1))), c .+ 1)
151+
@test Q'Q Matrix(Q)'Matrix(Q) I
152+
end
145153
end
146154

147155
end # module

0 commit comments

Comments
 (0)