A Julia package for orthogonal polynomials on algebraic curves
This package contains ongoing research on orthogonal polynomials on
algebraic curves. That is, given an algebraic curve in 2D defined by
S = {(x,y) : p(x,y) = 0}
for some bivariate polynomial p
we wish
to construct polynomials orthogonal with respect to an inner product
supported on a subset Ω ⊆ S
. Note to avoid degenerecies these polynomials need to
be thought of as polynomials modulo the vanishing ideal I(S)
associated to S
.
The general theory and construction is not at yet possible, so we
outline some specific cases that we have implemented below.
This is funded by a Leverhulme Trust Research Project Grant on "Constructive approximation on algebraic curves and surfaces".
We can construct orthogonal polynomials on an arc, that is,
Ω = {(cos(θ), sin(θ)) : a ≤ θ ≤ b}
, which is a subset of
the circle {(x,y) : x^2 + y^2 = 1}
.
We parameterise points on the circle by angle, using a special
type CircleCoordinate(θ)
:
julia> CircleCoordinate(0.1)
2-element CircleCoordinate{Float64} with indices SOneTo(2):
0.9950041652780258
0.09983341664682815
For now we only support the half circle y ≥ 0
with the
weight y^a
, which we construct via UltrasphericalArc(a)
,
which is implemented in the framework of ContinuumArrays.jl:
julia> P = UltrasphericalArc() # uniform weight on the arc
UltrasphericalArc(0.0)
julia> P[CircleCoordinate(0.1),1:5] # first 5 polynomials
5-element Array{Float64,1}:
1.0
0.9950041652780258
0.7024490016371341
2.030105652576658
0.06160390817639964
Note there are two (and only two) degree-d
polynomials
apart from d = 1
. This is accessible as the columns of P
are blocked a la BlockArrays.jl:
julia> P[CircleCoordinate(0.1), Block.(1:3)]
3-blocked 5-element PseudoBlockArray{Float64,1,Array{Float64,1},Tuple{BlockedUnitRange{StepRange{Int64,Int64}}}}:
1.0
───────────────────
0.9950041652780258
0.7024490016371341
───────────────────
2.030105652576658
0.06160390817639964