This week was majorly focused on fixing issues. Thanks to Ondrej, Aaron and Kalevi for testing the module and pointing them out. Some of the issues required a new functionality to be added and some were just plain technical bugs.
I started by writing a method which allows the user to change the point
x0 where the initial conditions are stored. Firstly it tries converting to SymPy and then convert back to holonomic i.e.
from_sympy(self.to_sympy(), x0=b). If the process fails somewhere then the method numerically integrates the differential equation to the point
b. This method was then used in adding support for initial conditions at different points in addition and multiplication. Issues are #11292 and #11293.
After that I implemented differentiation for a holonomic function. The algorithm is described here. A limitation is that sometimes it’s not able to compute sufficient initial conditions (mainly if the point
x0 is singular).
There was also a bug in
to_sequence() method. Apparently, whenever there weren’t sufficient initial conditions for the recurrence relation,
to_sympy() would fail. So I changed it to make
to_recurrence() return unknown symbols
C_j , where
C_j representing the coefficient of
x^j in the power series. So now even if we don’t have enough initial conditions,
to_sympy() will return an answer with arbitrary symbols in it. This is also useful in power series expansion.
Earlier the method
to_sympy() would only work if initial conditions are stored at
0 which is a big limitation. Thanks to Kalevi for the solution we now can find the
hyper() representation of a holonomic function for any point
x0 .(of course only if it exists.) This is further used by
to_sympy() to convert to expressions. There is also something interesting Kalevi said “The best points to search for a hypergeometric series are the regular singular points”. I observed this turned out to be true a lot of times. We should keep this in mind when using
Later I added functionality to convert an algebraic function of the form
p^(m/n) , for a polynomial
p . Thanks to Aaron and Ondrej for the solution. Also added custom
Exception to use in the holonomic module. Some small bugs #11319, #11316 and 11318 were also fixed.
Currently I am trying to make
from_sympy() work if additional
symbols are given in the expression and also support other types of fields (
rationals (default right now),
integers ). This involves extending the ground domain of the Polynomials used internally. Hopefully this should be done in the next couple of days.
The unmerged fixes are at #11330.