@@ -138,20 +138,16 @@ import LazyArrays: AbstractCachedMatrix, resizedata!
138
138
wf = x-> (1 - x)^ 2
139
139
sqrtwf = x-> (1 - x)
140
140
# compute Jacobi matrix via decomp
141
- Jchol = cholesky_jacobimatrix (wf, P)
142
- JqrQ = qr_jacobimatrix (wf, P)
143
- JqrR = qr_jacobimatrix (wf, P, :R )
141
+ Jchol,_ = cholesky_jacobimatrix (wf, P)
142
+ JqrR,_ = qr_jacobimatrix (wf, P)
144
143
# use alternative inputs
145
144
sqrtW = (P \ (sqrtwf .(x) .* P))
146
- JqrQalt = qr_jacobimatrix (sqrtW, P)
147
- JqrRalt = qr_jacobimatrix (sqrtW, P, :R )
145
+ JqrRalt,_ = qr_jacobimatrix (sqrtW, J)
148
146
# compute Jacobi matrix via Lanczos
149
147
Jlanc = jacobimatrix (LanczosPolynomial (@. (wf .(x)),Normalized (legendre (0 .. 1 ))))
150
148
# Comparison with Lanczos
151
149
@test Jchol[1 : 500 ,1 : 500 ] ≈ Jlanc[1 : 500 ,1 : 500 ]
152
- @test JqrQ[1 : 500 ,1 : 500 ] ≈ Jlanc[1 : 500 ,1 : 500 ]
153
150
@test JqrR[1 : 500 ,1 : 500 ] ≈ Jlanc[1 : 500 ,1 : 500 ]
154
- @test JqrQalt[1 : 500 ,1 : 500 ] ≈ Jlanc[1 : 500 ,1 : 500 ]
155
151
@test JqrRalt[1 : 500 ,1 : 500 ] ≈ Jlanc[1 : 500 ,1 : 500 ]
156
152
end
157
153
@testset " QR case, w(x) = (1-x)^4" begin
@@ -161,19 +157,17 @@ import LazyArrays: AbstractCachedMatrix, resizedata!
161
157
wf = x -> (1 - x)^ 4
162
158
sqrtwf = x -> (1 - x)^ 2
163
159
# compute Jacobi matrix via decomp
164
- JqrQ = qr_jacobimatrix (wf, P)
165
- JqrR = qr_jacobimatrix (wf, P, :R )
160
+ JqrR,R = qr_jacobimatrix (wf, P)
166
161
# use alternative inputs
167
162
sqrtW = (P \ (sqrtwf .(x) .* P))
168
- JqrQalt = qr_jacobimatrix (sqrtW, P)
169
- JqrRalt = qr_jacobimatrix (sqrtW, P, :R )
163
+ JqrRalt,Ralt = qr_jacobimatrix (sqrtW, J)
170
164
# compute Jacobi matrix via Lanczos
171
165
Jclass = jacobimatrix (Normalized (jacobi (4 ,0 ,0 .. 1 )))
172
166
# Comparison with Lanczos
173
- @test JqrQ[ 1 : 10 , 1 : 10 ] ≈ Jclass [1 : 10 ,1 : 10 ]
174
- @test JqrR[1 : 10 ,1 : 10 ] ≈ Jclass[1 : 10 ,1 : 10 ]
175
- @test JqrQalt[ 1 : 10 , 1 : 10 ] ≈ Jclass [1 : 10 ,1 : 10 ]
176
- @test JqrRalt[1 : 10 ,1 : 10 ] ≈ Jclass[1 : 10 ,1 : 10 ]
167
+ S = Diagonal ( sign .( diag (R [1 : 10 ,1 : 10 ])))
168
+ @test JqrR[1 : 10 ,1 : 10 ] ≈ S * Jclass[1 : 10 ,1 : 10 ]* S
169
+ S = Diagonal ( sign .( diag (Ralt [1 : 10 ,1 : 10 ])))
170
+ @test JqrRalt[1 : 10 ,1 : 10 ] ≈ S * Jclass[1 : 10 ,1 : 10 ]* S
177
171
end
178
172
@testset " QR case, w(x) = (x)^2*(1-x)^4" begin
179
173
P = Normalized (legendre (0 .. 1 ))
@@ -182,35 +176,24 @@ import LazyArrays: AbstractCachedMatrix, resizedata!
182
176
wf = x-> (x)^ 2 * (1 - x)^ 4
183
177
sqrtwf = x-> (x)* (1 - x)^ 2
184
178
# compute Jacobi matrix via decomp
185
- JqrQ = qr_jacobimatrix (wf, P)
186
- JqrR = qr_jacobimatrix (wf, P, :R )
179
+ JqrR,R = qr_jacobimatrix (wf, P)
187
180
# use alternative inputs
188
181
sqrtW = (P \ (sqrtwf .(x) .* P))
189
- JqrQalt = qr_jacobimatrix (sqrtW, P)
190
- JqrRalt = qr_jacobimatrix (sqrtW, P, :R )
182
+ JqrRalt,_ = qr_jacobimatrix (sqrtW, J)
191
183
# compute Jacobi matrix via Lanczos
192
184
Jclass = jacobimatrix (Normalized (jacobi (4 ,2 ,0 .. 1 )))
193
185
# Comparison with Lanczos
194
- @test JqrQ[1 : 10 ,1 : 10 ] ≈ Jclass[1 : 10 ,1 : 10 ]
195
- @test JqrR[1 : 10 ,1 : 10 ] ≈ Jclass[1 : 10 ,1 : 10 ]
196
- @test JqrQalt[1 : 10 ,1 : 10 ] ≈ Jclass[1 : 10 ,1 : 10 ]
197
- @test JqrRalt[1 : 10 ,1 : 10 ] ≈ Jclass[1 : 10 ,1 : 10 ]
198
- # test consistency of resizing in succession
199
- F = qr_jacobimatrix (wf, P);
200
- resizedata! (JqrQ. dv,70 )
201
- resizedata! (JqrQ. ev,70 )
202
- @test JqrQ[1 : 5 ,1 : 5 ] ≈ F[1 : 5 ,1 : 5 ]
203
- @test JqrQ[1 : 20 ,1 : 20 ] ≈ F[1 : 20 ,1 : 20 ]
204
- @test JqrQ[50 : 70 ,50 : 70 ] ≈ F[50 : 70 ,50 : 70 ]
186
+
187
+ S = Diagonal (sign .(diag (R[1 : 10 ,1 : 10 ])))
188
+ @test JqrR[1 : 10 ,1 : 10 ] ≈ S* Jclass[1 : 10 ,1 : 10 ]* S
189
+ @test JqrRalt[1 : 10 ,1 : 10 ] ≈ S* Jclass[1 : 10 ,1 : 10 ]* S
205
190
end
206
191
@testset " BigFloat returns correct values" begin
207
192
t = BigFloat (" 1.1" )
208
193
P = Normalized (legendre (big (0 ).. big (1 )))
209
194
X = jacobimatrix (P)
210
- Xq = qr_jacobimatrix (t* I- X, P, :Q )
211
- Xr = qr_jacobimatrix (t* I- X, P, :R )
212
- @test Xq[1 : 20 ,1 : 20 ] ≈ Xr[1 : 20 ,1 : 20 ]
213
- @test_broken Xq[1 : 20 ,1 : 20 ] ≈ cholesky_jacobimatrix (Symmetric ((t* I- X)^ 2 ), P)[1 : 20 ,1 : 20 ]
195
+ Xr,R = qr_jacobimatrix (t* I- X, X)
196
+ @test_broken Xr[1 : 20 ,1 : 20 ] ≈ cholesky_jacobimatrix (Symmetric ((t* I- X)^ 2 ), X)[1 : 20 ,1 : 20 ]
214
197
end
215
198
end
216
199
0 commit comments