A Julia package for orthogonal polynomials on an annulus.
This code used to be part of AlgebraicCurveOrthogonalPolynomials.jl.
This experimental package implements ZernikeAnnulus
and ComplexZernikeAnnulus
,
families of orthogonal polynomials on the annulus {ρ² ≤ x² + y² ≤ 1}
with respect to the weight (r² - ρ²)ᵃ * (1-r²)ᵇ
. This builds on top of
SemiclassicalOrthogonalPolynomials.jl and MultivariateOrthogonalPolynomials.jl.
julia> using AnnuliOrthogonalPolynomials, StaticArrays
julia> ρ, a, b = 0.5, 0.0, 0.0;
julia> Z = ZernikeAnnulus(ρ, a, b)
ZernikeAnnulus{Float64}(0.5, 0.0, 0.0)
julia> Z[SVector(0.5,0.2), Block.(1:3)] # Blocked by degree
3-blocked 6-element BlockVector{Float64}:
1.0
───────────────────
0.20000000000000004
0.5000000000000001
───────────────────
1.547298721428197
0.20000000000000007
0.21000000000000008
julia> x,y = first.(axes(Z,1)), last.(axes(Z,1));
julia> u = Z * (Z \ (exp.(x) .* cos.(y))) # Expand in annulus OPs
ZernikeAnnulus{Float64}(0.5, 0.0, 0.0) * [1.0, 9.352800883640776e-18, 0.9999999999999999, -5.2512913921638607e-17, -2.337754850841795e-18, 0.5, 2.153350906504162e-18, 1.1925107582660448e-17, -5.513529126039963e-18, 0.1666666666666666 … ]
julia> u[SVector(0.5,0.2)] # Evaluate expansion
1.6158566135891377