Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[wip] divconquer summation for d-finite series #2186

Draft
wants to merge 4 commits into
base: main
Choose a base branch
from

Conversation

mezzarobba
Copy link
Contributor

As a small step toward #1881, I have started porting to plain FLINT a
small piece of ore_algebra.analytic.

It is still very much a work in progress (important pieces are missing,
and what is there is far from final) but I would already appreciate
feedback on the API and code style.

@mezzarobba
Copy link
Contributor Author

A few notes on specific points:

Module name: I went for acb_holonomic as it was one of the options listed in #1881 and I thought it better to keep acb_ode available for nonlinear equations. However, acb_holonomic may be a too specific since much of the code could be extended to support linear ODEs with analytic coefficients. Maybe rename to acb_lode?

Function and parameter names: I am bad at naming things, and I changed my mind several times regarding how some things should be called. Also, while I tried to adopt FLINT's conventions, I have my own idiosyncratic habits. Suggestions welcome!

Constants: Basically all acb for now. Much of the code could later be gr-alized to other fp/ball types, and some parts to more general coefficient rings.

Data layout: The divide-and-conquer summation code stores both the solution being computed and the corresponding residual in the same buffer. This seems like a natural thing to do when I started but may make some things more complicated than necessary in the end. OTOH I suppose it might be beneficial if the implementation is later adapted to work with packed fixed-precision floating-point numbers.

Mathematical conventions: Initial conditions are specified as Taylor coefficients as opposed to derivatives (e.g., $(a₀,a₁,a₂) = (0,0,1)$, not $(f(0),f'(0),f''(0)) = (0,0,2)$, for $f(x) = x²+O(x³)$). Series involving logs are expanded in terms of $x^n \log(x)^k/k!$, both on input (for specifying initial conditions) and on output. This simplifies some formulas, but really the main reason is that these are the conventions I am used to (and it makes comparison with my existing code easier).

@mezzarobba
Copy link
Contributor Author

Note that @rburing has an implementation of more or less the same algorithm at https://gitlab.inria.fr/ricardo-thomas.buring/d-finite-fun, but

  • over generic rings,
  • for nonsingular first-order systems (vs regular singular equations here),
  • with a focus on computing truncated series (vs evaluating the sum).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant