A couple of ideas for improving the ODE solver capabilities are listed on the GSoC project ideas page: https://github.com/sympy/sympy/wiki/GSoC-Ideas#other-ode-ideas
I propose a roadmap for a (first order) ODE solver that leads to a structured and modular workflow where the individual functionalities can be reused for other, more advanced solvers. Currently, the first order ODE solver consists of a collection of solvers based mainly on pattern matching for well-known ODEs. More general methods for first order and second order ODEs exist that do not depend on pattern matching, but on searching for integrating factors or symmetry generators (that construct an integrating factor) of a certain type. For first order ODEs, the key is that an integrating factor will solve the ODE. You can either search directly for integrating factors of a certain type, or you can search for a symmetry generator that will then in turn lead to an integrating factor. Darboux methods search directly for integrating factors of a certain type. This method will find all solutions of first order ODEs with Liouvillian solutions, which is a very broad class. The idea is that you assume a polynomial shape for the integrating factor of a certain degree and then find the coefficients of using the method of undetermined coefficients. This method works well, but you need a solver for nonlinear systems of equations, so a Groebner basis computation, like the F5 algorithm would be needed in general. Another approach is symmetry methods. A symmetry generator of the ODE is found, which directly leads to an integrating factor. Once the integrating factor is found, you can construct the first integral of the ODE, which is an implicit solution. If possible, you can then try to write the first integral as an explicit solution of the ODE. In general, we would also need Groebner basis computations for finding symmetries, but we can avoid this by implementing searches for specific symmetry generators. So the workflow for the symmetry method is: 1. compute symmetry generator using several available options 2. compute integrating factor from symmetry generator 3. compute first integral using integrating factor 4. write first integral as explicit solution of the ODE ODE solvers that can fit into this workflow are solvers for linear, inverse linear, exact, separable, Bernoulli, Abel (constant coefficient) and homogeneous ODEs Some first order ODEs need special treatment, like Riccati ODEs and ODEs that have special functions as the solution (Bessel, Airy,...). That is because you need to solve the ODE first to find the symmetry generators. A solver for Rational Riccati ODEs will be important because many problems can be reduced to the solution of a Riccati ODE, like for instance second order ODEs Performance and robustness is important. We need a regression test containing a large collection of ODEs for testing. The books of Kamke and Murphy contain such lists. So I propose the following projects, which could be part of a GSOC project: 1. Create regression test for the Kamke and Murphy ODEs 2. Create workflow as stated above, and write auxiliary functions like computeFirstIntegralFromIntegratingFactor, testIntegratingFactor, etc 3. Implement more structured symmetry search for well known ODEs, and make existing symmetry searches robust 4. Add more advanced symmetry search like from the paper of Kolokolnikov (https://arxiv.org/abs/math-ph/0007023) 5. Add rational Riccati solver With this basis, methods can then be added that use this functionality: 6. Kovacic method for second order ODEs with Liouvillian solutions 7. Solver for rational first order ODEs 9. Implicit and higher degree first order ODEs 10. Computation of Janet bases for general linear second order ODEs. 11. Symmetry method for second order ODEs 12. Second order nonlinear ODEs 13. Computation of Invariant Algebraic Curves Let me know what you think of this plan. All we need now is somebody who will do all of this :-) Best regards, Nijso -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sympy+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/f6bcbe4b-26a1-4948-b12c-0048e6fb9e88n%40googlegroups.com.