flint
flint copied to clipboard
Wishlist for D-finite/holonomic functions
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.