Skip to content

Commit f37a603

Browse files
committed
inf QR works!
1 parent 6324922 commit f37a603

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

src/infqr.jl

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,4 +152,25 @@ function lmul!(adjA::Adjoint{<:Any,<:QRPackedQ{<:Any,<:AdaptiveQRFactors}}, B::C
152152
end
153153
end
154154
B
155-
end
155+
end
156+
157+
function (*)(A::QRPackedQ{T,<:AdaptiveQRFactors}, x::AbstractVector{S}) where {T,S}
158+
TS = promote_op(matprod, T, S)
159+
lmul!(A, Base.copymutable(convert(AbstractVector{TS},x)))
160+
end
161+
162+
function (*)(A::Adjoint{T,<:QRPackedQ{T,<:AdaptiveQRFactors}}, x::AbstractVector{S}) where {T,S}
163+
TS = promote_op(matprod, T, S)
164+
lmul!(A, Base.copymutable(convert(AbstractVector{TS},x)))
165+
end
166+
167+
ldiv!(R::UpperTriangular{<:Any,<:AdaptiveQRFactors}, B::AbstractVector) = materialize!(Ldiv(R, B))
168+
169+
170+
171+
ldiv!(dest::AbstractVector, F::QR{<:Any,<:AdaptiveQRFactors}, b::AbstractVector) =
172+
ldiv!(F, copyto!(dest, b))
173+
ldiv!(F::QR{<:Any,<:AdaptiveQRFactors}, b::AbstractVector) = ldiv!(F.R, lmul!(F.Q',b))
174+
\(F::QR{<:Any,<:AdaptiveQRFactors}, B::AbstractVector) = ldiv!(F.R, F.Q'B)
175+
176+
factorize(A::BandedMatrix{<:Any,<:Any,<:OneToInf}) = qr(A)

test/test_infqr.jl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,21 @@ import InfiniteLinearAlgebra: partialqr!, AdaptiveQRData, AdaptiveLayout
6363
Q,R = qr(A);
6464
b = Vcat([1.,2,3],Zeros(∞))
6565
@test lmul!(Q, Base.copymutable(b)).data qr(A[1:4,1:3]).Q*[1,2,3]
66+
6667
@test Q[1,1] -1/sqrt(2)
6768
@test Q[200_000,200_000] -1.0
6869
@test Q[1:101,1:100] qr(A[1:101,1:100]).Q[:,1:100]
6970

71+
@test lmul!(Q, Base.copymutable(b)) == Q*b
72+
7073
r = lmul!(Q', Base.copymutable(b))
7174
nr = length(r.data)
7275
@test qr(A[1:nr+1,1:nr]).Q'b[1:nr+1] r[1:nr+1]
7376

74-
materialize!(Ldiv(R, r))
77+
@test Q'*b == r
78+
79+
@test qr(A)\b == A\b
80+
@test (A*(A\b))[1:100] [1:3; Zeros(97)]
7581
end
7682
end
7783

0 commit comments

Comments
 (0)