## AlgebraicCurveOrthogonalPolynomials.jl

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".

# Arc

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