Open
Description
Based on discussions with @mezzarobba and @fredrik-johansson:
-
A module for generic Ore polynomials:
gr_ore_poly
- differential operators in
d/dz
and inz*d/dz
, withgr_poly
s as coefficients - difference operators (forward and backward shift)
- q-difference operators
- Conversion functions, including also Ore polynomial to (companion) matrix of polynomials.
- differential operators in
-
Implementation of numerical algorithms:
acb_holonomic
oracb_ode
- Functions can take Ore polynomials or matrices of polynomials, whichever is most natural for the algorithm.
- Can have specializations for high precision and low precision.
- For many applications you know the path you want to take for analytic continuation, so it can be an input.
- Subdivision of a path should ideally be done automatically; often you notice the behavior of a solution as you expand, so you need to subdivide more.
- For singular case, some functions need additional input to specify the structure of the local solutions.
- Evaluation of holonomic function at a point.
- Implementation of the bit-burst algorithm, e.g. for evaluation of Bessel functions.
-
Generic implementations of D-finite function expansion/evaluation can go in
gr_poly
- Ideally expansion and evaluation would share as much code as possible.
- Should support evaluating at a point directly (or e.g. computing a single coefficient), without keeping the whole polynomial in memory.
- Dynamically decide when to stop expanding a power series, to get the needed precision to evaluate at a point.
- Newton iteration
- Divide and conquer
- Naive algorithm using the recurrence directly
- Faster algorithms for higher precision: fast computation of a single coefficient, or a single partial sum.
- Ideally expansion and evaluation would share as much code as possible.