@@ -16,32 +16,21 @@ _apply_ql!(::AbstractColumnMajor, ::AbstractStridedLayout, ::AbstractStridedLayo
16
16
LAPACK. ormql! (' L' ,' C' ,A,τ,B)
17
17
apply_ql! (A, τ, B) = _apply_ql! (MemoryLayout (typeof (A)), MemoryLayout (typeof (τ)), MemoryLayout (typeof (B)), A, τ, B)
18
18
19
- function _blockbanded_qr! (A:: AbstractMatrix , τ:: AbstractVector )
20
- M,N = Block .(blocksize (A))
21
- (M < N ? axes (A,1 ) : axes (A,2 )) == axes (τ,1 ) || throw (DimensionMismatch (" " ))
22
- _blockbanded_qr! (A, τ, min (N,M))
23
- QR (A,τ. blocks)
24
- end
25
-
26
- function _blockbanded_qr! (A:: AbstractMatrix , τ:: AbstractVector , NCOLS:: Block{1} )
19
+ function qr! (A:: BlockBandedMatrix{T} ) where T
27
20
l,u = blockbandwidths (A)
28
- M,N = Block .(blocksize (A))
29
- for K = Block (1 ): NCOLS
30
- KR = K: min (K+ l,M)
31
- V = view (A,KR,K)
32
- t = view (τ,K)
21
+ M,N = blocksize (A)
22
+ ax1 = M < N ? axes (A,1 ) : axes (A,2 )
23
+ τ = PseudoBlockVector {T} (undef, (ax1,))
24
+ for K = 1 : min (N,M)
25
+ KR = Block .(K: min (K+ l,M))
26
+ V = view (A,KR,Block (K))
27
+ t = view (τ,Block (K))
33
28
qrf! (V,t)
34
29
for J = K+ 1 : min (K+ u,N)
35
- apply_qr! (V, t, view (A,KR,J ))
30
+ apply_qr! (V, t, view (A,KR,Block (J) ))
36
31
end
37
32
end
38
- A,τ
39
- end
40
-
41
- function qr! (A:: BlockBandedMatrix{T} ) where T
42
- M,N = blocksize (A)
43
- ax1 = M < N ? axes (A,1 ) : axes (A,2 )
44
- _blockbanded_qr! (A, PseudoBlockVector {T} (undef, (ax1,)))
33
+ QR (A,τ. blocks)
45
34
end
46
35
47
36
function ql! (A:: BlockBandedMatrix{T} ) where T
@@ -68,13 +57,11 @@ function ql!(A::BlockBandedMatrix{T}) where T
68
57
QL (A,τ. blocks)
69
58
end
70
59
71
- _qr (:: AbstractBlockBandedLayout , :: Tuple{Integer,Integer} , A) = qr! (BlockBandedMatrix (A, (blockbandwidth (A,1 ), blockbandwidth (A,1 )+ blockbandwidth (A,2 ))))
72
- _qr (lay:: AbstractBlockBandedLayout , ax:: Tuple{AbstractUnitRange{Int},AbstractUnitRange{Int}} , A) = _qr (lay, map (length, ax), A)
60
+ _qr (:: AbstractBlockBandedLayout , _, A) = qr! (BlockBandedMatrix (A, (blockbandwidth (A,1 ), blockbandwidth (A,1 )+ blockbandwidth (A,2 ))))
73
61
_ql (:: AbstractBlockBandedLayout , _, A) = ql! (BlockBandedMatrix (A, (blockbandwidth (A,1 )+ blockbandwidth (A,2 ),blockbandwidth (A,2 ))))
74
62
_factorize (:: AbstractBlockBandedLayout , _, A) = qr (A)
75
63
76
- function materialize! (M:: Lmul{<:AdjQRPackedQLayout{<:AbstractBlockBandedLayout}} )
77
- adjQ,Bin = M. A,M. B
64
+ function lmul! (adjQ:: Adjoint{<:Any,<:QRPackedQ{<:Any,<:BlockSkylineMatrix}} , Bin:: AbstractVector )
78
65
Q = parent (adjQ)
79
66
A = Q. factors
80
67
l,u = blockbandwidths (A)
@@ -91,7 +78,8 @@ function materialize!(M::Lmul{<:AdjQRPackedQLayout{<:AbstractBlockBandedLayout}}
91
78
end
92
79
Bin
93
80
end
94
- function materialize! (M:: Lmul{<:AdjQLPackedQLayout{<:AbstractBlockBandedLayout}} )
81
+
82
+ function lmul! (adjQ:: Adjoint{<:Any,<:QLPackedQ{<:Any,<:BlockSkylineMatrix}} , Bin:: AbstractVector )
95
83
Q = parent (adjQ)
96
84
A = Q. factors
97
85
l,u = blockbandwidths (A)
0 commit comments