1
1
using InfiniteLinearAlgebra, InfiniteRandomArrays, BandedMatrices, LazyArrays, LazyBandedMatrices, InfiniteArrays, ArrayLayouts, Test
2
- using InfiniteLinearAlgebra: BidiagonalConjugation, OneToInf
2
+ using InfiniteLinearAlgebra: BidiagonalConjugation, SymTridiagonalConjugation, TridiagonalConjugation, OneToInf, TridiagonalConjugationData, resizedata!, TridiagonalConjugationBand
3
3
using ArrayLayouts: supdiagonaldata, subdiagonaldata, diagonaldata
4
4
using LinearAlgebra
5
5
using LazyArrays: LazyLayout
@@ -131,50 +131,62 @@ end
131
131
@time Y = InfiniteLinearAlgebra. tri_mul_invupper_triview (UX, U)
132
132
@test Tridiagonal (U* X / U) ≈ Tridiagonal (UX / U) ≈ Y
133
133
134
- data = InfiniteLinearAlgebra . TridiagonalConjugationData (R, X_T)
134
+ data = TridiagonalConjugationData (R, X_T)
135
135
@test data. UX[1 ,:] ≈ UX[1 ,1 : 100 ]
136
- InfiniteLinearAlgebra . resizedata! (data, 1 )
136
+ resizedata! (data, 1 )
137
137
@test data. UX[1 : 2 ,:] ≈ UX[1 : 2 ,1 : 100 ]
138
138
@test data. Y[1 ,:] ≈ Y[1 ,1 : 100 ]
139
- InfiniteLinearAlgebra . resizedata! (data, 2 )
139
+ resizedata! (data, 2 )
140
140
@test data. UX[1 : 3 ,:] ≈ UX[1 : 3 ,1 : 100 ]
141
141
@test data. Y[1 : 2 ,:] ≈ Y[1 : 2 ,1 : 100 ]
142
- InfiniteLinearAlgebra . resizedata! (data, 3 )
142
+ resizedata! (data, 3 )
143
143
@test data. UX[1 : 4 ,:] ≈ UX[1 : 4 ,1 : 100 ]
144
144
@test data. Y[1 : 3 ,:] ≈ Y[1 : 3 ,1 : 100 ]
145
- InfiniteLinearAlgebra . resizedata! (data, 1000 )
145
+ resizedata! (data, 1000 )
146
146
@test data. UX[1 : 999 ,1 : 999 ] ≈ UX[1 : 999 ,1 : 999 ]
147
147
@test data. Y[1 : 999 ,1 : 999 ] ≈ Y[1 : 999 ,1 : 999 ]
148
148
149
- data = InfiniteLinearAlgebra . TridiagonalConjugationData (R, X_T)
150
- InfiniteLinearAlgebra . resizedata! (data, 1000 )
149
+ data = TridiagonalConjugationData (R, X_T)
150
+ resizedata! (data, 1000 )
151
151
@test data. UX[1 : 999 ,1 : 999 ] ≈ UX[1 : 999 ,1 : 999 ]
152
152
@test data. Y[1 : 999 ,1 : 999 ] ≈ Y[1 : 999 ,1 : 999 ]
153
153
end
154
-
154
+
155
155
@testset " Cholesky" begin
156
156
M = Symmetric (_BandedMatrix (Vcat (Hcat (Fill (- 1 / (2 sqrt (2 )),1 ,3 ), Fill (- 1 / 4 ,1 ,∞)), Zeros (1 ,∞), Hcat ([0.5 0.25 ], Fill (0.5 ,1 ,∞))), ∞, 0 , 2 ))
157
157
R = cholesky (M). U
158
158
X_T = LazyBandedMatrices. Tridiagonal (Vcat (1 / sqrt (2 ), Fill (1 / 2 ,∞)), Zeros (∞), Vcat (1 / sqrt (2 ), Fill (1 / 2 ,∞)))
159
- data = InfiniteLinearAlgebra . TridiagonalConjugationData (R, X_T);
159
+ data = TridiagonalConjugationData (R, X_T);
160
160
n = 1000
161
161
@time U = V = R[1 : n,1 : n];
162
162
@time X = Tridiagonal (Vector (X_T. dl[1 : n- 1 ]), Vector (X_T. d[1 : n]), Vector (X_T. du[1 : n- 1 ]));
163
163
UX = Tridiagonal (U* X)
164
164
Y = Tridiagonal (UX / U)
165
165
@test data. UX[1 ,:] ≈ UX[1 ,1 : 100 ]
166
- InfiniteLinearAlgebra . resizedata! (data, 1 )
166
+ resizedata! (data, 1 )
167
167
@test data. UX[1 : 2 ,:] ≈ UX[1 : 2 ,1 : 100 ]
168
168
@test data. Y[1 ,:] ≈ Y[1 ,1 : 100 ]
169
- InfiniteLinearAlgebra . resizedata! (data, 2 )
169
+ resizedata! (data, 2 )
170
170
@test data. UX[1 : 3 ,:] ≈ UX[1 : 3 ,1 : 100 ]
171
171
@test data. Y[1 : 2 ,:] ≈ Y[1 : 2 ,1 : 100 ]
172
- InfiniteLinearAlgebra . resizedata! (data, 3 )
172
+ resizedata! (data, 3 )
173
173
@test data. UX[1 : 4 ,:] ≈ UX[1 : 4 ,1 : 100 ]
174
174
@test data. Y[1 : 3 ,:] ≈ Y[1 : 3 ,1 : 100 ]
175
- InfiniteLinearAlgebra . resizedata! (data, 1000 )
175
+ resizedata! (data, 1000 )
176
176
@test data. UX[1 : 999 ,1 : 999 ] ≈ UX[1 : 999 ,1 : 999 ]
177
177
@test data. Y[1 : 999 ,1 : 999 ] ≈ Y[1 : 999 ,1 : 999 ]
178
-
178
+ end
179
+
180
+ @testset " TridiagonalConjugationBand" begin
181
+ R,X = (_BandedMatrix (Vcat (- Ones (1 ,∞)/ 2 , Zeros (1 ,∞), Hcat (Ones (1 ,1 ),Ones (1 ,∞)/ 2 )), ℵ₀, 0 ,2 ),
182
+ LazyBandedMatrices. Tridiagonal (Vcat (1.0 , Fill (1 / 2 ,∞)), Zeros (∞), Fill (1 / 2 ,∞)))
183
+
184
+ Y = TridiagonalConjugation (R, X)
185
+ n = 100_000
186
+ @test Y[n,n+ 1 ] ≈ 1 / 2
187
+
188
+ Y = SymTridiagonalConjugation (R, X)
189
+ n = 100_000
190
+ @test Y[n,n+ 1 ] ≈ 1 / 2
179
191
end
180
192
end
0 commit comments