Skip to content

Commit 2de8894

Browse files
committed
More Zernike conversions
1 parent dd27a48 commit 2de8894

File tree

2 files changed

+15
-12
lines changed

2 files changed

+15
-12
lines changed

src/disk.jl

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -304,17 +304,14 @@ function \(A::Zernike{T}, B::Zernike{V}) where {T,V}
304304
TV = promote_type(T,V)
305305
A.a == B.a && A.b == B.b && return Eye{TV}((axes(A,2),))
306306
st = Int(A.a - B.a + A.b - B.b)
307-
ModalInterlace{TV}((Normalized.(Jacobi{TV}.(A.b,A.a:∞)) .\ Normalized.(Jacobi{TV}.(B.b,B.a:∞))) .* sqrt(convert(TV, 2)^(-st)), (ℵ₀,ℵ₀), (0,2st))
307+
ModalInterlace{TV}((Normalized.(Jacobi{TV}.(A.b,A.a:∞)) .\ Normalized.(Jacobi{TV}.(B.b,B.a:∞))) .* convert(TV, 2)^(-st/2), (ℵ₀,ℵ₀), (0,2st))
308308
end
309309

310-
function \(A::Zernike{T}, B::Weighted{V,Zernike{V}}) where {T,V}
310+
function \(A::Zernike{T}, wB::Weighted{V,Zernike{V}}) where {T,V}
311311
TV = promote_type(T,V)
312-
A.a == B.P.a == A.b == B.P.b == 0 && return Eye{TV}((axes(A,2),))
313-
if A.a == A.b == 0
314-
@assert B.P.a == 0 && B.P.b == 1
315-
ModalInterlace{TV}((Normalized.(Jacobi{TV}.(0, 0:∞)) .\ HalfWeighted{:a}.(Normalized.(Jacobi{TV}.(1, 0:∞)))) ./ sqrt(convert(TV, 2)), (ℵ₀,ℵ₀), (2,0))
316-
else
317-
Z = Zernike{TV}()
318-
(A \ Z) * (Z \ B)
319-
end
312+
B = wB.P
313+
A.a == B.a == A.b == B.b == 0 && return Eye{TV}((axes(A,2),))
314+
c = Int(B.a - A.a + B.b - A.b)
315+
@assert iszero(B.a)
316+
ModalInterlace{TV}((Normalized.(Jacobi{TV}.(A.b, A.a:∞)) .\ HalfWeighted{:a}.(Normalized.(Jacobi{TV}.(B.b, B.a:∞)))) .* convert(TV, 2)^(-c/2), (ℵ₀,ℵ₀), (2Int(B.b), 2Int(A.a+A.b)))
320317
end

test/test_disk.jl

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,9 @@ import ForwardDiff: hessian
219219

220220
@test R[Block.(Base.OneTo(6)), Block.(Base.OneTo(7))] == R[Block.(1:6), Block.(1:7)]
221221
@test Zernike()[xy,Block.(1:6)]' Zernike(1)[xy,Block.(1:6)]'*R[Block.(1:6),Block.(1:6)]
222+
223+
R = Zernike(2) \ Zernike()
224+
@test Zernike()[xy,Block.(1:6)]' Zernike(2)[xy,Block.(1:6)]'*R[Block.(1:6),Block.(1:6)]
222225
end
223226

224227
@testset "Lowering" begin
@@ -245,8 +248,11 @@ import ForwardDiff: hessian
245248

246249
@test exp.(L)[1:10,1:10] == exp.(L[1:10,1:10])
247250

248-
L2 = Zernike(1) \ Weighted(Zernike(1))
249-
@test w*Zernike(1)[xy,Block.(1:5)]' Zernike(1)[xy,Block.(1:7)]'*L2[Block.(1:7),Block.(1:5)]
251+
L = Zernike(1) \ Weighted(Zernike(1))
252+
@test 2w*Zernike(1)[xy,Block.(1:5)]' Zernike(1)[xy,Block.(1:7)]'*L[Block.(1:7),Block.(1:5)]
253+
254+
L = Zernike() \ Weighted(Zernike(2))
255+
@test w^2*Zernike(2)[xy,Block.(1:5)]' Zernike()[xy,Block.(1:9)]'*L[Block.(1:9),Block.(1:5)]
250256
end
251257

252258
@testset "plotting" begin

0 commit comments

Comments
 (0)